📄 rm_vbnd.pas
字号:
{******************************************}
{ }
{ Report Machine v2.0 }
{ Select Band datasource dialog }
{ }
{******************************************}
unit RM_vbnd;
interface
{$I RM.inc}
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ExtCtrls, StdCtrls, RM_Class, RM_Pars;
type
TRMVBandEditorForm = class(TRMObjEditorForm)
btnOK: TButton;
btnCancel: TButton;
GroupBox1: TGroupBox;
GroupBox2: TGroupBox;
Label1: TLabel;
cmbDataSources: TComboBox;
Edit1: TEdit;
lstBands: TListBox;
Image1: TImage;
Image2: TImage;
procedure cmbDataSourcesClick(Sender: TObject);
procedure lstBandsClick(Sender: TObject);
procedure cmbDataSourcesExit(Sender: TObject);
procedure cmbDataSourcesDrawItem(Control: TWinControl; Index: Integer;
ARect: TRect; State: TOwnerDrawState);
procedure lstBandsDrawItem(Control: TWinControl; Index: Integer;
ARect: TRect; State: TOwnerDrawState);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
FBand: TRMBandView;
FList: TRMVariables;
procedure FillCombo;
procedure Localize;
public
{ Public declarations }
function ShowEditor(View: TRMView): TModalResult; override;
end;
implementation
{$R *.DFM}
uses RM_DSet, RM_Const, RM_Utils;
procedure TRMVBandEditorForm.Localize;
begin
Font.Name := RMLoadStr(SRMDefaultFontName);
Font.Size := StrToInt(RMLoadStr(SRMDefaultFontSize));
Font.Charset := StrToInt(RMLoadStr(SCharset));
RMSetStrProp(Self, 'Caption', rmRes + 485);
RMSetStrProp(GroupBox1, 'Caption', rmRes + 486);
RMSetStrProp(GroupBox2, 'Caption', rmRes + 487);
RMSetStrProp(Label1, 'Caption', rmRes + 488);
btnOK.Caption := RMLoadStr(SOk);
btnCancel.Caption := RMLoadStr(SCancel);
end;
function TRMVBandEditorForm.ShowEditor(View: TRMView): TModalResult;
var
i, j, n: Integer;
s: string;
t1: TRMView;
b: Boolean;
begin
FBand := View as TRMBandView;
FList := TRMVariables.Create;
s := FBand.Dataset;
b := False;
if Pos(';', s) = 0 then
b := True;
with RMDesigner.Page do
begin
for i := 0 to Objects.Count - 1 do
begin
t1 := Objects[i];
if (t1.Typ = gtBand) and not (TRMBandView(t1).BandType in
[btReportTitle..btPageFooter, btOverlay, btCrossHeader..btCrossFooter]) then
begin
lstBands.Items.Add(t1.Name + ': ' + RMBandNames[TRMBandView(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);
FList[t1.Name] := Copy(s, n, j - n);
end
else if b then
FList[t1.Name] := s
else
FList[t1.Name] := '0';
end;
end;
end;
if lstBands.Items.Count = 0 then
begin
FList.Free;
Result := mrCancel;
Exit;
end;
FillCombo;
lstBands.ItemIndex := 0;
lstBandsClick(nil);
Result := ShowModal;
if Result = mrOk then
begin
cmbDataSourcesExit(nil);
RMDesigner.BeforeChange;
s := '';
for i := 0 to FList.Count - 1 do
s := s + FList.Name[i] + '=' + FList.Value[i] + ';';
FBand.DataSet := s;
end;
FList.Free;
end;
procedure TRMVBandEditorForm.FillCombo;
begin
CurReport.Dictionary.GetBandDatasourceList(cmbDataSources.Items);
cmbDataSources.Items.Insert(0, RMLoadStr(SVirtualDataset));
cmbDataSources.Items.Insert(0, RMLoadStr(SNotAssigned));
end;
procedure TRMVBandEditorForm.cmbDataSourcesClick(Sender: TObject);
begin
RMEnableControls([Label1, Edit1], cmbDataSources.ItemIndex = 1);
end;
procedure TRMVBandEditorForm.lstBandsClick(Sender: TObject);
var
i: Integer;
s: string;
begin
s := lstBands.Items[lstBands.ItemIndex];
s := Copy(s, 1, Pos(':', s) - 1);
s := FList[s];
if (s <> '') and (s[1] in ['1'..'9']) then
begin
i := 1;
Edit1.Text := s;
end
else
begin
i := cmbDataSources.Items.IndexOf(CurReport.Dictionary.AliasName[s]);
if i = -1 then
i := cmbDataSources.Items.IndexOf(RMLoadStr(SNotAssigned));
end;
cmbDataSources.ItemIndex := i;
cmbDataSourcesClick(nil);
end;
procedure TRMVBandEditorForm.cmbDataSourcesExit(Sender: TObject);
var
s: string;
begin
s := lstBands.Items[lstBands.ItemIndex];
s := Copy(s, 1, Pos(':', s) - 1);
if cmbDataSources.ItemIndex = 1 then
FList[s] := Edit1.Text
else
FList[s] := CurReport.Dictionary.RealDataSourceName[cmbDataSources.Items[cmbDataSources.ItemIndex]];
end;
procedure TRMVBandEditorForm.cmbDataSourcesDrawItem(Control: TWinControl;
Index: Integer; ARect: TRect; State: TOwnerDrawState);
var
r: TRect;
begin
r := ARect;
r.Right := r.Left + 18;
r.Bottom := r.Top + 16;
OffsetRect(r, 2, 0);
with TComboBox(Control) do
begin
Canvas.FillRect(ARect);
if Index <> 0 then
Canvas.BrushCopy(r, Image1.Picture.Bitmap, Rect(0, 0, 18, 16),
Image1.Picture.Bitmap.TransparentColor);
Canvas.TextOut(ARect.Left + 20, ARect.Top + 1, Items[Index]);
end;
end;
procedure TRMVBandEditorForm.lstBandsDrawItem(Control: TWinControl;
Index: Integer; ARect: TRect; State: TOwnerDrawState);
var
r: TRect;
begin
r := ARect;
r.Right := r.Left + 18;
r.Bottom := r.Top + 16;
OffsetRect(r, 2, 0);
with TListBox(Control) do
begin
Canvas.FillRect(ARect);
Canvas.BrushCopy(r, Image2.Picture.Bitmap, Rect(0, 0, 18, 16),
Image2.Picture.Bitmap.TransparentColor);
Canvas.TextOut(ARect.Left + 20, ARect.Top + 1, Items[Index]);
end;
end;
procedure TRMVBandEditorForm.FormCreate(Sender: TObject);
begin
Localize;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -