Ich mache das ganze über Messages.
In der Form, in der auch das Logging geschieht, gibt es die Methode WMWriteLog.
procedure WMWriteLog(var AMessage : TMessage); message WM_WRITELOG;
Delphi-Quellcode:
procedure TfrmMain.WMWriteLog(var AMessage: TMessage);
var
lMessage : PChar;
begin
lMessage := PChar(AMessage.WParam);
if (Length(lMessage) > 0) then
FLog.Add(lMessage);
StrDispose(lMessage);
end;
An den Stellen, wo ich etwas an das Log übergeben will nutze ich dann "SendMessage" um meinen Text zu an die Form zu schicken.
Delphi-Quellcode:
procedure WriteLog(AMessage: string);
var
lMessage : PChar;
begin
lMessage := StrAlloc(Succ(Length(AMessage)));
StrPCopy(lMessage, AMessage);
SendMessage(FParentHandle, WM_WRITELOG, integer(lMessage), 0);
Application.ProcessMessages;
end;
Ob das nun die sauberste Lösung ist, kann ich nicht versprechen - sie funktioniert aber.