Componentes.Terceros.FastRe.../internal/4.2/1/Source/frxEditReportData.pas
2007-11-18 19:40:07 +00:00

214 lines
5.1 KiB
ObjectPascal

{******************************************}
{ }
{ FastReport v4.0 }
{ Report datasets selector }
{ }
{ Copyright (c) 1998-2007 }
{ by Alexander Tzyganenko, }
{ Fast Reports Inc. }
{ }
{******************************************}
unit frxEditReportData;
interface
{$I frx.inc}
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, frxClass, CheckLst
{$IFDEF Delphi6}
, Variants
{$ENDIF};
type
TfrxReportDataForm = class(TForm)
OKB: TButton;
CancelB: TButton;
DatasetsLB: TCheckListBox;
procedure FormShow(Sender: TObject);
procedure FormHide(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure DatasetsLBClickCheck(Sender: TObject);
procedure FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
private
FStandalone: Boolean;
procedure BuildConnectionList;
procedure BuildDatasetList;
public
Report: TfrxReport;
end;
implementation
{$R *.DFM}
uses frxDesgn, frxUtils, frxRes, IniFiles, Registry;
var
PrevWidth: Integer = 0;
PrevHeight: Integer = 0;
procedure TfrxReportDataForm.FormCreate(Sender: TObject);
begin
FStandalone := (frxDesignerComp <> nil) and frxDesignerComp.Standalone;
if FStandalone then
Caption := frxGet(5800)
else
Caption := frxGet(2800);
OKB.Caption := frxGet(1);
CancelB.Caption := frxGet(2);
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.Left := ClientWidth - OkB.Width - CancelB.Width - 8;
CancelB.Left := ClientWidth - CancelB.Width - 4;
OkB.Top := ClientHeight - OkB.Height - 4;
CancelB.Top := OkB.Top;
if FStandalone then
BuildConnectionList
else
BuildDatasetList;
end;
procedure TfrxReportDataForm.FormHide(Sender: TObject);
var
i: Integer;
begin
PrevWidth := Width;
PrevHeight := Height;
if ModalResult <> mrOk then Exit;
if FStandalone then
Report.ReportOptions.ConnectionName := ''
else
Report.Datasets.Clear;
for i := 0 to DatasetsLB.Items.Count - 1 do
if DatasetsLB.Checked[i] then
if FStandalone then
Report.ReportOptions.ConnectionName := DatasetsLB.Items[i]
else
Report.DataSets.Add(TfrxDataSet(DatasetsLB.Items.Objects[i]));
end;
procedure TfrxReportDataForm.BuildConnectionList;
var
i: Integer;
ini: TRegistry;
sl: TStringList;
s2: TStringList;
begin
ini := TRegistry.Create;
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
frxGetDataSetList(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.Checked[DataSetsLB.Items.Count - 1] := 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.Checked[i] := False;
end;
procedure TfrxReportDataForm.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if Key = VK_F1 then
frxResources.Help(Self);
end;
end.
//862fd5d6aa1a637203d9b08a3c0bcfb0