home *** CD-ROM | disk | FTP | other *** search
-
- {******************************************}
- { }
- { FastReport CLX v2.4 - DBX components }
- { Master/detail definition }
- { }
- { Copyright (c) 1998-2001 by Tzyganenko A. }
- { }
- {******************************************}
-
- unit FR_DBXMd;
-
- interface
-
- {$I FR.inc}
-
- uses
- Types, SysUtils, Classes, QGraphics, QControls, QForms, QDialogs,
- DB, DBXpress, SqlExpr, QExtCtrls, QStdCtrls, FR_Const;
-
- type
- TfrDBXFieldsLinkForm = class(TForm)
- DetailL: TListBox;
- MasterL: TListBox;
- Label1: TLabel;
- Label2: TLabel;
- AddB: TButton;
- JoinL: TListBox;
- Label3: TLabel;
- ClearB: TButton;
- Bevel1: TBevel;
- OkB: TButton;
- CancelB: TButton;
- procedure FormShow(Sender: TObject);
- procedure FormHide(Sender: TObject);
- procedure ClearBClick(Sender: TObject);
- procedure DetailLDrawItem(Control: TWinControl; Index: Integer;
- Rect: TRect; State: TOwnerDrawState);
- procedure DetailLClick(Sender: TObject);
- procedure MasterLClick(Sender: TObject);
- procedure AddBClick(Sender: TObject);
- procedure FormCreate(Sender: TObject);
- private
- { Private declarations }
- FMasterFields, FCurFields: String;
- lm, ld: TStringList;
- procedure FillLists;
- procedure Localize;
- public
- { Public declarations }
- MasterDS: TDataset;
- DetailDS: TSQLTable;
- end;
-
- implementation
-
- uses FR_Utils;
-
- {$R *.xfm}
-
-
- procedure TfrDBXFieldsLinkForm.FillLists;
- var
- i: Integer;
- s: String;
- begin
- MasterL.Items.Assign(lm);
- DetailL.Items.Assign(ld);
- JoinL.Items.Clear;
- i := 1;
- while i <= Length(FCurFields) do
- begin
- s := ExtractFieldName(FCurFields, i);
- JoinL.Items.Add(DetailL.Items[0] + ' -> ' + s);
- DetailL.Items.Delete(0);
- MasterL.Items.Delete(MasterL.Items.IndexOf(s));
- end;
- AddB.Enabled := False;
- end;
-
- procedure TfrDBXFieldsLinkForm.FormShow(Sender: TObject);
- var
- i: Integer;
- begin
- Caption := DetailDS.Name + ' -> ' + MasterDS.Name;
- lm := TStringList.Create;
- ld := TStringList.Create;
- FMasterFields := DetailDS.MasterFields;
- FCurFields := FMasterFields;
- MasterDS.GetFieldNames(lm);
- DetailDS.Open;
- for i := 0 to DetailDS.IndexFieldCount - 1 do
- ld.Add(DetailDS.IndexFields[i].FieldName);
- DetailDS.Close;
- FillLists;
- end;
-
- procedure TfrDBXFieldsLinkForm.FormHide(Sender: TObject);
- begin
- if ModalResult = mrOk then
- DetailDS.MasterFields := FCurFields else
- DetailDS.MasterFields := FMasterFields;
- ld.Free;
- lm.Free;
- end;
-
- procedure TfrDBXFieldsLinkForm.ClearBClick(Sender: TObject);
- begin
- FCurFields := '';
- FillLists;
- end;
-
- procedure TfrDBXFieldsLinkForm.DetailLDrawItem(Control: TWinControl;
- Index: Integer; Rect: TRect; State: TOwnerDrawState);
- begin
- with DetailL.Canvas do
- begin
- if Index > 0 then
- Font.Color := clBtnShadow;
- FillRect(Rect);
- TextOut(Rect.Left + 2, Rect.Top, DetailL.Items[Index]);
- end;
- end;
-
- procedure TfrDBXFieldsLinkForm.DetailLClick(Sender: TObject);
- begin
- if DetailL.ItemIndex > 0 then
- DetailL.ItemIndex := 0;
- if MasterL.ItemIndex <> -1 then
- AddB.Enabled := True;
- end;
-
- procedure TfrDBXFieldsLinkForm.MasterLClick(Sender: TObject);
- begin
- if DetailL.ItemIndex <> -1 then
- AddB.Enabled := True;
- end;
-
- procedure TfrDBXFieldsLinkForm.AddBClick(Sender: TObject);
- var s: String;
- begin
- s := MasterL.Items[MasterL.ItemIndex];
- if FCurFields = '' then
- FCurFields := s else
- FCurFields := FCurFields + ';' + s;
- FillLists;
- end;
-
- procedure TfrDBXFieldsLinkForm.Localize;
- begin
- Label1.Caption := S56130;
- Label2.Caption := S56131;
- Label3.Caption := S56132;
- AddB.Caption := S56133;
- ClearB.Caption := S56134;
- OkB.Caption := (SOk);
- CancelB.Caption := (SCancel);
- end;
-
- procedure TfrDBXFieldsLinkForm.FormCreate(Sender: TObject);
- begin
- Localize;
- end;
-
- end.
-
-