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

📄 rm_editorfield.pas

📁 这是一个功能强大
💻 PAS
字号:

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

unit RM_EditorField;

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;
    procedure lstFieldsDblClick(Sender: TObject);
    procedure lstDatasetsClick(Sender: TObject);
    procedure FormShow(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure lstDatasetsDrawItem(Control: TWinControl; Index: Integer;
      Rect: TRect; State: TOwnerDrawState);
    procedure FormDestroy(Sender: TObject);
    procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
  private
    { Private declarations }
    FDataSetBMP, FDataSetBMP1, FFieldBMP, FFieldBMP1: TBitmap;
    FDataSetCount: Integer;
    FDBFieldOnly: Boolean;

    procedure Localize;
  public
    { Public declarations }
    SelectedField: string;

    property DBFieldOnly: Boolean read FDBFieldOnly write FDBFieldOnly;
  end;

implementation

{$R *.DFM}

uses
  Registry, RM_Class, RM_Const, RM_Const1, RM_DataSet, RM_Utils, RM_Designer;

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.lstDatasetsClick(Sender: TObject);
var
  i: Integer;
begin
  if lstDataSets.ItemIndex >= 0 then
  begin
    if lstDataSets.ItemIndex < FDataSetCount then
      RMDesigner.Report.Dictionary.GetDataSetFields(lstDataSets.Items[lstDataSets.ItemIndex],
        lstFields.Items)
    else if lstDataSets.Items[lstDataSets.ItemIndex] = RMLoadStr(SSystemVariables) then
    begin
      lstFields.Items.Clear;
      for i := 0 to RMSpecCount - 1 do
        lstFields.Items.Add(RMLoadStr(SVar1 + i));
      for i := 0 to RMVariables.Count - 1 do
        lstFields.Items.Add(RMVariables.Name[i]);
    end
    else
      RMDesigner.Report.Dictionary.GetVariablesList(lstDataSets.Items[lstDataSets.ItemIndex],
        lstFields.Items);
  end
  else
    lstFields.Items.Clear;
end;

procedure TRMFieldsForm.FormShow(Sender: TObject);

  procedure _GetDataSets;
  var
    liStringList: TStringList;
  begin
    lstDatasets.Items.Clear;
    RMDesigner.Report.Dictionary.GetDataSets(lstDatasets.Items);
    FDataSetCount := lstDatasets.Items.Count;

    liStringList := TStringList.Create;
    try
      RMDesigner.Report.Dictionary.GetCategoryList(liStringList);
      liStringList.Add(RMLoadStr(SSystemVariables));
      lstDatasets.Items.AddStrings(liStringList);
    finally
      liStringList.Free;
    end;
  end;

begin
  _GetDataSets;
  lstDataSets.ItemIndex := lstDataSets.Items.IndexOf(RM_Dsg_LastDataSet);
  if lstDataSets.ItemIndex < 0 then lstDataSets.ItemIndex := 0;
  lstDatasetsClick(nil);
end;

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

procedure TRMFieldsForm.FormCreate(Sender: TObject);
begin
  FDataSetBMP := TBitmap.Create;
  FDataSetBMP1 := TBitmap.Create;
  FFieldBMP := TBitmap.Create;
  FFieldBMP1 := TBitmap.Create;

  FDataSetBMP.LoadFromResourceName(hInstance, 'RM_FLD1');
  FDataSetBMP1.LoadFromResourceName(hInstance, 'RM_FLD3');
  FFieldBMP.LoadFromResourceName(hInstance, 'RM_FLD2');
  FFieldBMP1.LoadFromResourceName(hInstance, 'RM_FLD4');

  Localize;
end;

procedure TRMFieldsForm.FormDestroy(Sender: TObject);
begin
  FDataSetBMP.Free;
  FDataSetBMP1.Free;
  FFieldBMP.Free;
  FFieldBMP1.Free;
end;

procedure TRMFieldsForm.lstDatasetsDrawItem(Control: TWinControl;
  Index: Integer; Rect: TRect; State: TOwnerDrawState);
var
  s: string;
  liBmp: TBitmap;
begin
  with TListBox(Control) do
  begin
    s := Items[Index];
    if Control = lstDatasets then
    begin
      if Index < FDatasetCount then
        liBmp := FDataSetBMP
      else
        liBmp := FDataSetBMP1
    end
    else
    begin
      if lstDatasets.ItemIndex < FDatasetCount then
        liBmp := FFieldBMP
      else
        liBmp := FFieldBMP1;
    end;

    Canvas.FillRect(Rect);
    Canvas.BrushCopy(
      Bounds(Rect.Left + 2, Rect.Top, liBmp.Width, liBmp.Height),
      liBmp,
      Bounds(0, 0, liBmp.Width, liBmp.Height),
      liBmp.TransparentColor);
    Canvas.TextOut(Rect.Left + 4 + liBmp.Width, Rect.Top, s);
  end;
end;

procedure TRMFieldsForm.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
  if ModalResult = mrOK then
  begin
    if (lstDatasets.ItemIndex >= 0) and (lstFields.ItemIndex >= 0) then
    begin
      if lstDatasets.ItemIndex < FDatasetCount then
      begin
      	FDBFieldOnly := True;
        RM_Dsg_LastDataSet := lstDatasets.Items[lstDatasets.ItemIndex];
        if Integer(lstFields.Items.Objects[lstFields.ItemIndex]) = 1 then
          SelectedField := lstFields.Items[lstFields.ItemIndex]
        else
        begin
          if chkUseTableName.Checked then
            SelectedField := RM_Dsg_LastDataSet + '."'
          else
            SelectedField := '"';
          SelectedField := SelectedField + lstFields.Items[lstFields.ItemIndex] + '"';
        end;
      end
      else if lstDataSets.Items[lstDataSets.ItemIndex] = RMLoadStr(SSystemVariables) then
      begin
      	FDBFieldOnly := False;
        if lstFields.ItemIndex < RMSpecCount then
          SelectedField := RMSpecFuncs[lstFields.ItemIndex]
        else
          SelectedField := lstFields.Items[lstFields.ItemIndex];
      end
      else
        SelectedField := lstFields.Items[lstFields.ItemIndex];
    end;
  end;
end;

end.

⌨️ 快捷键说明

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