在有线程程序中不能打开输入法

dancedance 2004-10-28 07:08:08
这个线程是无限循环读取数据,一直在工作。
我想在一个界面的文本框里输入汉字,那里知道一打开输入法整个程序就是死了,不过是微软自带的输入法还是紫光输入法。奇怪就是,我在其他地方copy汉字粘贴上去又没事。在没有打开汉字输入法而输入英文字母就没事。
如何在无限循环线程的程序的文本框内输入汉字呢?
...全文
136 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
aiirii 2004-10-29
  • 打赏
  • 举报
回复
看不出问题,也许要用代码实际测试下
dancedance 2004-10-29
  • 打赏
  • 举报
回复
我是每次都发生,没有办法打开输入法来输入汉字!郁闷
suuare 2004-10-29
  • 打赏
  • 举报
回复
的确! 我也遇见这个问题! 奇怪的是 这种情况不是每次都发生..... 严重关注中!
postren 2004-10-28
  • 打赏
  • 举报
回复
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ScktComp, StdCtrls;

type
TForm1 = class(TForm)
ServerSocket1: TServerSocket; //ServerType := stThreadBlocking;
Button1: TButton;
Memo1: TMemo; //在其中切换输入法就会死程序
procedure ServerSocket1ClientError(Sender: TObject;
Socket: TCustomWinSocket; ErrorEvent: TErrorEvent;
var ErrorCode: Integer);
procedure ServerSocket1GetThread(Sender: TObject;
ClientSocket: TServerClientWinSocket;
var SocketThread: TServerClientThread);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

type
TClientThread = class(TServerClientThread)
private
FRBuf: array [0..4095] of Char;
protected
procedure ClientExecute; override;
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.ServerSocket1ClientError(Sender: TObject;
Socket: TCustomWinSocket; ErrorEvent: TErrorEvent;
var ErrorCode: Integer);
begin
ErrorCode := 0;
Socket.Close;
end;

procedure TForm1.ServerSocket1GetThread(Sender: TObject;
ClientSocket: TServerClientWinSocket;
var SocketThread: TServerClientThread);
var
A: DWORD;
begin
SocketThread := TClientThread.Create(False, ClientSocket);
A := ClientSocket.Handle; //如果没有这个语句就不会死
//(这也是我整理这段代码的时候发现的,我原来程序中是在另外的
// 一个列表中保存了该Handle的值,在此却发现只要读取了ClientSocket
// 的Handle,程序就会死掉,现象为当客户端连接到该服务器后,在Memo中
// 切换输入法,我默认的是Ctrl + Space,程序就会没有任何响应【Delphi 6/7】)
end;

{ TClientThread }


procedure TForm1.Button1Click(Sender: TObject);
begin
Self.ServerSocket1.Open;
end;

{ TClientThread }

procedure TClientThread.ClientExecute;
var
SocketStream : TWinSocketStream;
BytesRead, iPos: Integer;
begin
while not Terminated do
begin
SocketStream := TWinSocketStream.Create(ClientSocket, 5 * 1000);
try
try
iPos := 0;
while (SocketStream.WaitForData(5 * 1000)) do
begin
BytesRead := SocketStream.Read(FRBuf[iPos], SizeOf(LongWord));
end;
except
raise;
end;
finally
SocketStream.Free;
ClientSocket.Close;
Terminate;
end;
end;
end;

end.
postren 2004-10-28
  • 打赏
  • 举报
回复
我也碰到这样的问题,aiirii等等,我整理出来代码
aiirii 2004-10-28
  • 打赏
  • 举报
回复
>>如何在无限循环线程的程序的文本框内输入汉字呢?

表達不清楚, 我的不少程序都帶有線程, 從沒發生這種問題

16,742

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 语言基础/算法/系统设计
社区管理员
  • 语言基础/算法/系统设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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