如何在Delphi 7 IDE中将一个方法挂接到Edit事件?

前端之家收集整理的这篇文章主要介绍了如何在Delphi 7 IDE中将一个方法挂接到Edit事件?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我想自动检出一个文件,当我开始编辑它在Delphi 7 IDE。

ClearCase是我的版本控制系统,我真的讨厌需要检出一个文件,然后开始编辑。它总是打破我的思想流程:我试图解决一个问题,找到我需要改变,尝试编辑它,失败,因为文件是只读,打开清除,搜索文件,最后签出,尝试编辑文件,失败,因为IDE仍然认为它是readonly,告诉IDE不是readonly。当我终于回到代码,我忘了我在做什么。

我发现this nice and simple ClearCase IDE integration code.它的工作,但使用已弃用的ToolIntf单位。我添加了几个快捷方式。这里是它的简化版本(没有尝试编译):

  1. unit clearcase;
  2.  
  3. interface
  4. uses ToolsApi,ToolIntf;
  5.  
  6. implementation
  7. uses
  8. Windows,Dialogs,Classes,ExptIntf,Menus,ShellApi,SysUtils;
  9.  
  10. type
  11. TDelphiClearcase = class
  12. private
  13. FClearcaseMenu,FDoCheckOutPasDfm,FDoCheckInPasDfm : TIMenuItemIntf;
  14.  
  15. procedure ExecCommand(const command: string; path: PChar = nil);
  16. public
  17. destructor Destroy;override;
  18. procedure DoClick(Sender: TIMenuItemIntf);
  19. property ClearcaseMenu: TIMenuItemIntf read FClearcaseMenu write FClearcaseMenu;
  20. property DoCheckOutPasDfm:TIMenuItemIntf write FDoCheckOutPasDfm;
  21. property DoCheckInPasDfm: TIMenuItemIntf write FDoCheckInPasDfm;
  22. end;
  23.  
  24. var
  25. dcc: TDelphiClearcase = nil;
  26.  
  27. { TDelphiClearcase }
  28.  
  29. destructor TDelphiClearcase.Destroy;
  30. procedure Remove(item: TIMenuItemIntf);
  31. begin
  32. if( item = nil )then
  33. Exit;
  34. item.DestroyMenuItem;
  35. FreeAndNil(item);
  36. end;
  37. begin
  38. Remove(FDoCheckOutPasDfm);
  39. Remove(FDoCheckInPasDfm);
  40. inherited;
  41. end;
  42.  
  43. procedure TDelphiClearcase.DoClick(Sender: TIMenuItemIntf);
  44. function GetPasDfm(const f: string): string;
  45. var
  46. aux: string;
  47. begin
  48. aux := Copy(f,1,Length(f) - 4);
  49. Result := aux + '.pas' + ' ' + aux + '.dfm'
  50. end;
  51.  
  52. var
  53. command,fileName : string;
  54. begin
  55. fileName := ToolServices.GetCurrentFile;
  56.  
  57. if( Sender = FDoCheckOutPasDfm )then
  58. command := 'cleartool co ' + GetPasDfm(fileName)
  59. else if( Sender = FDoCheckInPasDfm )then
  60. command := 'cleartool ci ' + GetPasDfm(fileName);
  61.  
  62. ExecCommand(command);
  63.  
  64. ToolServices.ReloadFile(fileName);
  65.  
  66. end;
  67.  
  68. procedure TDelphiClearcase.ExecCommand(const command: string; path: PChar);
  69. var
  70. pi : TProcessInformation;
  71. stinfo : TStartupInfo;
  72. begin
  73. FillChar(stinfo,SizeOf(stinfo),0);
  74. stinfo.cb := SizeOf(stinfo);
  75.  
  76. if( CreateProcess(nil,PChar(command),nil,True,CREATE_NEW_CONSOLE,path,stinfo,pi) )then begin
  77. WaitForSingleObject(pi.hProcess,INFINITE);
  78. CloseHandle(pi.hProcess)
  79. end
  80. end;
  81.  
  82. procedure CreateMenus;
  83. var
  84. services: TIToolServices;
  85. begin
  86. if( BorlandIDEServices = nil )then
  87. Exit;
  88. services := ToolServices;
  89.  
  90. if( services = nil )then
  91. Exit;
  92.  
  93. dcc := TDelphiClearcase.Create;
  94.  
  95. dcc.ClearcaseMenu := services.GetMainMenu.GetMenuItems.InsertItem(6,'C&learcase','ClearcaseMenu','ClearcaseTools',[mfEnabled,mfVisible],nil);
  96.  
  97.  
  98. dcc.DoCheckOutPasDfm := dcc.ClearcaseMenu.InsertItem(2,'Check Out pas and dfm','DoCheckOutPasDfm','Undo the check outs',ShortCut(Ord('>'),[ssCtrl]),2,dcc.DoClick);
  99. dcc.DoCheckInPasDfm:= dcc.ClearcaseMenu.InsertItem(4,'Check In pas and dfm','DoCheckInPasDfm','Check in current files',ShortCut(Ord('<'),dcc.DoClick);
  100.  
  101. end;
  102.  
  103. procedure DestroyMenus;
  104. begin
  105. FreeAndNil(dcc);
  106. end;
  107.  
  108. initialization
  109. CreateMenus;
  110.  
  111. finalization
  112. DestroyMenus
  113. end.

我想检查该文件,当我第一次开始编辑它,它是只读的。我不知道如何钩一个函数到IDE编辑事件的文件。欢迎任何指针。

解决方法

编写API等的替代方法是简单地使用快照视图,并使用“Highjack”功能自动编写文件…然后只是稍后检查。

猜你在找的Delphi相关文章