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

Reply via email to