加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

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

发布时间:2020-12-15 05:23:53 所属栏目:大数据 来源:网络整理
导读:我想自动检出一个文件,当我开始编辑它在Delphi 7 IDE。 ClearCase是我的版本控制系统,我真的讨厌需要检出一个文件,然后开始编辑。它总是打破我的思想流程:我试图解决一个问题,找到我需要改变,尝试编辑它,失败,因为文件是只读,打开清除,搜索文件,
我想自动检出一个文件,当我开始编辑它在Delphi 7 IDE。

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

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

unit clearcase;

interface
uses ToolsApi,ToolIntf;

implementation
uses
  Windows,Dialogs,Classes,ExptIntf,Menus,ShellApi,SysUtils;

type
  TDelphiClearcase = class
  private
    FClearcaseMenu,FDoCheckOutPasDfm,FDoCheckInPasDfm : TIMenuItemIntf;

    procedure ExecCommand(const command: string; path: PChar = nil);
  public
    destructor Destroy;override;
    procedure DoClick(Sender: TIMenuItemIntf);
    property ClearcaseMenu: TIMenuItemIntf read FClearcaseMenu write FClearcaseMenu;
    property DoCheckOutPasDfm:TIMenuItemIntf write FDoCheckOutPasDfm;
    property DoCheckInPasDfm: TIMenuItemIntf write FDoCheckInPasDfm;
  end;

var
  dcc: TDelphiClearcase = nil;

{ TDelphiClearcase }

destructor TDelphiClearcase.Destroy;
  procedure Remove(item: TIMenuItemIntf);
  begin
    if( item = nil )then
      Exit;
    item.DestroyMenuItem;
    FreeAndNil(item);
  end;
begin
  Remove(FDoCheckOutPasDfm);
  Remove(FDoCheckInPasDfm);
  inherited;
end;

procedure TDelphiClearcase.DoClick(Sender: TIMenuItemIntf);
  function GetPasDfm(const f: string): string;
  var
    aux: string;
  begin
    aux := Copy(f,1,Length(f) - 4);
    Result := aux + '.pas' + ' ' + aux + '.dfm'
  end;

var
  command,fileName  : string;
begin
  fileName := ToolServices.GetCurrentFile;

  if( Sender = FDoCheckOutPasDfm )then
    command := 'cleartool co ' + GetPasDfm(fileName)
  else if( Sender = FDoCheckInPasDfm )then
    command := 'cleartool ci ' + GetPasDfm(fileName);

  ExecCommand(command);

  ToolServices.ReloadFile(fileName);

end;

procedure TDelphiClearcase.ExecCommand(const command: string; path: PChar);
var
  pi  : TProcessInformation;
  stinfo : TStartupInfo;
begin
  FillChar(stinfo,SizeOf(stinfo),0);
  stinfo.cb := SizeOf(stinfo);

  if( CreateProcess(nil,PChar(command),nil,True,CREATE_NEW_CONSOLE,path,stinfo,pi) )then begin
    WaitForSingleObject(pi.hProcess,INFINITE);
    CloseHandle(pi.hProcess)
  end
end;

procedure CreateMenus;
var
  services: TIToolServices;
begin
  if( BorlandIDEServices = nil )then
    Exit;
  services := ToolServices;

  if( services = nil )then
    Exit;

  dcc := TDelphiClearcase.Create;

  dcc.ClearcaseMenu := services.GetMainMenu.GetMenuItems.InsertItem(6,'C&learcase','ClearcaseMenu','ClearcaseTools',[mfEnabled,mfVisible],nil);


  dcc.DoCheckOutPasDfm := dcc.ClearcaseMenu.InsertItem(2,'Check Out pas and dfm','DoCheckOutPasDfm','Undo the check outs',ShortCut(Ord('>'),[ssCtrl]),2,dcc.DoClick);
  dcc.DoCheckInPasDfm:= dcc.ClearcaseMenu.InsertItem(4,'Check In pas and dfm','DoCheckInPasDfm','Check in current files',ShortCut(Ord('<'),dcc.DoClick);

end;

procedure DestroyMenus;
begin
  FreeAndNil(dcc);
end;

initialization
  CreateMenus;

finalization
  DestroyMenus
end.

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

解决方法

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读