nev*_*ves 35 ide delphi clearcase delphi-7
当我开始在Delphi 7 IDE中编辑它时,我想自动检出文件.
ClearCase是我的版本控制系统,我真的很讨厌在开始编辑之前签出文件.它总是打破我的思维流程:我正在尝试解决问题,找到我需要更改的地方,尝试编辑它,失败因为文件是只读的,打开clearcase,搜索文件,最后结帐,尝试编辑文件再次失败,因为IDE仍然认为它是只读的,告诉IDE不是readonly.当我最终回到代码时,我忘记了我正在尝试做的事情.
我发现了这个简洁明了的ClearCase IDE集成代码.它可以工作,但使用已弃用的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, nil, True, CREATE_NEW_CONSOLE,
nil, 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', 0, 0, 0,
[mfEnabled, mfVisible], nil);
dcc.DoCheckOutPasDfm := dcc.ClearcaseMenu.InsertItem(2,
'Check Out pas and dfm', 'DoCheckOutPasDfm', 'Undo the check outs', ShortCut(Ord('>'),
[ssCtrl]), 0, 2,
[mfEnabled, mfVisible], dcc.DoClick);
dcc.DoCheckInPasDfm:= dcc.ClearcaseMenu.InsertItem(4,
'Check In pas and dfm', 'DoCheckInPasDfm', 'Check in current files', ShortCut(Ord('<'),
[ssCtrl]), 0, 2,
[mfEnabled, mfVisible], dcc.DoClick);
end;
procedure DestroyMenus;
begin
FreeAndNil(dcc);
end;
initialization
CreateMenus;
finalization
DestroyMenus
end.
Run Code Online (Sandbox Code Playgroud)
我想在我第一次开始编辑它时检查文件并且它是只读的.我不知道如何将函数挂钩到文件的IDE编辑事件.任何指针都是受欢迎的.
归档时间: |
|
查看次数: |
1745 次 |
最近记录: |