home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Chip 2001 October
/
Chip_2001-10_cd1.bin
/
zkuste
/
delphi
/
kolekce
/
d6
/
FRCLX.ZIP
/
SOURCE
/
FR_Flds1.pas
< prev
next >
Wrap
Pascal/Delphi Source File
|
2001-07-06
|
7KB
|
259 lines
{******************************************}
{ }
{ FastReport CLX v2.4 }
{ Insert Fields dialog }
{ }
{ Copyright (c) 1998-2001 by Tzyganenko A. }
{ }
{******************************************}
unit FR_Flds1;
interface
{$I FR.inc}
uses
SysUtils, Types, Classes, QGraphics, QControls, QForms, QDialogs,
QStdCtrls, QExtCtrls, FR_Ctrls;
type
TfrInsFieldsForm = class(TForm)
FieldsLB: TListBox;
DatasetsLB: TListBox;
Panel1: TPanel;
Image1: TImage;
Image2: TImage;
Image3: TImage;
Image4: TImage;
Splitter: TPanel;
procedure FormCreate(Sender: TObject);
procedure FieldsLBDblClick(Sender: TObject);
procedure DatasetsLBClick(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure FormHide(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure FieldsLBStartDrag(Sender: TObject;
var DragObject: TDragObject);
procedure SplitterMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure SplitterMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
procedure SplitterMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure DatasetsLBDrawItem(Sender: TObject; Index: Integer;
ARect: TRect; State: TOwnerDrawState; var Handled: Boolean);
private
{ Private declarations }
FHeightChanged: TNotifyEvent;
FDown: Boolean;
FLastY: Integer;
procedure FillDatasetsLB;
procedure GetFieldName;
procedure Localize;
public
{ Public declarations }
DBField: String;
DefHeight: Integer;
constructor Create(AOwner: TComponent); override;
procedure Grow;
procedure RefreshData;
property OnHeightChanged: TNotifyEvent read FHeightChanged write FHeightChanged;
end;
var
frFieldsDialog: TfrInsFieldsForm;
implementation
{$R *.xfm}
uses FR_Class, FR_Const, FR_Utils, FR_DBRel, FR_Dock;
var
LastDB: String;
constructor TfrInsFieldsForm.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
Parent := AOwner as TWinControl;
end;
procedure TfrInsFieldsForm.FillDatasetsLB;
var
i: Integer;
sl: TStringList;
begin
sl := TStringList.Create;
DatasetsLB.Items.BeginUpdate;
CurReport.Dictionary.GetDatasetList(DatasetsLB.Items);
if CurReport.MixVariablesAndDBFields then
begin
CurReport.Dictionary.GetCategoryList(sl);
for i := 0 to sl.Count - 1 do
DatasetsLB.Items.AddObject(sl[i], TObject(1));
end;
DatasetsLB.Items.EndUpdate;
sl.Free;
end;
procedure TfrInsFieldsForm.DatasetsLBClick(Sender: TObject);
var
i: Integer;
sl: TStringList;
begin
if Integer(DatasetsLB.Items.Objects[DatasetsLB.ItemIndex]) = 1 then
begin
sl := TStringList.Create;
CurReport.Dictionary.GetVariablesList(DatasetsLB.Items[DatasetsLB.ItemIndex], sl);
FieldsLB.Items.Clear;
for i := 0 to sl.Count - 1 do
FieldsLB.Items.AddObject(sl[i], TObject(1));
sl.Free;
end
else
CurReport.Dictionary.GetFieldList(DatasetsLB.Items[DatasetsLB.ItemIndex],
FieldsLB.Items)
end;
procedure TfrInsFieldsForm.GetFieldName;
begin
if DatasetsLB.Items.Count > 0 then
LastDB := DatasetsLB.Items[DatasetsLB.ItemIndex];
if (FieldsLB.ItemIndex <> -1) and (FieldsLB.Items.Count <> 0) then
if Integer(FieldsLB.Items.Objects[FieldsLB.ItemIndex]) = 1 then
DBField := FieldsLB.Items[FieldsLB.ItemIndex] else
DBField := LastDB + '."' + FieldsLB.Items[FieldsLB.ItemIndex] + '"';
end;
procedure TfrInsFieldsForm.RefreshData;
begin
if DatasetsLB.Items.Count > 0 then
LastDB := DatasetsLB.Items[DatasetsLB.ItemIndex];
FormShow(nil);
end;
procedure TfrInsFieldsForm.Localize;
begin
Caption := S53450;
end;
procedure TfrInsFieldsForm.FormCreate(Sender: TObject);
begin
Parent := Owner as TWinControl;
Localize;
RestoreFormPosition(frIni, Self);
DatasetsLB.Height := frIni.ReadInteger(rsForm + ClassName, 'SplitterPos', 120);
DefHeight := Height;
if DefHeight < 30 then
DefHeight := 300;
if ClientHeight < 20 then
DatasetsLB.Hide;
end;
procedure TfrInsFieldsForm.FormShow(Sender: TObject);
begin
FillDatasetsLB;
with DatasetsLB do
if Items.Count > 0 then
begin
if Items.IndexOf(LastDB) <> -1 then
ItemIndex := Items.IndexOf(LastDB) else
ItemIndex := 0;
DatasetsLBClick(nil);
end
else
FieldsLB.Items.Clear;
end;
procedure TfrInsFieldsForm.FormHide(Sender: TObject);
begin
frFieldsDialog := nil;
SaveFormPosition(frIni, Self);
frIni.WriteInteger(rsForm + ClassName, 'SplitterPos', DatasetsLB.Height);
GetFieldName;
if frDesigner.Visible then
frDesigner.SetFocus;
end;
procedure TfrInsFieldsForm.FieldsLBDblClick(Sender: TObject);
begin
ModalResult := mrOk;
end;
procedure TfrInsFieldsForm.DatasetsLBDrawItem(Sender: TObject;
Index: Integer; ARect: TRect; State: TOwnerDrawState;
var Handled: Boolean);
var
Image: TImage;
r: TRect;
begin
r := ARect;
r.Right := r.Left + 18;
r.Bottom := r.Top + 16;
OffsetRect(r, 2, 0);
with TListBox(Sender) do
begin
Canvas.FillRect(ARect);
if Sender = DatasetsLB then
if Integer(Items.Objects[Index]) = 1 then
Image := Image3 else
Image := Image1
else if Integer(Items.Objects[Index]) = 1 then
Image := Image4 else
Image := Image2;
frDrawTransparent(Canvas, r.Left, r.Top, Image.Picture.Bitmap);
Canvas.TextOut(ARect.Left + 20, ARect.Top + 1, Items[Index]);
end;
end;
procedure TfrInsFieldsForm.FormClose(Sender: TObject; var Action: TCloseAction);
begin
FormHide(nil);
Action := caFree;
end;
procedure TfrInsFieldsForm.FieldsLBStartDrag(Sender: TObject;
var DragObject: TDragObject);
begin
GetFieldName;
end;
procedure TfrInsFieldsForm.Grow;
begin
Height := DefHeight;
DatasetsLB.Show;
if Assigned(FHeightChanged) then
FHeightChanged(Self);
end;
procedure TfrInsFieldsForm.SplitterMouseDown(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
FDown := True;
FLastY := Y;
end;
procedure TfrInsFieldsForm.SplitterMouseMove(Sender: TObject;
Shift: TShiftState; X, Y: Integer);
begin
if FDown then
begin
DatasetsLB.Height := DatasetsLB.Height + (Y - FLastY);
Splitter.Top := Splitter.Top + Y - FLastY;
end;
end;
procedure TfrInsFieldsForm.SplitterMouseUp(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
FDown := False;
end;
end.