Componentes.Terceros.DevExp.../official/x.19/ExpressPrinting System/Demos/Delphi/InspectorRL/InspectorRLMain.pas
2007-09-09 11:27:22 +00:00

423 lines
14 KiB
ObjectPascal

unit InspectorRLMain;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, ExtCtrls, dxCntner, dxInspct, Grids, DBGrids, Db, DBTables,
dxInspRw, ComCtrls, Buttons, DBCtrls, dxDBInsp, dxDBInRw, Menus,
dxPSCore, dxPSdxInsLnk, dxPSdxDBInsLnk, dxPSGlbl, dxPSUtl, dxPSEngn,
{dxPSPrVwAdv,} // enable for use of ExpressBars in PrintPreview
dxPrnPg, dxBkgnd, dxWrap, dxPrnDev, ImgList, dxExEdtr, dxPSCompsProvider,
dxPSFillPatterns, dxPSEdgePatterns;
type
TInspectorRLMainForm = class(TForm)
Panel1: TPanel;
Splitter1: TSplitter;
Panel2: TPanel;
DBGrid1: TDBGrid;
Panel3: TPanel;
Panel4: TPanel;
ImageList: TImageList;
GroupBox1: TGroupBox;
chbColumnSizing: TCheckBox;
chbEditing: TCheckBox;
chbTabs: TCheckBox;
chbTabThrough: TCheckBox;
chbAutoWidth: TCheckBox;
chbCancelOnExit: TCheckBox;
Label1: TLabel;
edMinColumnWidth: TEdit;
UpDown1: TUpDown;
rgPaintStyle: TRadioGroup;
BColor: TButton;
BFont: TButton;
FontDialog: TFontDialog;
ColorDialog: TColorDialog;
BGridColor: TButton;
chbDragDrop: TCheckBox;
chbCustomDraw: TCheckBox;
Image1: TImage;
dsContacts: TDataSource;
tProducts: TTable;
tProductsID: TIntegerField;
tProductsNAME: TStringField;
tProductsDescription: TStringField;
dxDBInspector: TdxDBInspector;
dxDBInspectorFirstName: TdxInspectorDBMaskRow;
dxDBInspectorLastName: TdxInspectorDBMaskRow;
dxDBInspectorCompany: TdxInspectorDBMaskRow;
dxDBInspectorPrefix: TdxInspectorDBMaskRow;
dxDBInspectorTitle: TdxInspectorDBMaskRow;
dxDBInspectorAddress: TdxInspectorDBMaskRow;
dxDBInspectorCity: TdxInspectorDBMaskRow;
dxDBInspectorZipCode: TdxInspectorDBMaskRow;
dxDBInspectorSource: TdxInspectorDBMaskRow;
dxDBInspectorPurchaseDate: TdxInspectorDBDateRow;
dxDBInspectorHomePhone: TdxInspectorDBMaskRow;
dxDBInspectorFaxPhone: TdxInspectorDBMaskRow;
dxDBInspectorSpouse: TdxInspectorDBMaskRow;
dxDBInspectorOccupation: TdxInspectorDBMaskRow;
dxDBInspectorDescription: TdxInspectorBlobRow;
dxDBInspectorproduct: TdxInspectorLookupRow;
dxDBInspectorCustName: TdxInspectorDBRow;
dxDBInspectorImage: TdxInspectorBlobRow;
DBNavigator1: TDBNavigator;
chbFlat: TCheckBox;
chbEnterThrough: TCheckBox;
dxDBInspectorRow23: TdxInspectorDBButtonRow;
dxDBInspectorCustomer: TdxInspectorDBCheckRow;
dxDBInspectorPaymentType: TdxInspectorDBImageRow;
dxDBInspectorPaymentAmount: TdxInspectorDBCalcRow;
dxDBInspectorState: TdxInspectorDBPickRow;
chbNoCancel: TCheckBox;
chbDrawEndEllipsis: TCheckBox;
tContacts: TTable;
tContactsID: TAutoIncField;
tContactsProductID: TIntegerField;
tContactsFirstName: TStringField;
tContactsLastName: TStringField;
tContactsCompany: TStringField;
tContactsPrefix: TStringField;
tContactsTitle: TStringField;
tContactsAddress: TStringField;
tContactsCity: TStringField;
tContactsState: TStringField;
tContactsZipCode: TStringField;
tContactsSource: TStringField;
tContactsCustomer: TStringField;
tContactsPurchaseDate: TDateField;
tContactsHomePhone: TStringField;
tContactsFaxPhone: TStringField;
tContactsPaymentType: TStringField;
tContactsSpouse: TStringField;
tContactsOccupation: TStringField;
tContactsPaymentAmount: TBCDField;
tContactsDescription: TMemoField;
tContactsproduct: TStringField;
tContactsCustName: TStringField;
chbShowRowHint: TCheckBox;
tContactsPicture: TGraphicField;
tContactsCurrency: TCurrencyField;
tContactsTime: TTimeField;
tContactsHyperLink: TStringField;
dxComponentPrinter1: TdxComponentPrinter;
dxComponentPrinter1Link1: TdxDBInspectorReportLink;
BDesign: TSpeedButton;
BPreview: TSpeedButton;
BPrint: TSpeedButton;
procedure dxDBInspectorRow23EditButtonClick(Sender: TObject);
procedure chbColumnSizingClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure rgPaintStyleClick(Sender: TObject);
procedure edMinColumnWidthKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure UpDown1Changing(Sender: TObject; var AllowChange: Boolean);
procedure BColorClick(Sender: TObject);
procedure BFontClick(Sender: TObject);
procedure BGridColorClick(Sender: TObject);
procedure dxDBInspectorDragOver(Sender, Source: TObject; X, Y: Integer;
State: TDragState; var Accept: Boolean);
procedure dxDBInspectorDragDrop(Sender, Source: TObject; X,
Y: Integer);
procedure chbDragDropClick(Sender: TObject);
procedure Image1DragOver(Sender, Source: TObject; X, Y: Integer;
State: TDragState; var Accept: Boolean);
procedure Image1DragDrop(Sender, Source: TObject; X, Y: Integer);
procedure dxDBInspectorDrawCaption(Sender: TdxInspectorRow;
ACanvas: TCanvas; ARect: TRect; var AText: String; AFont: TFont;
var AColor: TColor; var ADone: Boolean);
procedure chbCustomDrawClick(Sender: TObject);
procedure DBGrid1ColEnter(Sender: TObject);
procedure chbFlatClick(Sender: TObject);
procedure chbShowRowHintClick(Sender: TObject);
procedure tContactsCalcFields(DataSet: TDataSet);
procedure BDesignClick(Sender: TObject);
procedure BPreviewClick(Sender: TObject);
procedure BPrintClick(Sender: TObject);
procedure dxComponentPrinter1Link1CustomDrawCaption(
Sender: TBasedxReportLink; ARow: TdxInspectorRow; ACanvas: TCanvas;
ABoundsRect, AClientRect: TRect; var AText: String;
var AColor: TColor; AFont: TFont; var ATextAlignX: TdxTextAlignX;
var ATextAlignY: TdxTextAlignY; var ADone: Boolean);
private
FlagLoading: Boolean;
procedure CustomDraw(Sender: TdxInspectorRow; var AColor: TColor; AFont: TFont);
public
{ Public declarations }
end;
var
InspectorRLMainForm: TInspectorRLMainForm;
implementation
uses InspectorRLDialog;
{$R *.DFM}
procedure TInspectorRLMainForm.dxDBInspectorRow23EditButtonClick(Sender: TObject);
begin
InspectorRLDialogForm := TInspectorRLDialogForm.Create(nil);
try
InspectorRLDialogForm.ShowModal;
finally
InspectorRLDialogForm.Free;
end;
end;
procedure TInspectorRLMainForm.FormCreate(Sender: TObject);
begin
tProducts.DataBaseName := ExtractFilePath(Application.ExeName) + '..\..\Data\';
tProducts.Open;
tContacts.DataBaseName := tProducts.DataBaseName;
tContacts.Open;
// check boxes
FlagLoading := True;
try
chbColumnSizing.Checked := dioColumnSizing in dxDBInspector.Options;
chbEditing.Checked := dioEditing in dxDBInspector.Options;
chbTabs.Checked := dioTabs in dxDBInspector.Options;
chbTabThrough.Checked := dioTabThrough in dxDBInspector.Options;
chbAutoWidth.Checked := dioAutoWidth in dxDBInspector.Options;
chbCancelOnExit.Checked := dioCancelOnExit in dxDBInspector.Options;
chbEnterThrough.Checked := dioEnterThrough in dxDBInspector.Options;
chbNoCancel.Checked := dioNoCancel in dxDBInspector.Options;
chbDrawEndEllipsis.Checked := dioDrawEndEllipsis in dxDBInspector.Options;
finally
FlagLoading := False;
end;
// other
rgPaintStyle.ItemIndex := Integer(dxDBInspector.PaintStyle);
UpDown1.Position := dxDBInspector.MinColumnWidth;
Image1.ControlStyle := Image1.ControlStyle + [csDisplayDragImage];
chbShowRowHint.Checked := dxDBInspector.ShowRowHint;
end;
procedure TInspectorRLMainForm.chbColumnSizingClick(Sender: TObject);
begin
if FlagLoading then Exit;
// Change Options
if TCheckBox(Sender).Checked then
dxDBInspector.Options := dxDBInspector.Options + [TdxDBInspectorOption(TabOrder - chbColumnSizing.TabOrder)]
else
dxDBInspector.Options := dxDBInspector.Options - [TdxDBInspectorOption(TabOrder - chbColumnSizing.TabOrder)];
end;
procedure TInspectorRLMainForm.rgPaintStyleClick(Sender: TObject);
begin
dxDBInspector.PaintStyle := TdxInspectorPaintStyle(rgPaintStyle.ItemIndex);
end;
procedure TInspectorRLMainForm.edMinColumnWidthKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
var
b: Boolean;
begin
case Key of
VK_RETURN: UpDown1Changing(nil, b);
VK_ESCAPE: edMinColumnWidth.Text := IntToStr(dxDBInspector.MinColumnWidth);
end;
end;
procedure TInspectorRLMainForm.UpDown1Changing(Sender: TObject;
var AllowChange: Boolean);
begin
UpDown1.OnChanging := nil;
dxDBInspector.MinColumnWidth := StrToInt(edMinColumnWidth.Text);
UpDown1.Position := dxDBInspector.MinColumnWidth;
edMinColumnWidth.Text := IntToStr(dxDBInspector.MinColumnWidth);
UpDown1.OnChanging := UpDown1Changing;
end;
procedure TInspectorRLMainForm.BColorClick(Sender: TObject);
begin
if ColorDialog.Execute then
dxDBInspector.Color := ColorDialog.Color;
end;
procedure TInspectorRLMainForm.BFontClick(Sender: TObject);
begin
if FontDialog.Execute then
dxDBInspector.Font.Assign(FontDialog.Font);
end;
procedure TInspectorRLMainForm.BGridColorClick(Sender: TObject);
begin
if ColorDialog.Execute then
dxDBInspector.GridColor := ColorDialog.Color;
end;
procedure TInspectorRLMainForm.dxDBInspectorDragOver(Sender, Source: TObject; X,
Y: Integer; State: TDragState; var Accept: Boolean);
var
hTest : TdxInspectorHitTest;
begin
if Source = dxDBInspector then
begin
Accept:= True;
if dxDBInspector.DragNode = nil then
begin
Accept:= False;
Exit;
end;
hTest := dxDBInspector.GetHitTestInfoAt(X, Y);
case hTest of
ihtIndent, ihtButton, ihtDisplayLabel : dxDBInspector.DragCursor := 1;
ihtLabel, ihtColumnEdge : dxDBInspector.DragCursor := 2;
ihtNowhere : dxDBInspector.DragCursor := 3;
end;
end
else
Accept:= False;
end;
procedure TInspectorRLMainForm.dxDBInspectorDragDrop(Sender, Source: TObject; X,
Y: Integer);
var
AItem, AnItem: TdxInspectorNode;
AttachMode: TdxInspectorNodeAttachMode;
HT: TdxInspectorHitTest;
begin
if Source = dxDBInspector then
with dxDBInspector do
begin
HT := GetHitTestInfoAt(X, Y);
AnItem := GetNodeAt(X, Y);
if HT in [ihtNowhere, ihtColumnEdge, ihtIndent, ihtButton, ihtLabel, ihtDisplayLabel] then
begin
AttachMode := inaAddChild;
if HT in [ihtLabel] then
AttachMode := inaAddChild
else if HT = ihtNowhere then
begin
AnItem := Items[0];
AttachMode := inaAdd;
end
else
if HT in [ihtIndent, ihtButton, ihtDisplayLabel] then AttachMode := inaInsert;
AItem := DragNode;
// move rows in DBInspector
if (AItem <> nil) and (AnItem <> nil) then
begin
AItem.MoveTo(AnItem, AttachMode);
end;
end;
end;
end;
procedure TInspectorRLMainForm.chbDragDropClick(Sender: TObject);
begin
with (SEnder as TCheckBox) do
if Checked then
dxDBInspector.DragMode := dmAutomatic
else dxDBInspector.DragMode := dmManual;
end;
procedure TInspectorRLMainForm.Image1DragOver(Sender, Source: TObject; X, Y: Integer;
State: TDragState; var Accept: Boolean);
begin
Accept := True;
dxDBInspector.DragCursor := 4;
end;
procedure TInspectorRLMainForm.Image1DragDrop(Sender, Source: TObject; X, Y: Integer);
begin
if Source = dxDBInspector then
with dxDBInspector do
begin
if DragNode <> nil then
DragNode.Free;
end;
end;
procedure TInspectorRLMainForm.dxDBInspectorDrawCaption(Sender: TdxInspectorRow;
ACanvas: TCanvas; ARect: TRect; var AText: String; AFont: TFont;
var AColor: TColor; var ADone: Boolean);
begin
CustomDraw(Sender, AColor, AFont);
end;
procedure TInspectorRLMainForm.chbCustomDrawClick(Sender: TObject);
begin
dxDBInspector.Refresh;
end;
procedure TInspectorRLMainForm.DBGrid1ColEnter(Sender: TObject);
begin
dxDBInspector.FocusedField := DBGrid1.SelectedField;
end;
procedure TInspectorRLMainForm.chbFlatClick(Sender: TObject);
begin
dxDBInspector.Flat := not dxDBInspector.Flat;
end;
procedure TInspectorRLMainForm.chbShowRowHintClick(Sender: TObject);
begin
dxDBInspector.ShowRowHint := chbShowRowHint.Checked;
end;
procedure TInspectorRLMainForm.tContactsCalcFields(DataSet: TDataSet);
begin
tcontactsCustName.Value := tcontactsFirstName.Value + ' ' + tcontactsLastName.Value;
end;
procedure TInspectorRLMainForm.BDesignClick(Sender: TObject);
begin
dxComponentPrinter1.DesignReport(nil);
end;
procedure TInspectorRLMainForm.BPreviewClick(Sender: TObject);
begin
dxComponentPrinter1.Preview(True, nil);
end;
procedure TInspectorRLMainForm.BPrintClick(Sender: TObject);
begin
dxComponentPrinter1.Print(True, nil, nil);
end;
procedure TInspectorRLMainForm.dxComponentPrinter1Link1CustomDrawCaption(
Sender: TBasedxReportLink; ARow: TdxInspectorRow; ACanvas: TCanvas;
ABoundsRect, AClientRect: TRect; var AText: String; var AColor: TColor;
AFont: TFont; var ATextAlignX: TdxTextAlignX;
var ATextAlignY: TdxTextAlignY; var ADone: Boolean);
begin
CustomDraw(ARow, AColor, AFont);
end;
procedure TInspectorRLMainForm.CustomDraw(Sender: TdxInspectorRow; var AColor: TColor; AFont: TFont);
begin
if not chbCustomDraw.Checked then Exit;
if Sender.Node.Count > 0 then
begin
AFont.Style := [fsBold];
if Sender.Node.Focused then
AFont.Color := clBlue;
AColor := clAqua;
end
else
if Sender.Node.Parent <> nil then
begin
AFont.Style := [fsItalic];
AColor := clLime;
if Sender.Node.Focused then
AFont.Color := clBlue;
end
else
if Sender.Node.Focused then
if (dxDBInspector.PaintStyle <> ipsSimple) then
AFont.Color := clNavy;
end;
initialization
Screen.Cursors[1] := LoadCursor(HInstance, 'DRAG_INSERT');
Screen.Cursors[2] := LoadCursor(HInstance, 'DRAG_ADDCHILD');
Screen.Cursors[3] := LoadCursor(HInstance, 'DRAG_ADD');
Screen.Cursors[4] := LoadCursor(HInstance, 'DRAG_KILL');
end.