OK.
Anyway, Thank for your help.
Arno Garrels wrote:
isgbuddy wrote:
Hoho,
Many thanks. These code exactly worked.
Why the same code don't have problem in Delphi 7? Can you fix these
code to ICS source?
My code below does not work with Delphi 7 as well. You probably used
ICS V5 with Delphi 7. I guess that the V5 components did not create
their hidden window in the constructor but later when the window is
actually needed. Using ICS in a thread anyway requires a working
message pump, so I don't know whether it was a real improvement if we
created the hidden window at some later time.
Note that ICS creates one or more hidden windows and once a window
is created there must exist a working message pump, otherwise entire
application may freeze.
--
Arno Garrels
Arno Garrels wrote:
isgbuddy wrote:
You don't need a Chinese windows. You just install East Asian input
method in your windows. Then you will get this issue.
Ok, finally it repeated. The problem is that the thread requires
a message pump if it owns a window. It is _neither_ a problem related
to ICS nor to Delphi! You'll see the same freeze when you create a
window
by calling Classes.AllocateHwnd(). Uncomment the commented lines
below
to make it working:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics,
Controls, Forms, Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Edit1: TEdit;
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
TTestThread = class(TThread)
private
FHandle : HWND;
procedure WndProc(var MsgRec: TMessage);
protected
procedure Execute;override;
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
{ TTestThread }
procedure TTestThread.WndProc(var MsgRec: TMessage);
begin
MsgRec.Result := DefWindowProc(FHandle, MsgRec.Msg, MsgRec.wParam,
MsgRec.lParam); end;
procedure TTestThread.Execute;
var
Msg: TMsg;
begin
// PeekMessage(Msg, 0, 0, 0, PM_NOREMOVE); // Initialize thread's
message queue
FHandle := Classes.AllocateHWnd(WndProc); // Create a hidden window
{while not Terminated do
begin
while PeekMessage(Msg, 0, 0, 0, PM_REMOVE) do
begin
if Msg.message = WM_QUIT then
Terminate
else begin
TranslateMessage(Msg);
DispatchMessage(Msg);
end;
end;}
Sleep(1000);
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
with TTestThread.Create(true) do Resume;
end;
end.
--
To unsubscribe or change your settings for TWSocket mailing list
please goto http://lists.elists.org/cgi-bin/mailman/listinfo/twsocket
Visit our website at http://www.overbyte.be
--
To unsubscribe or change your settings for TWSocket mailing list
please goto http://lists.elists.org/cgi-bin/mailman/listinfo/twsocket
Visit our website at http://www.overbyte.be
--
To unsubscribe or change your settings for TWSocket mailing list
please goto http://lists.elists.org/cgi-bin/mailman/listinfo/twsocket
Visit our website at http://www.overbyte.be