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

Reply via email to