我创建了一个替代品
TApplication
对象。
除了其他功能(内存和GUI日志记录、将GUI状态保存到磁盘、单例实例、与用户/应用程序路径相关的实用程序等)外,它还实现了一个GUI可以通过发布的窗口消息正确初始化的地方(不再滥用OnFormCreate!),该消息使用
PostMessage(MForm.Handle, MSG_LateFormInit)
应用程序发送到主窗体。
然而,我发现了一个问题:如果我打电话
TrySetStyle()
在我使主窗体可见之前,我的消息丢失了。
我认为这是因为
尝试设置样式()
在内部重新创建表单,这可能会影响消息传递循环(
MSG_LateFormInit
消息丢失或未按预期发送?)。
DPR看起来像这样:
program Stuff;
begin
AppData:= TAppData.Create('My App Name');
AppData.CreateMainForm(TMainForm, MainForm, False {Not visible}); // This calls PostMessage
// Warning:
// Don't call TrySetStyle until the main form is visible.
// Solution: Make the main form visible before you call TrySetStyle!
TStyleManager.TrySetStyle('Amakrits');
Application.Run;
end.
困惑
:
-
我不想在之后移动POST代码
尝试设置样式()
。我不想强迫用户在他的主窗体/DPR中调用超过必要的代码,因为很容易忘记这样做。到目前为止,所有的代码都是自包含的(好吧……窗体中有一个方法可以拦截
MSG_LateFormInit
消息,但这是可选的)。所有的更改都在DPR中完成。我想保持这样。
-
另一方面,我确实想打电话
尝试设置样式()
而形状仍然不可见以防止闪烁。
PS:我不知道用户是否会打电话
尝试设置样式()
或者不。这对他来说是可选的。
因此,我需要找到一种可靠的方法来POST和接收
MSG_LateFormInit
信号,最好是在主形式仍然不可见时。