В самой процедуре InsertHeader я создаю экземпляр TIEditReader для чтения нового модуля и TIEditWriter для его изменения.
unitVCSNtfy;
interface
usesSysUtils, Dialogs, Controls, ToolIntf, EditIntf;
type
TIVCSNotifier = class(TIAddInNotifier)
public
procedureFileNotification(NotifyCode: TFileNotification; constFileName: string; varCancel: Boolean); override;
end;
TIVCSEditorInterface = class(TIEditorInterface)
public
procedureInsertHeader;
end;
var
VCSNotifier : TIVCSNotifier;
VCSModuleInterface : TIModuleInterface;
VCSEditorInterface : TIVCSEditorInterface;
implementation
usesFITIntf, FITStr, Classes;
{ ************************* Начало VCSNotifier **************************** }
procedure TIVCSNotifier.FileNotification(NotifyCode: TFileNotification; constFileName: string; varCancel : Boolean);
varTmpFileName : string;
begin
caseNotifyCode of
fnRemovedFromProject:
VCSProject.Remove(LowerCase(ExtractFileName(FileName)));
fnAddedToProject:
begin
if( notFileExists(FileName)) and(ExtractFileExt(FileName) = '.pas') then begin
{ новый файл с исходным кодом }
VCSModuleInterface := ToolServices.GetModuleInterface(FileName);
ifVCSModuleInterface <> nil then begin
VCSEditorInterface := TIVCSEditorInterface(VCSModuleInterface.GetEditorInterface);
VCSEditorInterface.InsertHeader;
VCSEditorInterface.Free;
end;
VCSModuleInterface.Free;
end;
TmpFileName := LowerCase(ExtractFileName(FileName));
ifVCSProject.RecycleExists(TmpFileName) then begin
ifMessageDlg('Вы хотите извлечь текущие ' + ' записи из таблицы Recycle' + #13 + #10 + ' ' + VCSProject.ProjectName + '/' + TmpFileName + '?', mtConfirmation,[mbYes,mbNo], 0 ) = mrYes then begin
VCSProject.Recycle(TmpFileName);
end;
end;
end;
end;
end;
{ ************************* Конец TIVCSNotifier *************************** }
{ ********************* Начало TIVCSEditorInterface ************************ }
procedureTIVCSEditorInterface.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);
ifAPos > 0 then begin
try
InsertText := '';
AssignFile(F, VCSConfig.HeaderFileLocation);
Reset(F);
while notEOF(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 OnE : EStreamError do
MessageDlg('Не могу создать шапку', mtInformation, [mbOK], 0);
end;
end;
end;
{ ********************* Конец TIVCSModuleInterface ************************** }
end.
– Jim Poe
Сергей Сахаровсоветует:
Delphi 4(5) виснут при запуске. Видеокарта S3 Virge.
Решение:
Добавьте в реестр строку:
[HKEY_CURRENT_CONFIG\Display\Settings]
"BusThrottle"="on"
Если не помогает, то попробуйте добавить в system.ini:
[Display] "BusThrottle"="On"
Эта проблема устранена в Delphi 4sp3.
Cannot open c:\delphi 2.0\bin\cmplib32.dll Error code 1157 (Не могу открыть c:\delphi 2.0\bin\cmplib32.dll, код ошибки 1157).
Что за ошибка такая с кодом 1157? Я пробовал удалить все DCU-файлы и переустановить PAS– и DFM-файлы, но ошибка не исчезла. Как это исправить?
Убедитесь в том, что все требуемые DLL находятся в search-пути.
– Mike Orriss
2% ресурсов, в режиме редактирования
Если у вас открыты все формы (показаны или минимизированы), а в редакторе кода открыты все модули, ресурсы очень быстро исчерпываются. Попробуйте закрыть все формы и модули, и открыть только те, которыми вы будете пользоваться. В противном случае при компиляции вы можете завесить Delphi и саму машину.
Активизация и использование в IDE окна CPU
Предупреждение: Окно CPU еще до конца не оттестировано и может иногда приводить к ошибкам. Если у вас есть проблемы с отладчиком, или при запуске вашей программы вы не можете им воспользоваться, окно CPU может помочь решить ваши проблемы. Обычно его не требуется включать, если только у вас не «особый случай».
Читать дальше