读书人

delphi 线程 uses 有关问题

发布时间: 2012-05-04 12:36:09 作者: rapoo

delphi 线程 uses 问题。
详细一点来说是这样的,有个main单元,这个单元要引用线程ThrCalc_Data.,然后这个线程有一部分的功能是计算出一个值赋给Frm_M.edit.text,总是提示
[Error] ThrCalc_Data.pas(79): Undeclared identifier: 'Frm_M';

互相引用的uses 是加在implementation 后的。单元确实都uses 了。

问题在哪呢?



[解决办法]
你确认是uses的Frm_M所在的单元吗,还是好好查查吧
[解决办法]
有uses main吧
[解决办法]
名字太常用,很不好

这次,估计就是:实际上引用的是另一个main了
[解决办法]
在公共单元定义:
const
WM_THREADMSG=WM_USER+1;

然后在线程里写:
if 值(X)是数值型 then
PostMessage(窗口.Handle,WM_THREADMSG,integer(X),0)
else //值是字符串,并字符串名是str
begin
GetMem(P,1024);//一个字符串长度1024应该够了吧,不够把1024改大
ZeroMemory(P,1024);
CopyMemory(P,Pointer(str),Length(str));
PostMessage(窗口.Handle,WM_THREADMSG,integer(P),0);
end;

在窗口消息响应函数中写:
if 值(X)是数值型 then
Edit1.Text:=IntToStr(Msg.WParam)
else //值是字符串,并字符串名是str
begin
Edit1.text:=PChar(Pointer(Msg.WParam));
FreeMem(Pointer(Msg.WParam),1024);
end;
随便写写,也没调试,可能有点错误,反正这种方式是可行的。
[解决办法]
可能那个单元中的参数表不全吧
[解决办法]
5楼的好方法,在线程中直接更改VCL控件的属性值真的不是好方法。

读书人网 >.NET

热点推荐