174 lines
3.8 KiB
ObjectPascal
174 lines
3.8 KiB
ObjectPascal
|
|
{******************************************}
|
|
{ }
|
|
{ FastReport VCL }
|
|
{ Master-Detail editor }
|
|
{ }
|
|
{ Copyright (c) 1998-2021 }
|
|
{ by Fast Reports Inc. }
|
|
{ }
|
|
{******************************************}
|
|
|
|
unit frxEditMD;
|
|
|
|
interface
|
|
|
|
{$I frx.inc}
|
|
|
|
uses
|
|
{$IFNDEF FPC}
|
|
Windows, Messages,
|
|
{$ENDIF}
|
|
SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
|
|
frxClass, StdCtrls, ExtCtrls, frxCustomDB, frxBaseForm
|
|
{$IFDEF FPC}
|
|
,LResources, LCLType
|
|
{$ENDIF}
|
|
{$IFDEF Delphi6}
|
|
, Variants
|
|
{$ENDIF};
|
|
|
|
|
|
type
|
|
TfrxMDEditorForm = class(TfrxBaseForm)
|
|
DetailLB: TListBox;
|
|
MasterLB: TListBox;
|
|
Label1: TLabel;
|
|
Label2: TLabel;
|
|
AddB: TButton;
|
|
LinksLB: TListBox;
|
|
Label3: TLabel;
|
|
ClearB: TButton;
|
|
OkB: TButton;
|
|
CancelB: TButton;
|
|
Bevel1: TBevel;
|
|
procedure FormShow(Sender: TObject);
|
|
procedure FormHide(Sender: TObject);
|
|
procedure ClearBClick(Sender: TObject);
|
|
procedure DetailLBClick(Sender: TObject);
|
|
procedure MasterLBClick(Sender: TObject);
|
|
procedure AddBClick(Sender: TObject);
|
|
procedure FormCreate(Sender: TObject);
|
|
procedure FormKeyDown(Sender: TObject; var Key: Word;
|
|
Shift: TShiftState);
|
|
private
|
|
FDetailDS: TfrxCustomDataset;
|
|
FMasterDS: TfrxCustomDBDataset;
|
|
FMasterFields: String;
|
|
procedure FillLists;
|
|
public
|
|
procedure UpdateResouces; override;
|
|
property DataSet: TfrxCustomDataset read FDetailDS write FDetailDS;
|
|
end;
|
|
|
|
|
|
implementation
|
|
|
|
{$IFNDEF FPC}
|
|
{$R *.DFM}
|
|
{$ELSE}
|
|
{$R *.lfm}
|
|
{$ENDIF}
|
|
|
|
uses frxUtils, frxRes;
|
|
|
|
|
|
procedure TfrxMDEditorForm.FillLists;
|
|
var
|
|
i: Integer;
|
|
s: String;
|
|
sl: TStrings;
|
|
begin
|
|
FDetailDS.GetFieldList(DetailLB.Items);
|
|
FMasterDS.GetFieldList(MasterLB.Items);
|
|
LinksLB.Items.Clear;
|
|
|
|
sl := TStringList.Create;
|
|
frxSetCommaText(FMasterFields, sl);
|
|
|
|
for i := 0 to sl.Count - 1 do
|
|
begin
|
|
s := sl.Names[i];
|
|
if DetailLB.Items.IndexOf(s) <> -1 then
|
|
DetailLB.Items.Delete(DetailLB.Items.IndexOf(s));
|
|
s := sl.Values[sl.Names[i]];
|
|
if MasterLB.Items.IndexOf(s) <> -1 then
|
|
MasterLB.Items.Delete(MasterLB.Items.IndexOf(s));
|
|
LinksLB.Items.Add(sl[i]);
|
|
end;
|
|
|
|
AddB.Enabled := False;
|
|
sl.Free;
|
|
end;
|
|
|
|
procedure TfrxMDEditorForm.FormShow(Sender: TObject);
|
|
begin
|
|
FMasterDS := FDetailDS.Master;
|
|
FMasterFields := FDetailDS.MasterFields;
|
|
FillLists;
|
|
end;
|
|
|
|
procedure TfrxMDEditorForm.FormHide(Sender: TObject);
|
|
begin
|
|
if ModalResult = mrOk then
|
|
FDetailDS.MasterFields := FMasterFields;
|
|
end;
|
|
|
|
procedure TfrxMDEditorForm.ClearBClick(Sender: TObject);
|
|
begin
|
|
FMasterFields := '';
|
|
FillLists;
|
|
end;
|
|
|
|
procedure TfrxMDEditorForm.DetailLBClick(Sender: TObject);
|
|
begin
|
|
if MasterLB.ItemIndex <> -1 then
|
|
AddB.Enabled := True;
|
|
end;
|
|
|
|
procedure TfrxMDEditorForm.MasterLBClick(Sender: TObject);
|
|
begin
|
|
if DetailLB.ItemIndex <> -1 then
|
|
AddB.Enabled := True;
|
|
end;
|
|
|
|
procedure TfrxMDEditorForm.UpdateResouces;
|
|
begin
|
|
inherited;
|
|
Caption := frxGet(3800);
|
|
Label1.Caption := frxGet(3801);
|
|
Label2.Caption := frxGet(3802);
|
|
Label3.Caption := frxGet(3803);
|
|
AddB.Caption := frxGet(3804);
|
|
ClearB.Caption := frxGet(3805);
|
|
OkB.Caption := frxGet(1);
|
|
CancelB.Caption := frxGet(2);
|
|
end;
|
|
|
|
procedure TfrxMDEditorForm.AddBClick(Sender: TObject);
|
|
var
|
|
s: String;
|
|
begin
|
|
s := DetailLB.Items[DetailLB.ItemIndex] + '=' + MasterLB.Items[MasterLB.ItemIndex];
|
|
if FMasterFields = '' then
|
|
FMasterFields := s else
|
|
FMasterFields := FMasterFields + ';' + s;
|
|
FillLists;
|
|
end;
|
|
|
|
procedure TfrxMDEditorForm.FormCreate(Sender: TObject);
|
|
begin
|
|
if UseRightToLeftAlignment then
|
|
FlipChildren(True);
|
|
end;
|
|
|
|
procedure TfrxMDEditorForm.FormKeyDown(Sender: TObject; var Key: Word;
|
|
Shift: TShiftState);
|
|
begin
|
|
if Key = VK_F1 then
|
|
frxResources.Help(Self);
|
|
end;
|
|
|
|
end.
|
|
|