2013-10-07 118 views
1

我想在我有这里的类中实现一些日志记录功能。基本上,我的想法是在包含日志的类中创建一个TStringList。我可以没有任何麻烦地做到这一点,但我的问题是如何在控件(TMemo或TListBox)能够动态显示包含表单的内容时将其暴露在类之外。我可以直接与类中的控件建立关联,但是我希望保持类不依赖于表单代码本身,并在创建该关联的类中创建一个过程。暴露一个TStringList

基本上,如果我在我的课程中有LogFile:TStringList,我该如何添加一行以使其显示在与独立于类的表单中的TMemo中?

回答

1

让表单在你的类中注册一个回调事件。

如果在将项目添加到列表中时分配了此事件,请使用回调来发送字符串。

Type 
    TMyCallback = procedure(const aLogStr: String) of object; 

    TMyClass = Class 
    private 
     FCallback : TMyCallback; 
     FLogFile : TStringList; 
     procedure SetCallback(ACallback: TMyCallback); 
    public 
     property Callback : TMyCallback write SetCallback; 
    end; 

... 
// Update FLogFile 
FLogFile.Items.Add(SomeText); 
if Assigned(FCallback) then 
    FCallBack(SomeText); 
... 

在你的窗体类:

Type 
    TMyForm = Class(TForm) 
    private 
     procedure IncomingLogString(const AStr: String); 
    end; 

procedure TMyForm.IncomingLogString(const AStr: String); 
begin 
    MyMemo.Lines.Add(AStr); 
end; 

... 
// Register callback 
FMyClass.Callback := Self.IncomingLogString; 

现在,您TMyClass是从形式的任何依赖分离。