35 votes

Comment associer une méthode à l'événement Edit dans Delphi 7 IDE?

J'aimerais automatiquement extraire un fichier, quand j'ai commencer à le modifier dans Delphi 7 IDE.

ClearCase est mon système de contrôle de version et j'ai vraiment la haine de la nécessité d'extraire un fichier avant de commencer à modifier. Elle toujours me brise le flux de la pensée: je suis en train de résoudre un problème, trouver l'endroit où j'ai besoin de changer, d'essayer de le modifier, pas parce que le fichier est en lecture seule, ouvrir clearcase, recherchez le fichier, enfin la caisse, essayez de modifier le fichier à nouveau, l'échec parce que l'IDE pense toujours que c'est en lecture seule, de dire à l'IDE qui n'est pas en lecture seule. Quand j'ai finalement revenir à code, j'ai oublié ce que j'étais en train de faire.

J'ai trouvé cette belle et simple ClearCase IDE du code de l'intégration. Il fonctionne, mais utilise le obsolète ToolIntf unité. J'ai ajouté un couple de raccourcis. Voici une version simplifiée de celui-ci (ne pas essayer de compiler):

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.

Je voudrais extraire le fichier quand j'ai commencer à le modifier et il est en lecture seule. Je n'ai aucune idée de comment le crochet d'une fonction à l'IDE modifier l'événement d'un fichier. Tous les pointeurs sont les bienvenus.

1voto

JimZ Points 122

Une alternative à l'écriture d'API ou similaire consiste simplement à utiliser des vues instantanées et à écrire automatiquement des fichiers à l'aide de la fonctionnalité "Highjack" ... puis à les archiver ultérieurement.

0voto

Rahul W Points 340

Vous pouvez également utiliser ToolsAPI ouvert pour écouter les modifications apportées dans l'éditeur et extraire le fichier lorsque l'utilisateur a modifié le contenu du fichier.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X