FastReport_FMX_2.8.12/Source/FMX.frxEditMD.pas
2024-07-06 22:41:12 +02:00

166 lines
3.9 KiB
ObjectPascal

{******************************************}
{ }
{ FastReport FMX v1.0 }
{ Master-Detail editor }
{ }
{ Copyright (c) 1998-2013 }
{ by Alexander Tzyganenko, }
{ Fast Reports Inc. }
{ }
{******************************************}
unit FMX.frxEditMD;
interface
{$I frx.inc}
uses
System.SysUtils, System.Classes, System.UITypes, FMX.Types, FMX.Controls, FMX.Forms, FMX.Dialogs,
FMX.frxClass, FMX.frxCustomDB, FMX.Layouts, FMX.ListBox, System.Variants
{$IFDEF DELPHI18}
,FMX.StdCtrls
{$ENDIF};
type
TfrxMDEditorForm = class(TForm)
DetailLB: TListBox;
MasterLB: TListBox;
Label1: TLabel;
Label2: TLabel;
AddB: TButton;
LinksLB: TListBox;
Label3: TLabel;
ClearB: TButton;
OkB: TButton;
CancelB: TButton;
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; var KeyChar: WideChar; Shift: TShiftState);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
private
FDetailDS: TfrxCustomDataset;
FMasterDS: TfrxCustomDBDataset;
FMasterFields: String;
procedure FillLists;
public
property DataSet: TfrxCustomDataset read FDetailDS write FDetailDS;
end;
implementation
{$R *.FMX}
uses FMX.frxUtils, FMX.frxRes, FMX.frxFMX;
procedure TfrxMDEditorForm.FillLists;
var
i: Integer;
s: String;
sl: TStrings;
begin
FDetailDS.GetFieldList(DetailLB.Items);
FMasterDS.GetFieldList(MasterLB.Items);
{$IFDEF DELPHI23}
LinksLB.Clear;
{$ELSE}
LinksLB.Items.Clear;
{$ENDIF}
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.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.FormClose(Sender: TObject; var Action: TCloseAction);
begin
FormHide(Self);
end;
procedure TfrxMDEditorForm.FormCreate(Sender: TObject);
begin
Caption := frxGet(3800);
Label1.Text := frxGet(3801);
Label2.Text := frxGet(3802);
Label3.Text := frxGet(3803);
AddB.Text := frxGet(3804);
ClearB.Text := frxGet(3805);
OkB.Text := frxGet(1);
CancelB.Text := frxGet(2);
end;
procedure TfrxMDEditorForm.FormKeyDown(Sender: TObject; var Key: Word; var KeyChar: WideChar; Shift: TShiftState);
begin
if Key = VK_F1 then
frxResources.Help(Self);
end;
end.