gpt4 book ai didi

Lazarus:Application.ProcessMessages 的效果

转载 作者:行者123 更新时间:2023-12-03 09:24:25 26 4
gpt4 key购买 nike

我有以下代码,它正确在消息框中显示InvoicingUnit。它还可以正确显示标题中的值。

  ADItemRecord := GetInvItemRecord(txtItemCode.Text);
ShowMessage(ADItemRecord.InvoicingUnit );
lblUnit.Caption := ADItemRecord.InvoicingUni;

但是以下更改(即删除消息框)显示标题。标题为空。

  ADItemRecord := GetInvItemRecord(txtItemCode.Text);
lblUnit.Caption := ADItemRecord.InvoicingUni;

我相信这与程序在数据在记录中准备好之前移动到下一行有关。所以我做了以下更改,希望程序能够正确完成获取,然后继续。

  ADItemRecord := GetInvItemRecord(txtItemCode.Text); //Fetch data from DB
Application.ProcessMessages; //Wait for it to complete (I think)
lblUnit.Caption := ADItemRecord.InvoicingUnit;
Application.ProcessMessages;

但是上面的改变没有效果。

我是否正确地假设调用 Application.ProcessMessages 将等到上一行正确完成?

函数 GetInvItemRecord 旨在从数据库中获取记录。该程序是在 Ubuntu 上使用 Postgres 构建的。

最佳答案

Application.ProcessMessages 表示应用程序可以执行其事件队列中的事件。假设表单上有 2 个按钮,并分配了 onclick 过程。第一个过程是一个漫长的过程(例如,重复...直到 true)。第二个按钮只有 ShowMessage('haha')

现在,如果没有在重复语句的第一个过程中插入appllication.processmessages,如果您按下第一个按钮,那么您将无法按下第二个按钮(或其他任何按钮),直到重复语句结束。因此用户界面被卡住。

像这样插入 application.processmessages

 repeat
Application.ProcessMessages;
...
until true;

如果您按下第一个按钮,然后按下第二个按钮,就会出现显示消息!所以,这是伪造多线程应用程序的一种方法:-))

我希望我说得很清楚。

关于Lazarus:Application.ProcessMessages 的效果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24430987/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com