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

解决方案 »

  1.   

    你确认是uses的Frm_M所在的单元吗,还是好好查查吧
      

  2.   

    名字太常用,很不好这次,估计就是:实际上引用的是另一个main了
      

  3.   

    线程里引用别的单元,然后给相应窗体赋值是可以的。U_main,对应的窗体确实是'Frm_M'没错啊。通过remove file from project看,确实是对应着的。着急啊,加班累死人,求解答~~~
      

  4.   

    在公共单元定义:
    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.   

    5楼的好方法,在线程中直接更改VCL控件的属性值真的不是好方法。
      

  6.   

    项目太紧急,没来得及结贴。现在回来说明一下。改程序的时候不小心把main.pas文件中的窗体定义部分删掉了
    Frm_main: TFrm_main;
    implementation
    红色部分