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

📄 indextreectrl.pas

📁 Delphi利用MVC开发的典型例子
💻 PAS
字号:
unit IndexTreeCtrl;

interface
uses
  SysUtils, forms, Menus, ComCtrls, buttons, classes, controls, patterns,
  IndexTreeMdl, IndexTreeView;

type
  TControllerIndexTree = class(TController)
    model: TModelIndexTree;
    view: TViewIndexTree;
  protected
    procedure DoCommand(ACommand: string; const args: string = ''); override;
  public
    constructor Create;
    destructor Destroy; override;
    procedure OnClick(Sender: TObject); //for ieventListener
    procedure OnMouseEvent(Sender: TObject;
      Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
  end;

implementation
uses
  commandlist;

procedure TControllerIndexTree.OnClick(Sender: TObject);
begin
  if Sender is TMenuItem then
  begin
    if TMenuItem(Sender).caption = '&Property' then
      Application.MessageBox('Menu Property clicked!', 'Info', 0)
    else if TMenuItem(Sender).caption = '&Refresh' then
      MOdel.refresh;
  end;

  if Sender is TTreeView then
  begin
    if assigned(TTreeView(Sender).Selected) then
    begin
      //send a clear command first, otherwise,everybody would be in selected mode
      self.SendCommand(CMD_CLEAR_SELECTION);
      //send the node as a parameter of a String command,
      //who will handle this command?
      //I don't know and don't care eighter
      self.SendCommand(CMD_NODE_SELECT, Model.GetNodeByParam(TTreeView(Sender).Selected.Data));
    end;
  end;
end;

procedure TControllerIndexTree.OnMouseEvent(Sender: TObject;
  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin

end;

constructor TControllerIndexTree.Create;
begin
  inherited;
  model := TModelIndexTree.Create;
  view := TViewIndexTree.create(nil);
  view.setEventHandler(OnClick);
  model.RegObserver(view);
end;

destructor TControllerIndexTree.destroy;
begin
  freeAndNil(model);
  freeAndNil(view);
  inherited;
end;

procedure TControllerIndexTree.DoCommand(ACommand: string; const args: string = '');
begin
  if ACommand = CMD_REQUIRE_INDEXTREE then
  begin
    //make sure the view not released by the command object
    self.model.MakeIndexTree;
    self.SendCommand(TCommand.Create(CMD_SHOW_INDEXTREE, nil, view, '', nil, false));
  end

  //this command is not I sent,when a send button in the view of Father/Mother/Children
  //was clicked,this command will be send.
  else if (ACommand = CMD_NODE_SELECT) and (trim(args) <> '') then
  begin
    model.nodeSelected(args);
  end;
end;

initialization
  ControlCenter.RegController(TControllerIndexTree.Create);

end.

⌨️ 快捷键说明

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