versiones que precio architect delphi ide delphi-7 clearcase

que - ¿Cómo conectar un método al evento Edit en Delphi 7 IDE?



que es delphi 2010 (2)

Alternativamente, puede usar ToolsAPI abierto para escuchar los cambios en el editor y extraer el archivo cuando el usuario haya cambiado el contenido del archivo.

Me gustaría descargar automáticamente un archivo cuando empiece a editarlo en Delphi 7 IDE.

ClearCase es mi sistema de control de versiones y realmente odio la necesidad de comprar un archivo antes de comenzar a editarlo. Siempre rompe mi flujo de pensamiento: estoy tratando de resolver un problema, encontrar dónde tengo que cambiar, intentar editarlo, fallar porque el archivo es de solo lectura, abrir la caja fuerte, buscar el archivo, finalmente pagar, intentar editar el archivo de nuevo, fallar porque el IDE todavía piensa que es de solo lectura, decirle al IDE que no es de solo lectura. Cuando finalmente regreso al código, olvidé lo que estaba intentando hacer.

Encontré este código de integración ClearCase IDE agradable y simple . Funciona, pero usa la unidad ToolIntf obsoleta. He agregado un par de atajos. Aquí hay una versión simplificada de la misma (no intenté compilar):

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.

Me gustaría verificar el archivo cuando empiezo a editarlo y es de solo lectura. No tengo idea de cómo conectar una función al evento de edición IDE de un archivo. Cualquier puntero es bienvenido.


Una alternativa para escribir API o similar es simplemente usar vistas de instantáneas y escribir automáticamente archivos usando la funcionalidad "Highjack" ... luego simplemente verifícalos más tarde.