mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-05-03 23:23:46 +02:00
182 lines
4.0 KiB
ObjectPascal
182 lines
4.0 KiB
ObjectPascal
|
|
{*****************************************}
|
|
{ }
|
|
{ FastReport v2.3 }
|
|
{ Select Band datasource dialog }
|
|
{ }
|
|
{ Copyright (c) 1998-99 by Tzyganenko A. }
|
|
{ }
|
|
{*****************************************}
|
|
|
|
unit LR_VBnd;
|
|
|
|
interface
|
|
|
|
{$I LR_Vers.inc}
|
|
|
|
uses
|
|
Classes, SysUtils, LResources,
|
|
Forms, Controls, Graphics, Dialogs,
|
|
Buttons, StdCtrls, ButtonPanel, Spin,Variants,
|
|
|
|
LR_Class, LR_Intrp;
|
|
|
|
type
|
|
|
|
{ TfrVBandEditorForm }
|
|
|
|
TfrVBandEditorForm = class(TForm)
|
|
ButtonPanel1: TButtonPanel;
|
|
edtRecCount: TSpinEdit;
|
|
GroupBox1: TGroupBox;
|
|
GroupBox2: TGroupBox;
|
|
Label1: TLabel;
|
|
CB1: TComboBox;
|
|
LB1: TListBox;
|
|
procedure FormCreate(Sender: TObject);
|
|
procedure CB1Click(Sender: TObject);
|
|
procedure LB1Click(Sender: TObject);
|
|
procedure CB1Exit(Sender: TObject);
|
|
private
|
|
{ Private declarations }
|
|
Band: TfrBandView;
|
|
List: TfrVariables;
|
|
procedure FillCombo;
|
|
public
|
|
{ Public declarations }
|
|
procedure ShowEditor(t: TfrView);
|
|
end;
|
|
|
|
var
|
|
frVBandEditorForm: TfrVBandEditorForm;
|
|
|
|
implementation
|
|
|
|
{$R *.lfm}
|
|
|
|
uses LR_DSet, LR_Const, LR_Utils;
|
|
|
|
procedure TfrVBandEditorForm.ShowEditor(t: TfrView);
|
|
var
|
|
i, j, n: Integer;
|
|
s: String;
|
|
t1: TfrView;
|
|
b: Boolean;
|
|
begin
|
|
Band := t as TfrBandView;
|
|
List := TfrVariables.Create;
|
|
try
|
|
s := Band.Dataset;
|
|
b := False;
|
|
if Pos(';', s) = 0 then
|
|
b := True;
|
|
with frDesigner.Page do
|
|
begin
|
|
for i := 0 to Objects.Count - 1 do
|
|
begin
|
|
t1 := TfrView(Objects[i]);
|
|
if (t1.Typ = gtBand) and not (TfrBandView(t1).BandType in
|
|
[btReportTitle..btPageFooter, btOverlay, btCrossHeader..btCrossFooter]) then
|
|
begin
|
|
LB1.Items.Add(t1.Name + ': ' + frBandNames[TfrBandView(t1).BandType]);
|
|
n := Pos(AnsiUpperCase(t1.Name) + '=', AnsiUpperCase(s));
|
|
if n <> 0 then
|
|
begin
|
|
n := n + Length(t1.Name) + 1;
|
|
j := n;
|
|
while s[j] <> ';' do
|
|
Inc(j);
|
|
List[t1.Name] := Copy(s, n, j - n);
|
|
end
|
|
else
|
|
if b then
|
|
List[t1.Name] := s
|
|
else
|
|
List[t1.Name] := '0';
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
if LB1.Items.Count = 0 then
|
|
Exit;
|
|
|
|
FillCombo;
|
|
LB1.ItemIndex := 0;
|
|
LB1Click(nil);
|
|
|
|
if ShowModal = mrOk then
|
|
begin
|
|
CB1Exit(nil);
|
|
frDesigner.BeforeChange;
|
|
s := '';
|
|
for i := 0 to List.Count - 1 do
|
|
begin
|
|
s := s + List.Name[i] + '=' + VarToStr(List.Value[i]) + ';';
|
|
end;
|
|
Band.DataSet := s;
|
|
end;
|
|
finally
|
|
List.Free;
|
|
end;
|
|
end;
|
|
|
|
procedure TfrVBandEditorForm.FillCombo;
|
|
begin
|
|
frGetComponents(CurReport.Owner, TfrDataset, CB1.Items, nil);
|
|
TStringList(CB1.Items).Sorted := False;
|
|
TStringList(CB1.Items).Sort;
|
|
CB1.Items.Insert(0, sVirtualDataset);
|
|
CB1.Items.Insert(0, sNotAssigned);
|
|
end;
|
|
|
|
procedure TfrVBandEditorForm.FormCreate(Sender: TObject);
|
|
begin
|
|
Caption := sVBandEditorFormCapt;
|
|
GroupBox1.Caption := sVBandEditorFormBnd;
|
|
GroupBox2.Caption := sVBandEditorFormDataSource;
|
|
Label1.Caption := sVBandEditorFormRecordCount;
|
|
end;
|
|
|
|
procedure TfrVBandEditorForm.CB1Click(Sender: TObject);
|
|
begin
|
|
frEnableControls([Label1, edtRecCount], CB1.ItemIndex = 1);
|
|
end;
|
|
|
|
procedure TfrVBandEditorForm.LB1Click(Sender: TObject);
|
|
var
|
|
i: Integer;
|
|
s: String;
|
|
begin
|
|
s := LB1.Items[LB1.ItemIndex];
|
|
s := Copy(s, 1, Pos(':', s) - 1);
|
|
s := List[s];
|
|
if (s <> '') and (s[1] in ['1'..'9']) then
|
|
begin
|
|
i := 1;
|
|
edtRecCount.Text := s;
|
|
end
|
|
else
|
|
begin
|
|
i := CB1.Items.IndexOf(s);
|
|
if i = -1 then
|
|
i := CB1.Items.IndexOf(sNotAssigned);
|
|
end;
|
|
CB1.ItemIndex := i;
|
|
CB1Click(nil);
|
|
end;
|
|
|
|
procedure TfrVBandEditorForm.CB1Exit(Sender: TObject);
|
|
var
|
|
s: String;
|
|
begin
|
|
s := LB1.Items[LB1.ItemIndex];
|
|
s := Copy(s, 1, Pos(':', s) - 1);
|
|
if CB1.ItemIndex = 1 then
|
|
List[s] := edtRecCount.Text
|
|
else
|
|
List[s] := CB1.Items[CB1.ItemIndex];
|
|
end;
|
|
|
|
end.
|
|
|