几个BCB的小问题(分可以在加,急)
(1) 主程序中建立另一个线程 thread =new Thread( false );
子线程中执行
while(1) { ReadFile; } //ReadFile函数去读硬件设备
我在主程序中调用 thread-> Terminate(); 不能立即结束,我调试发现问题出在ReadFile上,等此函数执行完才能结束,请问有没有办法立即结束??
(2) 我用了TFont给程序的TMemo设置字体,但我想保存它,以便下次运行时设置不变,请问我应该怎么保存这个配置文件??
(3) 我要一个字符一个字符的向TMemo中不断的插入字符,用memo-> Lines-> add " ";会自动换行,对我不适用,我目前用 memo-> Text = memo-> Text + ch;,但在循环中memo闪的厉害,我应该怎么做才能速度又快,又不闪,又不自动换行(读到 '\n '时才换行)???
(4)我发现在TMemo中用ctrl+c可以复制,但ctrl+a不能全选,应该怎么实现ctrl+a全选???
[解决办法]
1 要看你的 ReadFile中的代码。
看看Application-> Terminate能不能强行终止。
2 把Font-> Name,Font-> Size依次保存在ini文件中,下次读入即可。
3 if (ch== '\n ') memo-> Add( " ");
else memo-> Lines[memo-> Lines-> Count-1] = memo-> Lines[memo-> Lines-> Count-1] + ch;
4 OnKeyPress:
if (Key==1) //Ctrl+A
{
Memo-> SelectAll();
}
[解决办法]
(1)你应该在ReadFile函数内加上终止条件判断,就是说当终止条件成立时,函数直接返回,那么就可以实现立即结束的效果
(2)你可以从TMemo继承一个自定义类,里面的字体就用你的字体,当使用时,就用继承出来的Memo建立。或者,你可以尝试修改VCL里TMemo的源码,但从做法上来说,一般都是从现有的类继承一个新类出来使用
(3)Memo是不会自动换行的,我觉得是因为你没给Memo设置ScrollBars,Memo的长度比你所添加的字符长,所以就“自动换行”了,这里你设置一下ScrollBars属性为“ssHorizontal”,就可以看到在遇到 "\r\n "前不会被“换行”了。
(4)你可以自己实现全选的功能,在Memo的OnKeyDown事件里添加以下代码:
if(Shift == TShiftState() < < ssCtrl && Key == 65)
{
Memo1-> SelStart = 0;
Memo1-> SelLength = Memo1-> Text.Length();
}
[解决办法]
up
[解决办法]
己有有高手给你解答了。我在楼下接分吧。随便说一句。memo中的复制,全选,粘贴最好楼主自己写一下,又不难的。
[解决办法]
回答1,3,试试好不好用
(1)
if(thread!= NULL)//thread :你的sub thread
{
while(!stopperThread)//stoperThread 你可以在thread构造函数里设:ture,析构里设:false
{
thread -> Resume();
thread -> Terminate();
Application-> ProcessMessages();
}
}
(3)
void addStringToLineEnd(AnsiString StrInst){
AnsiString Str;
Str=Form1-> Memo1-> Lines-> Strings[Form1-> Memo1-> Lines-> Count-1]+ " "+StrInst;
Form1-> Memo1-> Lines-> Strings[Form1-> Memo1-> Lines-> Count-1]=Str;
}
[解决办法]
写反le
-> 你可以在thread构造函数里设:false,析构里设:ture
[解决办法]
1 TerminateThread:
2 WriteComponent & ReadComponent
34看上面
[解决办法]
up
[解决办法]
ReadFile函数去读硬件设备
> > 改用异步方式
[解决办法]
路过
[解决办法]
用 "ReadFile函数去读硬件设备 "指何设备?