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.