677 lines
20 KiB
ObjectPascal
677 lines
20 KiB
ObjectPascal
{*******************************************************************}
|
|
{ }
|
|
{ Developer Express Visual Component Library }
|
|
{ ExpressPrinting System(tm) COMPONENT SUITE }
|
|
{ }
|
|
{ Copyright (C) 1998-2009 Developer Express Inc. }
|
|
{ ALL RIGHTS RESERVED }
|
|
{ }
|
|
{ The entire contents of this file is protected by U.S. and }
|
|
{ International Copyright Laws. Unauthorized reproduction, }
|
|
{ reverse-engineering, and distribution of all or any portion of }
|
|
{ the code contained in this file is strictly prohibited and may }
|
|
{ result in severe civil and criminal penalties and will be }
|
|
{ prosecuted to the maximum extent possible under the law. }
|
|
{ }
|
|
{ RESTRICTIONS }
|
|
{ }
|
|
{ THIS SOURCE CODE AND ALL RESULTING INTERMEDIATE FILES }
|
|
{ (DCU, OBJ, DLL, ETC.) ARE CONFIDENTIAL AND PROPRIETARY TRADE }
|
|
{ SECRETS OF DEVELOPER EXPRESS INC. THE REGISTERED DEVELOPER IS }
|
|
{ LICENSED TO DISTRIBUTE THE EXPRESSPRINTINGSYSTEM AND }
|
|
{ ALL ACCOMPANYING VCL CONTROLS AS PART OF AN }
|
|
{ EXECUTABLE PROGRAM ONLY. }
|
|
{ }
|
|
{ THE SOURCE CODE CONTAINED WITHIN THIS FILE AND ALL RELATED }
|
|
{ FILES OR ANY PORTION OF ITS CONTENTS SHALL AT NO TIME BE }
|
|
{ COPIED, TRANSFERRED, SOLD, DISTRIBUTED, OR OTHERWISE MADE }
|
|
{ AVAILABLE TO OTHER INDIVIDUALS WITHOUT EXPRESS WRITTEN CONSENT }
|
|
{ AND PERMISSION FROM DEVELOPER EXPRESS INC. }
|
|
{ }
|
|
{ CONSULT THE END USER LICENSE AGREEMENT FOR INFORMATION ON }
|
|
{ ADDITIONAL RESTRICTIONS. }
|
|
{ }
|
|
{*******************************************************************}
|
|
|
|
unit dxPSCPDsg;
|
|
|
|
interface
|
|
|
|
{$I cxVer.inc}
|
|
|
|
uses
|
|
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
|
|
StdCtrls, ExtCtrls, ComCtrls, ImgList, Menus, dxPSCore, dxPSForm;
|
|
|
|
type
|
|
TdxfmCPDesignerOption = (doShowDescription);
|
|
TdxfmCPDesignerOptions = set of TdxfmCPDesignerOption;
|
|
|
|
TdxfmCPDesigner = class(TCustomdxPSForm)
|
|
pmItems: TPopupMenu;
|
|
miDesign: TMenuItem;
|
|
miLine2: TMenuItem;
|
|
miAdd: TMenuItem;
|
|
miDelete: TMenuItem;
|
|
ilItems: TImageList;
|
|
btnClose: TButton;
|
|
btnHelp: TButton;
|
|
pcItems: TPageControl;
|
|
tbsItems: TTabSheet;
|
|
lvItems: TListView;
|
|
pnlButtons: TPanel;
|
|
btnDesign: TButton;
|
|
btnAdd: TButton;
|
|
btnDelete: TButton;
|
|
btnPageSetup: TButton;
|
|
btnPrintPreview: TButton;
|
|
btnPrint: TButton;
|
|
miPageSetup: TMenuItem;
|
|
miPrintPreview: TMenuItem;
|
|
miPrint: TMenuItem;
|
|
miLine1: TMenuItem;
|
|
miRename: TMenuItem;
|
|
btnAddComposition: TButton;
|
|
miAddComposition: TMenuItem;
|
|
pnlNoItems: TPanel;
|
|
procedure lvItemsChange(Sender: TObject; Item: TListItem; Change: TItemChange);
|
|
procedure AddClick(Sender: TObject);
|
|
procedure AddCompositionClick(Sender: TObject);
|
|
procedure DeleteClick(Sender: TObject);
|
|
procedure pmItemsPopup(Sender: TObject);
|
|
procedure DesignClick(Sender: TObject);
|
|
procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
|
|
procedure FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
|
|
procedure lvItemsEdited(Sender: TObject; Item: TListItem; var S: String);
|
|
procedure lvItemsEditing(Sender: TObject; Item: TListItem; var AllowEdit: Boolean);
|
|
procedure lvItemsDblClick(Sender: TObject);
|
|
procedure PageSetupClick(Sender: TObject);
|
|
procedure PrintPreviewClick(Sender: TObject);
|
|
procedure PrintClick(Sender: TObject);
|
|
procedure RenameClick(Sender: TObject);
|
|
procedure tbsItemsResize(Sender: TObject);
|
|
procedure FormResize(Sender: TObject);
|
|
private
|
|
FComponentPrinter: TdxComponentPrinter;
|
|
FIsRefreshing: Boolean;
|
|
FListViewWndProc: TWndMethod;
|
|
FOptions: TdxfmCPDesignerOptions;
|
|
|
|
function GetCurrentLink: TBasedxReportLink;
|
|
function GetItem(Index: Integer): TBasedxReportLink;
|
|
function GetItemCount: Integer;
|
|
function GetSelected(Index: Integer): Boolean;
|
|
function GetSelectedCount: Integer;
|
|
procedure SetCurrentLink(Value: TBasedxReportLink);
|
|
procedure SetSelected(Index: Integer; Value: Boolean);
|
|
|
|
function CanAdd: Boolean;
|
|
function CanAddComposition: Boolean;
|
|
function CanDelete: Boolean;
|
|
function CanDesign: Boolean;
|
|
function CanPageSetup: Boolean;
|
|
function CanPrint: Boolean;
|
|
function CanPrintPreview: Boolean;
|
|
function CanRename: Boolean;
|
|
|
|
procedure DeleteSelection;
|
|
function GetSelectedItemsAsString: string;
|
|
function HasOnlyBuiltInsAreInSelection: Boolean;
|
|
procedure Initialize;
|
|
procedure LoadStrings;
|
|
procedure RefreshColumns;
|
|
procedure RefreshList;
|
|
procedure UpdateControlsState;
|
|
|
|
procedure ListViewWndProc(var Message: TMessage);
|
|
procedure SubClassListView;
|
|
procedure UnsubClassListView;
|
|
|
|
procedure CMDialogChar(var Msg: TCMDialogChar); message CM_DIALOGCHAR;
|
|
protected
|
|
procedure BeforeConstruction; override;
|
|
public
|
|
constructor Create(AOwner: TComponent); override;
|
|
destructor Destroy; override;
|
|
|
|
procedure Execute;
|
|
|
|
procedure LoadFromRegistry(const APath: string); override;
|
|
procedure SaveToRegistry(const APath: string); override;
|
|
|
|
property ComponentPrinter: TdxComponentPrinter read FComponentPrinter write FComponentPrinter;
|
|
property CurrentLink: TBasedxReportLink read GetCurrentLink write SetCurrentLink;
|
|
property ItemCount: Integer read GetItemCount;
|
|
property Items[Index: Integer]: TBasedxReportLink read GetItem;
|
|
property Selected[Index: Integer]: Boolean read GetSelected write SetSelected;
|
|
property SelectedCount: Integer read GetSelectedCount;
|
|
end;
|
|
|
|
PdxCPDesignerDlgData = ^TdxCPDesignerDlgData;
|
|
TdxCPDesignerDlgData = record
|
|
ComponentPrinter: TdxComponentPrinter;
|
|
Options: TdxfmCPDesignerOptions;
|
|
end;
|
|
|
|
procedure dxShowCPDesignerDlg(const AData: TdxCPDesignerDlgData);
|
|
|
|
implementation
|
|
|
|
{$R *.DFM}
|
|
|
|
uses
|
|
Math, CommCtrl, cxClasses, dxPSGlbl, dxPSUtl, dxPSRes, dxPSPopupMan,
|
|
dxPSfmLnkAdd, dxPSCompsProvider;
|
|
|
|
procedure dxShowCPDesignerDlg(const AData: TdxCPDesignerDlgData);
|
|
var
|
|
Dialog: TdxfmCPDesigner;
|
|
begin
|
|
if AData.ComponentPrinter = nil then Exit;
|
|
|
|
Dialog := TdxfmCPDesigner.Create(nil);
|
|
try
|
|
Dialog.ComponentPrinter := AData.ComponentPrinter;
|
|
Dialog.FOptions := AData.Options;
|
|
Dialog.Execute;
|
|
finally
|
|
Dialog.Free;
|
|
end;
|
|
end;
|
|
|
|
{ TdxfmCPDesigner }
|
|
|
|
procedure TdxfmCPDesigner.FormResize(Sender: TObject);
|
|
const
|
|
BtnOffsetY = 6;
|
|
var
|
|
BtnOffsetX, RightOrigin, TopOrigin: Integer;
|
|
begin
|
|
BtnOffsetX := pcItems.Left;
|
|
RightOrigin := BtnOffsetX + pcItems.Width;
|
|
TopOrigin := pcItems.Top + pcItems.Height + BtnOffsetY;
|
|
|
|
dxPSUtl.PlaceButtons([btnHelp, btnClose], BtnOffsetX, RightOrigin, TopOrigin);
|
|
end;
|
|
|
|
procedure TdxfmCPDesigner.tbsItemsResize(Sender: TObject);
|
|
var
|
|
R: TRect;
|
|
begin
|
|
R := lvItems.ClientRect;
|
|
InflateRect(R, -3, -3);
|
|
with R do
|
|
begin
|
|
Top := (Bottom - Top - pnlNoItems.Height) div 2;
|
|
Bottom := Top + pnlNoItems.Height;
|
|
end;
|
|
pnlNoItems.BoundsRect := R;
|
|
end;
|
|
|
|
procedure TdxfmCPDesigner.lvItemsChange(Sender: TObject; Item: TListItem;
|
|
Change: TItemChange);
|
|
begin
|
|
if (Change = ctState) and not FIsRefreshing then
|
|
UpdateControlsState;
|
|
end;
|
|
|
|
procedure TdxfmCPDesigner.pmItemsPopup(Sender: TObject);
|
|
begin
|
|
miAdd.Enabled := CanAdd;
|
|
miAddComposition.Enabled := CanAddComposition;
|
|
miDelete.Enabled := CanDelete;
|
|
miRename.Enabled := CanRename;
|
|
miDesign.Enabled := CanDesign;
|
|
miPageSetup.Enabled := CanPageSetup;
|
|
miPrint.Enabled := CanPrint;
|
|
miPrintPreview.Enabled := CanPrintPreview;
|
|
end;
|
|
|
|
procedure TdxfmCPDesigner.AddClick(Sender: TObject);
|
|
var
|
|
Data: TdxAddReportLinkDlgData;
|
|
I: Integer;
|
|
Component: TComponent;
|
|
LinkClass: TdxReportLinkClass;
|
|
Link: TBasedxReportLink;
|
|
begin
|
|
FillChar(Data, SizeOf(TdxAddReportLinkDlgData), 0);
|
|
Data.Components := TList.Create;
|
|
try
|
|
Data.ComponentPrinter := FComponentPrinter;
|
|
Data.Options := [adoShowDesignButton, adoShowDescriptionColumn, adoAllowMultiSelect, adoShowCaptionEdit];
|
|
Data.ReportLinkCaption := cxGetResourceString(@sdxNewReport);
|
|
|
|
if dxShowAddComponentsDlg(Data) then
|
|
for I := 0 to Data.Components.Count - 1 do
|
|
begin
|
|
Component := TComponent(Data.Components[I]);
|
|
LinkClass := dxPSLinkClassByCompClass(TComponentClass(Component.ClassType));
|
|
if LinkClass <> nil then
|
|
begin
|
|
Link := ComponentPrinter.AddLink(Component);
|
|
Link.Caption := Data.ReportLinkCaption;
|
|
Link.Description := Data.ReportLinkDescription;
|
|
if Data.Components.Count = 1 then
|
|
Link.Name := Data.ReportLinkName;
|
|
RefreshList;
|
|
CurrentLink := Link;
|
|
if Data.DesignBtnPressed then
|
|
ComponentPrinter.DesignReport(Link);
|
|
end;
|
|
end;
|
|
finally
|
|
Data.Components.Free;
|
|
end;
|
|
end;
|
|
|
|
procedure TdxfmCPDesigner.AddCompositionClick(Sender: TObject);
|
|
var
|
|
Link: TBasedxReportLink;
|
|
begin
|
|
Link := ComponentPrinter.AddEmptyLink(TdxCompositionReportLink);
|
|
Link.Caption := cxGetResourceString(@sdxNewCompositionCaption);
|
|
RefreshList;
|
|
CurrentLink := Link;
|
|
RenameClick(nil);
|
|
end;
|
|
|
|
procedure TdxfmCPDesigner.DeleteClick(Sender: TObject);
|
|
begin
|
|
if not lvItems.IsEditing and
|
|
MessageQuestion(Format(cxGetResourceString(@sdxConfirmDeleteItem), [GetSelectedItemsAsString])) then
|
|
DeleteSelection;
|
|
end;
|
|
|
|
procedure TdxfmCPDesigner.RenameClick(Sender: TObject);
|
|
begin
|
|
if SelectedCount = 1 then
|
|
lvItems.Selected.EditCaption;
|
|
end;
|
|
|
|
procedure TdxfmCPDesigner.DesignClick(Sender: TObject);
|
|
begin
|
|
if CurrentLink.DesignReport then
|
|
RefreshList
|
|
else
|
|
UpdateControlsState;
|
|
end;
|
|
|
|
procedure TdxfmCPDesigner.PageSetupClick(Sender: TObject);
|
|
begin
|
|
CurrentLink.PageSetup;
|
|
end;
|
|
|
|
procedure TdxfmCPDesigner.PrintPreviewClick(Sender: TObject);
|
|
begin
|
|
CurrentLink.Preview(True);
|
|
end;
|
|
|
|
procedure TdxfmCPDesigner.PrintClick(Sender: TObject);
|
|
begin
|
|
CurrentLink.Print(True, nil);
|
|
end;
|
|
|
|
procedure TdxfmCPDesigner.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
|
|
begin
|
|
CanClose := not lvItems.IsEditing;
|
|
end;
|
|
|
|
procedure TdxfmCPDesigner.FormKeyDown(Sender: TObject; var Key: Word;
|
|
Shift: TShiftState);
|
|
begin
|
|
if (Key = VK_ESCAPE) or (Key = VK_RETURN) then Close;
|
|
end;
|
|
|
|
procedure TdxfmCPDesigner.lvItemsEditing(Sender: TObject; Item: TListItem;
|
|
var AllowEdit: Boolean);
|
|
begin
|
|
AllowEdit := not Items[Item.Index].BuiltIn;
|
|
if AllowEdit then
|
|
lvItems.PopupMenu := nil;
|
|
end;
|
|
|
|
procedure TdxfmCPDesigner.lvItemsEdited(Sender: TObject; Item: TListItem;
|
|
var S: string);
|
|
begin
|
|
Items[Item.Index].Caption := S;
|
|
end;
|
|
|
|
procedure TdxfmCPDesigner.lvItemsDblClick(Sender: TObject);
|
|
begin
|
|
if SelectedCount = 1 then btnDesign.Click;
|
|
end;
|
|
|
|
constructor TdxfmCPDesigner.Create(AOwner: TComponent);
|
|
begin
|
|
inherited;
|
|
HelpContext := dxPSGlbl.dxhcAddComponentsToComponentPrinterDlg;
|
|
dxPSPopupMenuController.RegisterControl(lvItems);
|
|
SubClassListView;
|
|
end;
|
|
|
|
destructor TdxfmCPDesigner.Destroy;
|
|
begin
|
|
UnsubClassListView;
|
|
dxPSPopupMenuController.UnregisterControl(lvItems);
|
|
inherited;
|
|
end;
|
|
|
|
procedure TdxfmCPDesigner.Execute;
|
|
begin
|
|
Initialize;
|
|
ShowModal;
|
|
end;
|
|
|
|
procedure TdxfmCPDesigner.LoadFromRegistry(const APath: string);
|
|
begin
|
|
inherited;
|
|
dxPSUtl.dxLoadListViewColumnsFromRegistry(lvItems, APath);
|
|
end;
|
|
|
|
procedure TdxfmCPDesigner.SaveToRegistry(const APath: string);
|
|
begin
|
|
inherited;
|
|
dxPSUtl.dxSaveListViewColumnsToRegistry(lvItems, APath);
|
|
end;
|
|
|
|
procedure TdxfmCPDesigner.BeforeConstruction;
|
|
begin
|
|
inherited;
|
|
Options := Options + [foSizeableDialog];
|
|
end;
|
|
|
|
function TdxfmCPDesigner.CanDesign: Boolean;
|
|
begin
|
|
Result := (SelectedCount = 1) and (CurrentLink <> nil) and CurrentLink.CheckToDesign;
|
|
end;
|
|
|
|
function TdxfmCPDesigner.CanPageSetup: Boolean;
|
|
begin
|
|
Result := (SelectedCount = 1) and (CurrentLink <> nil);
|
|
end;
|
|
|
|
function TdxfmCPDesigner.CanPrint: Boolean;
|
|
begin
|
|
Result := (SelectedCount = 1) and (CurrentLink <> nil) and CurrentLink.DataProviderPresent;
|
|
end;
|
|
|
|
function TdxfmCPDesigner.CanPrintPreview: Boolean;
|
|
begin
|
|
Result := (SelectedCount = 1) and (CurrentLink <> nil) and CurrentLink.DataProviderPresent;
|
|
end;
|
|
|
|
function TdxfmCPDesigner.CanRename: Boolean;
|
|
begin
|
|
Result := (SelectedCount = 1) and (CurrentLink <> nil) and not CurrentLink.BuiltIn;
|
|
end;
|
|
|
|
procedure TdxfmCPDesigner.DeleteSelection;
|
|
var
|
|
I: Integer;
|
|
begin
|
|
for I := 0 to ItemCount - 1 do
|
|
if Selected[I] and not Items[I].BuiltIn then
|
|
TObject(lvItems.Items[I].Data).Free;
|
|
RefreshList;
|
|
end;
|
|
|
|
function TdxfmCPDesigner.GetCurrentLink: TBasedxReportLink;
|
|
begin
|
|
if SelectedCount = 1 then
|
|
Result := TBasedxReportLink(lvItems.Selected.Data)
|
|
else
|
|
Result := nil;
|
|
end;
|
|
|
|
function TdxfmCPDesigner.GetItem(Index: Integer): TBasedxReportLink;
|
|
begin
|
|
Result := TBasedxReportLink(lvItems.Items[Index].Data);
|
|
end;
|
|
|
|
function TdxfmCPDesigner.GetItemCount: Integer;
|
|
begin
|
|
Result := lvItems.Items.Count;
|
|
end;
|
|
|
|
function TdxfmCPDesigner.GetSelected(Index: Integer): Boolean;
|
|
begin
|
|
Result := lvItems.Items[Index].Selected;
|
|
end;
|
|
|
|
function TdxfmCPDesigner.GetSelectedCount: Integer;
|
|
begin
|
|
Result := lvItems.SelCount;
|
|
end;
|
|
|
|
procedure TdxfmCPDesigner.SetCurrentLink(Value: TBasedxReportLink);
|
|
var
|
|
ListItem: TListItem;
|
|
I: Integer;
|
|
begin
|
|
ListItem := lvItems.FindData(0, Value, True, True);
|
|
if ListItem <> nil then
|
|
begin
|
|
lvItems.Items.BeginUpdate;
|
|
try
|
|
for I := 0 To ItemCount - 1 do
|
|
Selected[I] := False;
|
|
lvItems.Selected := ListItem;
|
|
finally
|
|
lvItems.Items.EndUpdate;
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
procedure TdxfmCPDesigner.SetSelected(Index: Integer; Value: Boolean);
|
|
begin
|
|
lvItems.Items[Index].Selected := Value;
|
|
end;
|
|
|
|
function TdxfmCPDesigner.CanAdd: Boolean;
|
|
begin
|
|
Result := True;
|
|
end;
|
|
|
|
function TdxfmCPDesigner.CanAddComposition: Boolean;
|
|
begin
|
|
Result := True;
|
|
end;
|
|
|
|
function TdxfmCPDesigner.CanDelete: Boolean;
|
|
begin
|
|
Result := (SelectedCount <> 0) and not HasOnlyBuiltInsAreInSelection;
|
|
end;
|
|
|
|
procedure TdxfmCPDesigner.LoadStrings;
|
|
begin
|
|
Caption := cxGetResourceString(@sdxEditReports);
|
|
|
|
tbsItems.Caption := cxGetResourceString(@sdxItems);
|
|
pnlNoItems.Caption := cxGetResourceString(@sdxThereAreNowItemsForShow);
|
|
|
|
btnAdd.Caption := AddEndEllipsis(cxGetResourceString(@sdxBtnAdd));
|
|
btnAddComposition.Caption := cxGetResourceString(@sdxBtnAddComposition);
|
|
btnDelete.Caption := cxGetResourceString(@sdxBtnDelete);
|
|
btnDesign.Caption := cxGetResourceString(@sdxBtnDesign);
|
|
btnPageSetup.Caption := cxGetResourceString(@sdxBtnPageSetup);
|
|
btnPrint.Caption := cxGetResourceString(@sdxBtnPrint);
|
|
btnPrintPreview.Caption := cxGetResourceString(@sdxBtnPreview);
|
|
|
|
btnClose.Caption := cxGetResourceString(@sdxBtnClose);
|
|
btnHelp.Caption := cxGetResourceString(@sdxBtnHelp);
|
|
|
|
miAdd.Caption := AddEndEllipsis(cxGetResourceString(@sdxBtnAdd));
|
|
miAddComposition.Caption := cxGetResourceString(@sdxBtnAddComposition);
|
|
miDelete.Caption := cxGetResourceString(@sdxBtnDelete);
|
|
miRename.Caption := cxGetResourceString(@sdxRename);
|
|
miDesign.Caption := cxGetResourceString(@sdxBtnDesign);
|
|
miPageSetup.Caption := cxGetResourceString(@sdxBtnPageSetup);
|
|
miPrint.Caption := cxGetResourceString(@sdxBtnPrint);
|
|
miPrintPreview.Caption := cxGetResourceString(@sdxBtnPreview);
|
|
end;
|
|
|
|
function TdxfmCPDesigner.GetSelectedItemsAsString: string;
|
|
var
|
|
I: Integer;
|
|
begin
|
|
Result := '';
|
|
for I := 0 to ItemCount - 1 do
|
|
if Selected[I] and not Items[I].BuiltIn then
|
|
begin
|
|
if Result <> '' then Result := Result + ', ';
|
|
Result := Result + '"' + lvItems.Items[I].Caption + '"';
|
|
end;
|
|
end;
|
|
|
|
function TdxfmCPDesigner.HasOnlyBuiltInsAreInSelection: Boolean;
|
|
var
|
|
I: Integer;
|
|
begin
|
|
Result := False;
|
|
for I := 0 to ItemCount - 1 do
|
|
if Selected[I] and not Items[I].BuiltIn then
|
|
Exit;
|
|
Result := True;
|
|
end;
|
|
|
|
procedure TdxfmCPDesigner.Initialize;
|
|
begin
|
|
if HelpContext <> 0 then
|
|
BorderIcons := BorderIcons + [biHelp];
|
|
btnHelp.Visible := HelpContext <> 0;
|
|
if not btnHelp.Visible then
|
|
btnClose.BoundsRect := btnHelp.BoundsRect;
|
|
|
|
LoadStrings;
|
|
|
|
RefreshColumns;
|
|
RefreshList;
|
|
|
|
pnlNoItems.Parent := lvItems;
|
|
FormResize(nil);
|
|
tbsItemsResize(nil);
|
|
end;
|
|
|
|
procedure TdxfmCPDesigner.RefreshColumns;
|
|
var
|
|
ColumnWidths: array of Integer;
|
|
I: Integer;
|
|
begin
|
|
lvItems.Columns.BeginUpdate;
|
|
try
|
|
SetLength(ColumnWidths, lvItems.Columns.Count);
|
|
for I := 0 to lvItems.Columns.Count - 1 do
|
|
ColumnWidths[I] := lvItems.Columns[I].Width;
|
|
|
|
lvItems.Columns.Clear;
|
|
with lvItems.Columns.Add do
|
|
begin
|
|
Width := 2 * (lvItems.Width - GetSystemMetrics(SM_CXHSCROLL) - 2) div 3;
|
|
Caption := cxGetResourceString(@sdxItemName);
|
|
end;
|
|
|
|
if doShowDescription in FOptions then
|
|
with lvItems.Columns.Add do
|
|
begin
|
|
Width := (lvItems.Width - GetSystemMetrics(SM_CXHSCROLL) - 2) div 3;
|
|
Caption := cxGetResourceString(@sdxItemDescription);
|
|
end;
|
|
|
|
for I := 0 to MinIntValue([lvItems.Columns.Count - 1, Length(ColumnWidths) - 1]) do
|
|
lvItems.Columns[I].Width := ColumnWidths[I];
|
|
finally
|
|
lvItems.Columns.EndUpdate;
|
|
end;
|
|
end;
|
|
|
|
procedure TdxfmCPDesigner.RefreshList;
|
|
const
|
|
ViewStyles: array[Boolean] of TViewStyle = (vsReport, vsList);
|
|
var
|
|
Selection: TList;
|
|
I: Integer;
|
|
ReportLink: TBasedxReportLink;
|
|
begin
|
|
lvItems.Items.BeginUpdate;
|
|
FIsRefreshing := True;
|
|
try
|
|
Selection := TList.Create;
|
|
try
|
|
dxPSUtl.dxSaveListViewSelection(lvItems, Selection);
|
|
|
|
lvItems.Items.Clear;
|
|
for I := 0 to ComponentPrinter.LinkCount - 1 do
|
|
begin
|
|
ReportLink := ComponentPrinter[I];
|
|
with lvItems.Items.Add do
|
|
begin
|
|
Caption := ReportLink.Caption;
|
|
Data := ReportLink;
|
|
SubItems.Add(ReportLink.Description);
|
|
end;
|
|
end;
|
|
|
|
dxPSUtl.dxRestoreListViewSelection(lvItems, Selection);
|
|
finally
|
|
Selection.Free;
|
|
end;
|
|
|
|
lvItems.ViewStyle := ViewStyles[ItemCount = 0];
|
|
lvItems.Enabled := ItemCount <> 0;
|
|
lvItems.HideSelection := ItemCount = 0;
|
|
if (lvItems.SelCount = 0) and (ItemCount <> 0) then
|
|
lvItems.Selected := lvItems.Items[0];
|
|
finally
|
|
FIsRefreshing := False;
|
|
lvItems.Items.EndUpdate;
|
|
end;
|
|
UpdateControlsState;
|
|
lvItems.Refresh;
|
|
end;
|
|
|
|
procedure TdxfmCPDesigner.UpdateControlsState;
|
|
begin
|
|
pnlNoItems.Visible := ItemCount = 0;
|
|
btnAdd.Enabled := CanAdd;
|
|
btnAddComposition.Enabled := CanAddComposition;
|
|
btnDelete.Enabled := CanDelete;
|
|
btnDesign.Enabled := CanDesign;
|
|
btnPageSetup.Enabled := CanPageSetup;
|
|
btnPrint.Enabled := CanPrint;
|
|
btnPrintPreview.Enabled := CanPrintPreview;
|
|
end;
|
|
|
|
procedure TdxfmCPDesigner.ListViewWndProc(var Message: TMessage);
|
|
begin
|
|
FListViewWndProc(Message);
|
|
if Message.Msg = CN_NOTIFY then
|
|
if TWMNotify(Message).NMHdr^.code = LVN_ENDLABELEDIT then
|
|
lvItems.PopupMenu := pmItems;
|
|
end;
|
|
|
|
procedure TdxfmCPDesigner.SubClassListView;
|
|
begin
|
|
lvItems.HandleNeeded;
|
|
FListViewWndProc := lvItems.WindowProc;
|
|
lvItems.WindowProc := ListViewWndProc;
|
|
end;
|
|
|
|
procedure TdxfmCPDesigner.UnsubClassListView;
|
|
begin
|
|
lvItems.WindowProc := FListViewWndProc;
|
|
end;
|
|
|
|
procedure TdxfmCPDesigner.CMDialogChar(var Msg: TCMDialogChar);
|
|
begin
|
|
inherited;
|
|
if IsAccel(Msg.CharCode, tbsItems.Caption) then
|
|
begin
|
|
Msg.Result := 1;
|
|
if lvItems.Enabled and lvItems.CanFocus then
|
|
ActiveControl := lvItems;
|
|
end;
|
|
end;
|
|
|
|
end.
|