关于form的,程序运行时怎么最小化或移动form??

zxx_0405 2009-03-12 10:16:30
我的程序运行时,不对form上的控件操作时是可以移动,最小化,最大化的,一旦有控件事件在运行,form就象死掉了一样,不能动了,不能进行任何操作。怎么样才能对它进行移动,最小化,最大化等的操作呢?谢谢了!!!
...全文
125 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
zxx_0405 2009-03-17
  • 打赏
  • 举报
回复
#include <objbase.h>
Jim@luckeeinc.com 2009-03-12
  • 打赏
  • 举报
回复
在用dll裏的那個function的時候寫到一個新開的綫程裏
class myThread : public TThread
{
public:
__fastcall myThread(bool CreateSuspended, TFmyform *f);
private:
void __fastcall Execute(void);
void __fastcall MyWork();
TFmyform *myForm; //這裡是你跑得那個Form
};

_fastcall myThread::myThread(bool CreateSuspended, TFmyform *f):TThread(true)
{
FreeOnTerminate=true;
Resume();
this->myForm = f;
}

void __fastcall myThread::MyWork()
{
this->myForm->function(); //調用Form中的函數
}

void __fastcall myThread::Execute()
{
CoInitialize(NULL);
MyWork();
}
zxx_0405 2009-03-12
  • 打赏
  • 举报
回复
我的循环在DLL中,且是没有form的,是不是只能用多线程解决了??
zxx_0405 2009-03-12
  • 打赏
  • 举报
回复
没有多线程

有循环,但不是死循环,只是耗用时间较长 ,只有循环结束了我才能对form操作
yumikoo 2009-03-12
  • 打赏
  • 举报
回复
还有中可能,你使用了多线程?且线程里对控件运行的同步没有发生并行,产生死锁
Jim@luckeeinc.com 2009-03-12
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 yumikoo 的回复:]
你是不是在什么地方加了死循环?
在循环里加Application->ProcessMessages()
[/Quote]

應該是你在對某個控件操作的時候那個控件裏的代碼處理的時候佔用了較大的系統資源,比如死循環或者其他處理較慢的代碼可以試一下樓上的方法或者為處理較慢的代碼開一個綫程用多綫程來解決
hemiya 2009-03-12
  • 打赏
  • 举报
回复
可能你的事件循环调用了,例如a调用b,b又调用a了,陷入重复调用了.
BORLANDSUN 2009-03-12
  • 打赏
  • 举报
回复
楼上正解.
yumikoo 2009-03-12
  • 打赏
  • 举报
回复
你是不是在什么地方加了死循环?
在循环里加Application->ProcessMessages()
fairchild811 2009-03-12
  • 打赏
  • 举报
回复
恩,构造时用true就是挂起
Jim@luckeeinc.com 2009-03-12
  • 打赏
  • 举报
回复
myThread *MyThread=new myThread(true,this); //這裡第一個參數是true,意思是說綫程創建后進入挂起,知道執行到Resume()函數
調用Resume()的時候綫程啓動,直到Execute()結束
FreeOnTerminate其實就是實時銷毀當綫程結束后自動銷毀掉
所以一般用的時候只要
myThread *MyThread=new myThread(true,this);
MyThread->FreeOnTerminate=true;
就可以了

zxx_0405 2009-03-12
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 zxx_0405 的回复:]
是不是可以这样理解?
最终是把dll那个函数放在MyWork里就可以了?
比如button1click执行的话
button1click事件里
{
myThread *MyThread=new myThread(true,this);
MyThread->FreeOnTerminate=true;
//这里不要 MyThread->MyWork()?

}
[/Quote]

上边出笑话了,MyThread->FreeOnTerminate=true;这个就是释放线程的

zxx_0405 2009-03-12
  • 打赏
  • 举报
回复
是不是可以这样理解?
最终是把dll那个函数放在MyWork里就可以了?
比如button1click执行的话
button1click事件里
{
myThread *MyThread=new myThread(true,this);
MyThread->FreeOnTerminate=true;
//这里不要 MyThread->MyWork()?
delete MyThread;
}
Jim@luckeeinc.com 2009-03-12
  • 打赏
  • 举报
回复
如果你在Form上用一個button 裏面寫
for(int i = 0; i < 10000000; i++)
{
String str = IntToStr(i);
}
在點了button后這個Form上的其它控件就不能動
這個就是LZ遇到的情況
只要單獨給綫程 去執行那段很耗時的代碼 就不會影響其他了
aozhi 2009-03-12
  • 打赏
  • 举报
回复
单线程?
得用多线程吧?
Jim@luckeeinc.com 2009-03-12
  • 打赏
  • 举报
回复
HINSTANCE mydll;
mydll=LoadLibrary("xxx.dll");
比如在你的form裏有個函數是調用這個dll的
void myFunction()
{
......GetProcAddress(mydll, ".....");
}
把myfunction寫在剛剛那個類的MyWork裏
void __fastcall myThread::MyWork()
{
this->myForm->myFunction(); //調用Form中的函數
}
用的時候new 一下這個類就好了
myThread *MyThread=new myThread(true,this);
MyThread->FreeOnTerminate=true;
zxx_0405 2009-03-12
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 Ring_Pt 的回复:]
在用dll裏的那個function的時候寫到一個新開的綫程裏
class myThread : public TThread
{
public:
__fastcall myThread(bool CreateSuspended, TFmyform *f);
private:
void __fastcall Execute(void);
void __fastcall MyWork();
TFmyform *myForm; //這裡是你跑得那個Form
};

_fastcall myThread::myThread(bool CreateSuspended, TFmyform *f):TThread(true)
{
FreeOnTermi…
[/Quote]

这段代码是放在调用dll的程序的吧
没执行线程的东西

13,825

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