1 2 {*****************************************} 3 { } 4 { FastReport v2.3 } 5 { Select Band datasource dialog } 6 { } 7 { Copyright (c) 1998-99 by Tzyganenko A. } 8 { } 9 {*****************************************} 10 11 unit LR_VBnd; 12 13 interface 14 15 {$I LR_Vers.inc} 16 17 uses 18 Classes, SysUtils, LResources, 19 Forms, Controls, Graphics, Dialogs, 20 Buttons, StdCtrls, ButtonPanel, Spin,Variants, 21 22 LR_Class, LR_Intrp; 23 24 type 25 26 { TfrVBandEditorForm } 27 28 TfrVBandEditorForm = class(TForm) 29 ButtonPanel1: TButtonPanel; 30 edtRecCount: TSpinEdit; 31 GroupBox1: TGroupBox; 32 GroupBox2: TGroupBox; 33 Label1: TLabel; 34 CB1: TComboBox; 35 LB1: TListBox; 36 procedure FormCreate(Sender: TObject); 37 procedure CB1Click(Sender: TObject); 38 procedure LB1Click(Sender: TObject); 39 procedure CB1Exit(Sender: TObject); 40 private 41 { Private declarations } 42 Band: TfrBandView; 43 List: TfrVariables; 44 procedure FillCombo; 45 public 46 { Public declarations } 47 procedure ShowEditor(t: TfrView); 48 end; 49 50 var 51 frVBandEditorForm: TfrVBandEditorForm; 52 53 implementation 54 55 {$R *.lfm} 56 57 uses LR_DSet, LR_Const, LR_Utils; 58 59 procedure TfrVBandEditorForm.ShowEditor(t: TfrView); 60 var 61 i, j, n: Integer; 62 s: String; 63 t1: TfrView; 64 b: Boolean; 65 begin 66 Band := t as TfrBandView; 67 List := TfrVariables.Create; 68 try 69 s := Band.Dataset; 70 b := False; 71 if Pos(';', s) = 0 then 72 b := True; 73 with frDesigner.Page do 74 begin 75 for i := 0 to Objects.Count - 1 do 76 begin 77 t1 := TfrView(Objects[i]); 78 if (t1.Typ = gtBand) and not (TfrBandView(t1).BandType in 79 [btReportTitle..btPageFooter, btOverlay, btCrossHeader..btCrossFooter]) then 80 begin 81 LB1.Items.Add(t1.Name + ': ' + frBandNames[TfrBandView(t1).BandType]); 82 n := Pos(AnsiUpperCase(t1.Name) + '=', AnsiUpperCase(s)); 83 if n <> 0 then 84 begin 85 n := n + Length(t1.Name) + 1; 86 j := n; 87 while s[j] <> ';' do 88 Inc(j); 89 List[t1.Name] := Copy(s, n, j - n); 90 end 91 else 92 if b then 93 List[t1.Name] := s 94 else 95 List[t1.Name] := '0'; 96 end; 97 end; 98 end; 99 100 if LB1.Items.Count = 0 then 101 Exit; 102 103 FillCombo; 104 LB1.ItemIndex := 0; 105 LB1Click(nil); 106 107 if ShowModal = mrOk then 108 begin 109 CB1Exit(nil); 110 frDesigner.BeforeChange; 111 s := ''; 112 for i := 0 to List.Count - 1 do 113 begin 114 s := s + List.Name[i] + '=' + VarToStr(List.Value[i]) + ';'; 115 end; 116 Band.DataSet := s; 117 end; 118 finally 119 List.Free; 120 end; 121 end; 122 123 procedure TfrVBandEditorForm.FillCombo; 124 begin 125 frGetComponents(CurReport.Owner, TfrDataset, CB1.Items, nil); 126 TStringList(CB1.Items).Sorted := False; 127 TStringList(CB1.Items).Sort; 128 CB1.Items.Insert(0, sVirtualDataset); 129 CB1.Items.Insert(0, sNotAssigned); 130 end; 131 132 procedure TfrVBandEditorForm.FormCreate(Sender: TObject); 133 begin 134 Caption := sVBandEditorFormCapt; 135 GroupBox1.Caption := sVBandEditorFormBnd; 136 GroupBox2.Caption := sVBandEditorFormDataSource; 137 Label1.Caption := sVBandEditorFormRecordCount; 138 end; 139 140 procedure TfrVBandEditorForm.CB1Click(Sender: TObject); 141 begin 142 frEnableControls([Label1, edtRecCount], CB1.ItemIndex = 1); 143 end; 144 145 procedure TfrVBandEditorForm.LB1Click(Sender: TObject); 146 var 147 i: Integer; 148 s: String; 149 begin 150 s := LB1.Items[LB1.ItemIndex]; 151 s := Copy(s, 1, Pos(':', s) - 1); 152 s := List[s]; 153 if (s <> '') and (s[1] in ['1'..'9']) then 154 begin 155 i := 1; 156 edtRecCount.Text := s; 157 end 158 else 159 begin 160 i := CB1.Items.IndexOf(s); 161 if i = -1 then 162 i := CB1.Items.IndexOf(sNotAssigned); 163 end; 164 CB1.ItemIndex := i; 165 CB1Click(nil); 166 end; 167 168 procedure TfrVBandEditorForm.CB1Exit(Sender: TObject); 169 var 170 s: String; 171 begin 172 s := LB1.Items[LB1.ItemIndex]; 173 s := Copy(s, 1, Pos(':', s) - 1); 174 if CB1.ItemIndex = 1 then 175 List[s] := edtRecCount.Text 176 else 177 List[s] := CB1.Items[CB1.ItemIndex]; 178 end; 179 180 end. 181 182