Как подключить метод к событию Edit в Delphi 7 IDE?

36

Я хочу, чтобы автоматически проверять файл, когда я начинаю редактировать его в Delphi 7.

ClearCase - это моя система управления версиями, и я действительно ненавижу необходимость проверять файл перед тем, как его редактировать. Это всегда ломает мой поток мысли: я пытаюсь решить проблему, найти, где мне нужно изменить, попытаться отредактировать ее, выйти из строя, потому что файл только для чтения, откройте ящик, найдите файл, в конце концов, попробуйте отредактировать файл снова, сбой, потому что среда IDE все еще думает, что она только что прочитана, сообщите IDE, которая не является readonly. Когда я, наконец, вернусь к коду, я забыл, что я пытался делать.

Я нашел этот приятный и простой код интеграции IDE ClearCase. Он работает, но использует устаревший модуль 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.

Я хочу проверить файл, когда я впервые начну его редактировать, и он доступен только для чтения. Я не знаю, как подключить функцию к событию редактирования IDE файла. Любые указатели приветствуются.

  • 2
    Одним из возможных обходных путей может быть управление вашими проектами в git, внесение ваших изменений локально и их внесение в конце дня в ваш репозиторий Clearcase. Нет необходимости извлекать файлы в течение дня и не нужно менять флаги только для чтения. Вы можете взглянуть на следующий вопрос для получения дополнительной информации stackoverflow.com/questions/2342131/…
  • 6
    Черт возьми, только что нашел этот вопрос: stackoverflow.com/questions/908942/…
Показать ещё 6 комментариев
Теги:
ide
delphi-7
clearcase

2 ответа

1
Лучший ответ

Альтернативный для написания API или т.п. - просто использовать представления моментальных снимков и автоматически записывать файлы с помощью функции "Highjack"... затем просто check'em позже.

  • 0
    Это не ответ на мой вопрос, но вы правы. Захваченные файлы - единственный разумный способ работы с ClearCase.
0

В качестве альтернативы вы можете использовать открытый инструмент ToolsAPI для прослушивания изменений в редакторе и проверки файла, когда пользователь изменил какой-либо контент в файле.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню