⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rm_vbnd.pas

📁 进销存·完整的·有数据库的·非常完整·只得参考
💻 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 + -