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

217 lines
5.2 KiB
ObjectPascal

{******************************************}
{ }
{ FastReport v4.0 }
{ Report datasets selector }
{ }
{ Copyright (c) 1998-2008 }
{ by Alexander Tzyganenko, }
{ Fast Reports Inc. }
{ }
{******************************************}
unit FMX.frxEditReportData;
interface
{$I frx.inc}
uses
System.SysUtils, System.Classes, System.UITypes, FMX.Controls, FMX.Forms, FMX.Dialogs,
FMX.frxClass, FMX.Layouts, FMX.ListBox, FMX.Types, System.Variants
{$IFDEF LINUX}
,FMX.frxBaseModalForm
{$ENDIF}
{$IFDEF DELPHI18}
,FMX.StdCtrls
{$ENDIF};
type
{$IFDEF LINUX}
TfrxReportDataForm = class(TfrxForm)
{$ELSE}
TfrxReportDataForm = class(TForm)
{$ENDIF}
OKB: TButton;
CancelB: TButton;
DatasetsLB: TListBox;
procedure FormShow(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure DatasetsLBClickCheck(Sender: TObject);
procedure FormKeyDown(Sender: TObject; var Key: Word; var KeyChar: WideChar; Shift: TShiftState);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
private
FStandalone: Boolean;
//procedure BuildConnectionList;
procedure BuildDatasetList;
public
Report: TfrxReport;
end;
implementation
{$R *.FMX}
uses FMX.frxDesgn, FMX.frxUtils, FMX.frxRes, System.IniFiles;
var
PrevWidth: Integer = 0;
PrevHeight: Integer = 0;
procedure TfrxReportDataForm.FormClose(Sender: TObject;
var Action: TCloseAction);
var
i: Integer;
begin
PrevWidth := Width;
PrevHeight := Height;
if ModalResult <> mrOk then Exit;
Report.Datasets.Clear;
for i := 0 to DatasetsLB.Items.Count - 1 do
if DatasetsLB.ListItems[i].IsChecked then
Report.DataSets.Add(TfrxDataSet(DatasetsLB.Items.Objects[i]));
end;
procedure TfrxReportDataForm.FormCreate(Sender: TObject);
begin
FStandalone := (frxDesignerComp <> nil) and frxDesignerComp.Standalone;
if FStandalone then
Caption := frxGet(5800)
else
Caption := frxGet(2800);
OKB.Text := frxGet(1);
CancelB.Text := frxGet(2);
{$IFDEF LINUX}
BorderStyleSizeable(Self);
{$ENDIF}
//if UseRightToLeftAlignment then
// FlipChildren(True);
end;
procedure TfrxReportDataForm.FormShow(Sender: TObject);
begin
if PrevWidth <> 0 then
begin
Width := PrevWidth;
Height := PrevHeight;
end;
DatasetsLB.SetBounds(4, 4, ClientWidth - 8, ClientHeight - OkB.Height - 12);
OkB.Position.X := ClientWidth - OkB.Width - CancelB.Width - 8;
CancelB.Position.X := ClientWidth - CancelB.Width - 4;
OkB.Position.Y := ClientHeight - OkB.Height - 4;
CancelB.Position.Y := OkB.Position.Y;
// if FStandalone then
// BuildConnectionList
// else
BuildDatasetList;
end;
// todo win only ?
//procedure TfrxReportDataForm.BuildConnectionList;
//var
// i: Integer;
// sl: TStringList;
// s2: TStringList;
//begin
//
// try
// sl := TStringList.Create;
// s2 := TStringList.Create;
// try
// ini.RootKey := HKEY_LOCAL_MACHINE;
// if ini.OpenKeyReadOnly(DEF_REG_CONNECTIONS) then
// begin
// ini.GetValueNames(sl);
// ini.CloseKey;
// end;
//
// ini.RootKey := HKEY_CURRENT_USER;
// if ini.OpenKeyReadOnly(DEF_REG_CONNECTIONS) then
// begin
// ini.GetValueNames(s2);
// ini.CloseKey;
// end;
//
// sl.AddStrings(s2);
//
// for i := 0 to sl.Count - 1 do
// begin
// DataSetsLB.Items.Add(sl[i]);
// DataSetsLB.Checked[i] := CompareText(sl[i], Report.ReportOptions.ConnectionName) = 0;
// end;
// finally
// sl.Free;
// s2.Free;
// end;
// finally
// ini.Free;
// end;
//end;
procedure TfrxReportDataForm.BuildDatasetList;
var
i: Integer;
ds: TfrxDataSet;
dsList: TStringList;
begin
dsList := TStringList.Create;
if Report.EnabledDataSets.Count > 0 then
begin
for i := 0 to Report.EnabledDataSets.Count - 1 do
begin
ds := Report.EnabledDataSets[i].DataSet;
if ds <> nil then
dsList.AddObject(ds.UserName, ds);
end;
end
else
Report.GetActiveDataSetList(dsList);
dsList.Sort;
for i := 0 to dsList.Count - 1 do
begin
ds := TfrxDataSet(dsList.Objects[i]);
if (csDesigning in Report.ComponentState) and
((ds.Owner is TForm) or (ds.Owner is TDataModule)) then
DataSetsLB.Items.AddObject(ds.UserName + ' (' + ds.Owner.Name + '.' + ds.Name + ')', ds)
else
begin
if not (ds.Owner is TfrxReport) or (ds.Owner = Report) then
DataSetsLB.Items.AddObject(ds.UserName, ds);
end;
if Report.Datasets.Find(ds) <> nil then
DataSetsLB.ListItems[DataSetsLB.Items.Count - 1].IsChecked := True;
end;
dsList.Free;
end;
procedure TfrxReportDataForm.DatasetsLBClickCheck(Sender: TObject);
var
i: Integer;
begin
if FStandalone then
for i := 0 to DatasetsLB.Items.Count - 1 do
if i <> DatasetsLB.ItemIndex then
DatasetsLB.ListItems[i].IsChecked := False;
end;
procedure TfrxReportDataForm.FormKeyDown(Sender: TObject; var Key: Word; var KeyChar: WideChar; Shift: TShiftState);
begin
if Key = VKF1 then
frxResources.Help(Self);
end;
end.