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

📄 rm_flds.pas

📁 进销存·完整的·有数据库的·非常完整·只得参考
💻 PAS
字号:

{*****************************************}
{                                         }
{         Report Machine v2.0             }
{               Fields list               }
{                                         }
{*****************************************}

unit RM_flds;

interface

{$I RM.inc}

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, ExtCtrls, Buttons;

type
  TRMFieldsForm = class(TForm)
    lstFields: TListBox;
    lstDatasets: TListBox;
    btnOK: TButton;
    btnCancel: TButton;
    chkUseTableName: TCheckBox;
    Image1: TImage;
    Image2: TImage;
    Image3: TImage;
    Image4: TImage;
    procedure lstFieldsDblClick(Sender: TObject);
    procedure lstDatasetsClick(Sender: TObject);
    procedure lstDatasetsDrawItem(Control: TWinControl; Index: Integer;
      ARect: TRect; State: TOwnerDrawState);
    procedure FormShow(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
  private
    { Private declarations }
    procedure FillDatasetsLB;
    procedure GetFieldName;
    procedure Localize;
  public
    { Public declarations }
    DBField: string;
  end;

implementation

{$R *.DFM}

uses Registry, RM_Class, RM_Const, RM_Desgn, RM_DBRel, RM_Utils;

var
  LastDB: string;

procedure TRMFieldsForm.Localize;
begin
	Font.Name := RMLoadStr(SRMDefaultFontName);
  Font.Size := StrToInt(RMLoadStr(SRMDefaultFontSize));
  Font.Charset := StrToInt(RMLoadStr(SCharset));

  RMSetStrProp(Self, 'Caption', rmRes + 450);
  RMSetStrProp(chkUseTableName, 'Caption', rmRes + 722);

  btnOK.Caption := RMLoadStr(SOk);
  btnCancel.Caption := RMLoadStr(SCancel);
end;

procedure TRMFieldsForm.FillDatasetsLB;
var
  i: Integer;
  sl: TStringList;
begin
  sl := TStringList.Create;
  lstDatasets.Items.BeginUpdate;
  CurReport.Dictionary.GetDatasetList(lstDatasets.Items);
  if CurReport.MixVariablesAndDBFields then
  begin
    CurReport.Dictionary.GetCategoryList(sl);
    for i := 0 to sl.Count - 1 do
      lstDatasets.Items.AddObject(sl[i], TObject(1));
  end;
  lstDatasets.Items.EndUpdate;
  sl.Free;
end;

procedure TRMFieldsForm.lstDatasetsClick(Sender: TObject);
var
  i: Integer;
  sl: TStringList;
begin
  if Integer(lstDatasets.Items.Objects[lstDatasets.ItemIndex]) = 1 then
  begin
    sl := TStringList.Create;
    CurReport.Dictionary.GetVariablesList(lstDatasets.Items[lstDatasets.ItemIndex], sl);
    lstFields.Items.Clear;
    for i := 0 to sl.Count - 1 do
      lstFields.Items.AddObject(sl[i], TObject(1));
    sl.Free;
  end
  else
    CurReport.Dictionary.GetFieldList(lstDatasets.Items[lstDatasets.ItemIndex],
      lstFields.Items)
end;

procedure TRMFieldsForm.GetFieldName;
begin
  if lstDatasets.Items.Count > 0 then
    LastDB := lstDatasets.Items[lstDatasets.ItemIndex];
  if lstFields.ItemIndex <> -1 then
  begin
    if Integer(lstFields.Items.Objects[lstFields.ItemIndex]) = 1 then
      DBField := lstFields.Items[lstFields.ItemIndex]
    else
    begin
    	if chkUseTableName.Checked then
      	DBField := LastDB + '."'
      else
      	DBField := '"';
      DBField := DBField + lstFields.Items[lstFields.ItemIndex] + '"';
    end;
  end;
end;

procedure TRMFieldsForm.FormShow(Sender: TObject);
begin
  FillDatasetsLB;
  with lstDatasets do
  begin
    if Items.Count > 0 then
    begin
      if Items.IndexOf(LastDB) <> -1 then
        ItemIndex := Items.IndexOf(LastDB)
      else
        ItemIndex := 0;
      lstDatasetsClick(nil);
    end;
  end;
end;

procedure TRMFieldsForm.lstFieldsDblClick(Sender: TObject);
begin
  ModalResult := mrOk;
end;

procedure TRMFieldsForm.lstDatasetsDrawItem(Control: TWinControl;
  Index: Integer; ARect: TRect; State: TOwnerDrawState);
var
  Image: TImage;
  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);
    if Control = lstDatasets then
      Image := Image1
    else
      Image := Image2;
    Canvas.BrushCopy(r, Image.Picture.Bitmap, Rect(0, 0, 18, 16), clGreen);
    Canvas.TextOut(ARect.Left + 20, ARect.Top + 1, Items[Index]);
  end;
end;

procedure TRMFieldsForm.FormCreate(Sender: TObject);
begin
	Localize;
end;

procedure TRMFieldsForm.FormClose(Sender: TObject;
  var Action: TCloseAction);
begin
  GetFieldName;
  if RMDesigner.Visible then
    RMDesigner.SetFocus;
end;

end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -