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

📄 fvariableeditor.pas

📁 Workflow Studio是一款专为商业进程管理(BPM)设计的Delphi VCL框架。通过Workflow Studio你可以轻易地将工作流与BPM功能添加到你的应用程序里。这样能使你或你的最
💻 PAS
字号:
unit fVariableEditor;

{$I wsdefs.inc}

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  {$IFDEF DELPHI6_LVL}
  Variants,
  {$ENDIF}
  ComCtrls, StdCtrls, wsClasses;

type
  TfmVariableEditor = class(TForm)
    PageControl1: TPageControl;
    TabSheet1: TTabSheet;
    lvVars: TListView;
    Label1: TLabel;
    edValue: TEdit;
    btAdd: TButton;
    btDelete: TButton;
    btCancel: TButton;
    btOk: TButton;
    procedure btOkClick(Sender: TObject);
    procedure btCancelClick(Sender: TObject);
    procedure btAddClick(Sender: TObject);
    procedure lvVarsSelectItem(Sender: TObject; Item: TListItem;
      Selected: Boolean);
    procedure PropertyChanged(Sender: TObject);
    procedure btDeleteClick(Sender: TObject);
    procedure lvVarsEdited(Sender: TObject; Item: TListItem;
      var S: String);
  private
    { Private declarations }
    FVars: TWorkflowVariables;
    FUpdatingControls: integer;
    procedure VarsToInterface;
    procedure UpdateListItem(AItem: TListItem; AVar: TWorkflowVariable);
    procedure LoadVarInEditors(AVar: TWorkflowVariable);
    procedure ClearEditors;
    procedure SaveEditorsInVar(AVar: TWorkflowVariable);
    procedure DeleteCurrentVar;
    procedure BeginUpdateControls;
    procedure EndUpdateControls;
    procedure SetControlsEnabled(AEnabled: boolean);
    procedure Localize;
    function WorkVarFromItem(AItem: TListItem): TWorkflowVariable;
  protected
    procedure Loaded; override;
  public
    { Public declarations }
    function EditVariables(AVars: TWorkflowVariables): boolean;
    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;
  end;

implementation
uses wsMain, wsRes;

{$R *.DFM}

{ TForm1 }

function TfmVariableEditor.EditVariables(AVars: TWorkflowVariables): boolean;
begin
  FVars.Assign(AVars);
  VarsToInterface;
  result := ShowModal = mrOk;
  if result then
    AVars.Assign(FVars);
end;

procedure TfmVariableEditor.btOkClick(Sender: TObject);
begin
  ModalResult := mrOk;
end;

procedure TfmVariableEditor.btCancelClick(Sender: TObject);
begin
  ModalResult := mrCancel;
end;

procedure TfmVariableEditor.VarsToInterface;
var
  c: integer;
begin
  lvVars.Items.Clear;
  for c := 0 to FVars.Count - 1 do
    UpdateListItem(lvVars.Items.Add, FVars[c]); 
  ClearEditors;
  if lvVars.Items.Count > 0 then
    lvVars.Selected := lvVars.Items[0];
end;

procedure TfmVariableEditor.UpdateListItem(AItem: TListItem; AVar: TWorkflowVariable);
begin
  AItem.Caption := AVar.Name;
  {$WARNINGS OFF}
  AItem.Data := AVar;
  {$WARNINGS ON}
end;

procedure TfmVariableEditor.btAddClick(Sender: TObject);
var
  NewVar: TWorkflowVariable;
  NewName: string;
  i: integer;
  NewItem: TListItem;
begin
  {Add variable in collection}
  NewVar := FVars.Add;

  {Find a new unique var name}
  i := 0;
  repeat
    inc(i);
    NewName := Format('%s%d', [_str(SVariable), i]);
  until (FVars.FindByName(NewName) = nil);
  NewVar.Name := NewName;

  {Create item in list view}
  NewItem := lvVars.Items.Add;
  UpdateListItem(NewItem, NewVar);

  {select and start renaming the item. EditCaption already selects the item}
  NewItem.EditCaption;
end;

procedure TfmVariableEditor.lvVarsSelectItem(Sender: TObject; Item: TListItem;
  Selected: Boolean);
