Чтение онлайн

ЖАНРЫ

Советы по Delphi. Версия 1.4.3 от 1.1.2001

Озеров Валентин

Шрифт:

unit VCSNtfy;

interface

uses SysUtils, Dialogs, Controls, ToolIntf, EditIntf;

type

TIVCSNotifier = class(TIAddInNotifier)

 public

procedure FileNotification(NotifyCode: TFileNotification; const FileName: string; var Cancel: Boolean); override;

 end;

 TIVCSEditorInterface = class(TIEditorInterface)

 public

procedure InsertHeader;

 end;

var

 VCSNotifier : TIVCSNotifier;

 VCSModuleInterface : TIModuleInterface;

 VCSEditorInterface : TIVCSEditorInterface;

implementation

uses FITIntf, FITStr, Classes;

{ *************************
Начало VCSNotifier **************************** }

procedure TIVCSNotifier.FileNotification(NotifyCode: TFileNotification; const FileName: string; var Cancel : Boolean);

var TmpFileName : string;

begin

 case NotifyCode of

 fnRemovedFromProject:

VCSProject.Remove(LowerCase(ExtractFileName(FileName)));

 fnAddedToProject:

begin

if (not FileExists(FileName)) and (ExtractFileExt(FileName) = '.pas') then begin

{ новый файл с исходным кодом }

VCSModuleInterface := ToolServices.GetModuleInterface(FileName);

if VCSModuleInterface <> nil then begin

VCSEditorInterface := TIVCSEditorInterface(VCSModuleInterface.GetEditorInterface);

VCSEditorInterface.InsertHeader;

VCSEditorInterface.Free;

end;

VCSModuleInterface.Free;

end;

TmpFileName := LowerCase(ExtractFileName(FileName));

if VCSProject.RecycleExists(TmpFileName) then begin

if MessageDlg('Вы хотите извлечь текущие ' + ' записи из таблицы Recycle' + #13 + #10 + ' ' + VCSProject.ProjectName + '/' + TmpFileName + '?', mtConfirmation,[mbYes,mbNo], 0 ) = mrYes then begin

VCSProject.Recycle(TmpFileName);

end;

end;

end;

 end;

end;

{ *************************
Конец TIVCSNotifier *************************** }

{ ********************* Начало TIVCSEditorInterface ************************ }

procedure TIVCSEditorInterface.InsertHeader;

var

 Module, TmpFileName, UnitName, InsertText, Tmp : string;

 Reader : TIEditReader;

 Writer : TIEditWriter;

 APos : Integer;

 F : TextFile;

begin

 TmpFileName := ExtractFileName(FileName);

 UnitName := SwapStr(TmpFileName, '.pas', '');

 SetLength(Module, 255);

 Reader := CreateReader;

 try

Reader.GetText(0, PChar(Module), Length(Module));

 finally

Reader.Free;

 end;

 APos := Pos('unit ' + UnitName, Module);

 if APos > 0 then begin

try

InsertText := '';

AssignFile(F, VCSConfig.HeaderFileLocation);

Reset(F);

while not EOF(F) do begin

Readln(F, Tmp);

InsertText := InsertText + #13 + #10 + Tmp;

end;

CloseFile(F);

InsertText := InsertText + #13 + #10;

Writer := CreateWriter;

try

Writer.CopyTo(APos - 1);

Writer.Insert(PChar(InsertText));

finally

Writer.Free;

end;

except On E : EStreamError do

MessageDlg('Не могу создать шапку', mtInformation, [mbOK], 0);

end;

 end;

end;

Поделиться с друзьями: