ufrmMain.pas 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179
  1. unit ufrmMain;
  2. interface
  3. uses
  4. Windows, Messages, SysUtils, Variants, Classes, Graphics,
  5. Controls, Forms, Dialogs, Menus, ActnList,
  6. Tabs, ExtCtrls, uIMainForm, PluginTabControl,
  7. StdCtrls, IniFiles;
  8. type
  9. TfrmMain = class(TForm, IMainForm)
  10. mmMain: TMainMenu;
  11. actlstMain: TActionList;
  12. actAbout: TAction;
  13. actAbout1: TMenuItem;
  14. pnlExp: TPanel;
  15. pnlTabs: TPanel;
  16. actCreateDemoForm: TAction;
  17. DEMO1: TMenuItem;
  18. DEMO2: TMenuItem;
  19. edtPluginID: TEdit;
  20. btnCreateAsMDI: TButton;
  21. actCreatePluginAsMDI: TAction;
  22. Button1: TButton;
  23. Button2: TButton;
  24. procedure actAboutExecute(Sender: TObject);
  25. procedure actCreateDemoFormExecute(Sender: TObject);
  26. procedure actCreatePluginAsMDIExecute(Sender: TObject);
  27. procedure actCreateReporterDEMOExecute(Sender: TObject);
  28. procedure Button1Click(Sender: TObject);
  29. procedure Button2Click(Sender: TObject);
  30. procedure FormClose(Sender: TObject; var Action: TCloseAction);
  31. procedure FormShow(Sender: TObject);
  32. private
  33. FTempIntf:IInterface;
  34. FPluginTabControl: TPluginTabControl;
  35. procedure closePluginQuery(const pvForm: IInterface; vCanClose: Boolean);
  36. stdcall;
  37. function removePlugin(const pvInstanceID: PAnsiChar): boolean; stdcall;
  38. procedure showPluginAsMDI(const pvPlugin:IInterface);stdcall;
  39. public
  40. constructor Create(AOwner: TComponent); override;
  41. destructor Destroy; override;
  42. { Public declarations }
  43. end;
  44. var
  45. frmMain: TfrmMain;
  46. implementation
  47. uses
  48. mybean.tools.beanFactory, uIFormShow, uMainFormTools;
  49. {$R *.dfm}
  50. constructor TfrmMain.Create(AOwner: TComponent);
  51. begin
  52. inherited;
  53. TMyBeanFactoryTools.setObject('main', Self);
  54. FPluginTabControl := TPluginTabControl.Create(Self);
  55. FPluginTabControl.Parent := pnlTabs;
  56. FPluginTabControl.Align := alClient;
  57. end;
  58. destructor TfrmMain.Destroy;
  59. begin
  60. FPluginTabControl.freeAll;
  61. TMyBeanFactoryTools.removeObject('main');
  62. FreeAndNil(FPluginTabControl);
  63. inherited Destroy;
  64. end;
  65. procedure TfrmMain.actAboutExecute(Sender: TObject);
  66. var
  67. lvIntf:IInterface;
  68. begin
  69. lvIntf := TMyBeanFactoryTools.getBean('aboutForm');
  70. try
  71. (lvIntf as IShowAsModal).showAsModal;
  72. finally
  73. TMyBeanFactoryTools.freeBeanInterface(lvIntf);
  74. end;
  75. end;
  76. procedure TfrmMain.actCreateDemoFormExecute(Sender: TObject);
  77. var
  78. lvPlugin:IInterface;
  79. begin
  80. lvPlugin := TMyBeanFactoryTools.getBean('demoPluginForm');
  81. self.showPluginAsMDI(lvPlugin);
  82. end;
  83. procedure TfrmMain.actCreatePluginAsMDIExecute(Sender: TObject);
  84. var
  85. lvPlugin:IInterface;
  86. begin
  87. lvPlugin := TMyBeanFactoryTools.getBean(edtPluginID.Text);
  88. self.showPluginAsMDI(lvPlugin);
  89. end;
  90. procedure TfrmMain.actCreateReporterDEMOExecute(Sender: TObject);
  91. var
  92. lvPlugin:IInterface;
  93. begin
  94. lvPlugin := TMyBeanFactoryTools.getBean('reporterDemoForm');
  95. self.showPluginAsMDI(lvPlugin);
  96. end;
  97. procedure TfrmMain.Button1Click(Sender: TObject);
  98. var
  99. FTempIntf:IInterface;
  100. begin
  101. FTempIntf := TMyBeanFactoryTools.getBean(edtPluginID.Text);
  102. self.showPluginAsMDI(FTempIntf);
  103. end;
  104. procedure TfrmMain.Button2Click(Sender: TObject);
  105. begin
  106. FTempIntf := nil;
  107. end;
  108. procedure TfrmMain.closePluginQuery(const pvForm: IInterface; vCanClose:
  109. Boolean);
  110. begin
  111. end;
  112. procedure TfrmMain.FormClose(Sender: TObject; var Action: TCloseAction);
  113. var
  114. lvINiFile:TIniFile;
  115. begin
  116. lvINiFile := TIniFile.Create(ChangeFileExt(ParamStr(0), '.history.ini'));
  117. try
  118. lvINiFile.WriteString('main', 'lastPluginID', edtPluginID.Text);
  119. finally
  120. lvINiFile.Free;
  121. end;
  122. end;
  123. procedure TfrmMain.FormShow(Sender: TObject);
  124. var
  125. lvINiFile:TIniFile;
  126. begin
  127. try
  128. self.OnShow := nil;
  129. lvINiFile := TIniFile.Create(ChangeFileExt(ParamStr(0), '.history.ini'));
  130. try
  131. edtPluginID.Text := lvINiFile.ReadString('main', 'lastPluginID', '');
  132. finally
  133. lvINiFile.Free;
  134. end;
  135. if edtPluginID.Text <> '' then
  136. begin
  137. actCreatePluginAsMDI.Execute;
  138. end;
  139. except
  140. end;
  141. end;
  142. function TfrmMain.removePlugin(const pvInstanceID: PAnsiChar): boolean;
  143. begin
  144. FPluginTabControl.remove(String(AnsiString(pvInstanceID)));
  145. Result := true;
  146. end;
  147. procedure TfrmMain.showPluginAsMDI(const pvPlugin: IInterface);
  148. begin
  149. TMainFormTools.showAsMDI(pvPlugin);
  150. FPluginTabControl.BindPlugin(pvPlugin, TMainFormTools.getInstanceID(pvPlugin));
  151. end;
  152. end.