begin
  if (lvVars.SelCount = 1) then
    LoadVarInEditors(WorkVarFromItem(lvVars.Selected))
  else
    ClearEditors;
end;

function TfmVariableEditor.WorkVarFromItem(AItem: TListItem): TWorkflowVariable;
begin
  {$WARNINGS OFF}
  result := TWorkflowVariable(AItem.Data);
  {$WARNINGS ON}
end;

procedure TfmVariableEditor.LoadVarInEditors(AVar: TWorkflowVariable);
begin
  if AVar <> nil then
  begin
    BeginUpdateControls;
    try
      edValue.Text := VarToStr(AVar.Value);
      SetControlsEnabled(true);
    finally
      EndUpdateControls;
    end;
  end;
end;

procedure TfmVariableEditor.SaveEditorsInVar(AVar: TWorkflowVariable);
begin
  if AVar <> nil then
  begin
    AVar.Value := edValue.Text;
  end;
end;

procedure TfmVariableEditor.ClearEditors;
begin
  BeginUpdateControls;
  try
    edValue.Text := '';
    SetControlsEnabled(false);
  finally
    EndUpdateControls;
  end;
end;

procedure TfmVariableEditor.PropertyChanged(Sender: TObject);
begin
  if (lvVars.SelCount = 1) and (FUpdatingControls = 0) then
    SaveEditorsInVar(WorkVarFromItem(lvVars.Selected));
end;

procedure TfmVariableEditor.btDeleteClick(Sender: TObject);
begin
  if MessageDlg(_str(SConfirmDeleteItems),
     mtConfirmation,[mbYes,mbNo],0) = mrYes then
  begin
     while lvVars.SelCount > 0 do
        DeleteCurrentVar;
     if lvVars.Items.Count > 0 then
        lvVars.Selected := lvVars.Items[lvVars.items.Count - 1]
     else
        ClearEditors;
     lvVars.SetFocus;
  end;
end;

procedure TfmVariableEditor.DeleteCurrentVar;
begin
  if Assigned(lvVars.Selected) then
  begin
    WorkVarFromItem(lvVars.Selected).Free;
    {$WARNINGS OFF}
    lvVars.Selected.Data := nil;
    {$WARNINGS ON}
    lvVars.Selected.Free;
  end;
end;

constructor TfmVariableEditor.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
  FVars := TWorkflowVariables.Create(nil, TWorkflowVariable);
end;

destructor TfmVariableEditor.Destroy;
begin
  FVars.Free;
  inherited;
end;

procedure TfmVariableEditor.BeginUpdateControls;
begin
  inc(FUpdatingControls);
end;

procedure TfmVariableEditor.EndUpdateControls;
begin
  dec(FUpdatingControls);
end;

procedure TfmVariableEditor.lvVarsEdited(Sender: TObject; Item: TListItem;
  var S: String);
var
  AVar: TWorkflowVariable;
begin
  AVar := WorkVarFromItem(Item);
  if AVar <> nil then
  begin
    if Trim(S) = '' then
      S := AVar.Name
    else
      AVar.Name := S;
  end;
end;

procedure TfmVariableEditor.SetControlsEnabled(AEnabled: boolean);
begin
  edValue.Enabled := AEnabled;
end;

procedure TfmVariableEditor.Localize;
begin
  Self.Caption := _str('fmVariableEditor.Self.Caption');
  TabSheet1.Caption := _str('fmVariableEditor.TabSheet1.Caption');
  Label1.Caption := _str('fmVariableEditor.Label1.Caption');
  btAdd.Caption := _str('fmVariableEditor.btAdd.Caption');
  btDelete.Caption := _str('fmVariableEditor.btDelete.Caption');
  btCancel.Caption := _str('fmVariableEditor.btCancel.Caption');
  btOk.Caption := _str('fmVariableEditor.btOk.Caption');
end;

procedure TfmVariableEditor.Loaded;
begin
  inherited;
  with lvVars.Columns.Add do
  begin
    AutoSize := True;
    Caption := _str(SVariable);
  end;
  Localize;
end;

end.

⌨️ 快捷键说明

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