Для примера есть компонент сохраняющий историю изменения свойства в инспекторе объектов, работает как задумывалось, но непонятно как попасть отладчиком например на метод "procedure WriteTextHistory(Writer: TWriter);" или на "procedure SetText(const Value: String);" во время их использования через инспектор объектов.
- Код: Выделить всё
uses
Classes, SysUtils, LResources, Forms, Controls, Graphics, Dialogs;
type
{ TTmmTextLogger }
TTmmTextLogger = class(TComponent)
strict private
{ Private declarations }
FText: String;
FTextHistory: TStrings;
FSaveTextHistory: Boolean;
procedure SetText(const Value: String);
// Метод загрузки истории
procedure ReadTextHistory(Reader: TReader);
// Метод сохранения истории
procedure WriteTextHistory(Writer: TWriter);
protected
{ Protected declarations }
// Переопределенный метод для сохранения с-ва TextHistory
procedure DefineProperties(Filer: TFiler); override;
public
{ Public declarations }
property TextHistory: TStrings read FTextHistory;
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
published
{ Published declarations }
// Свойство TextHistory, хранящее историю изменения св-ва Text
property Test: String read FText write SetText;
property SaveTextHistory: Boolean read FSaveTextHistory write FSaveTextHistory default false;
end;
procedure Register;
implementation
procedure Register;
begin
{$I tmmtextlogger_icon.lrs}
RegisterComponents('MyTestCmpts',[TTmmTextLogger]);
end;
{ TTmmTextLogger }
procedure TTmmTextLogger.SetText(const Value: String);
begin
if Value <> FText then
begin
if FText <> '' then
FTextHistory.Add(FText);
FText := Value;
end;
end;
procedure TTmmTextLogger.ReadTextHistory(Reader: TReader);
begin
try
Reader.ReadListBegin;
try
while not Reader.EndOfList do // Загрузить элемнты списка истории
FTextHistory.Add(Reader.ReadString);
finally
Reader.ReadListEnd;
end;
except
FTextHistory.Clear;
raise;
end;
end;
procedure TTmmTextLogger.WriteTextHistory(Writer: TWriter);
var
i: Integer;
begin
Writer.WriteListBegin;
try
if FSaveTextHistory then // записать историю изменений
for i := 0 to FTextHistory.Count - 1 do
Writer.WriteString(FTextHistory[i]);
finally
Writer.WriteListEnd;
end;
end;
procedure TTmmTextLogger.DefineProperties(Filer: TFiler);
begin
inherited DefineProperties(Filer);
// Определить методы сохранения свойства TextHistory в файл формы
Filer.DefineProperty('TextHistory', @ReadTextHistory, @WriteTextHistory, true);
end;
constructor TTmmTextLogger.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
FText := '';
FSaveTextHistory := false;
FTextHistory := TStringList.Create;
// ..
end;
destructor TTmmTextLogger.Destroy;
begin
// ..
FreeAndNil(FTextHistory);
inherited Destroy;
end;
end.
Вобщем хотелось бы узнать как попасть отладчиком на этот участок кода, который IDE использует, но точек останова в нём не видит:
- Код: Выделить всё
procedure TTmmTextLogger.WriteTextHistory(Writer: TWriter);
var
i: Integer;
begin
Writer.WriteListBegin;
try
if FSaveTextHistory then // записать историю изменений
for i := 0 to FTextHistory.Count - 1 do
Writer.WriteString(FTextHistory[i]);
finally
Writer.WriteListEnd;
end;
end;
сам тестовый компонент: