Erzeuge alles im execute, das create ist noch im hauptthread, du musst das Window in dem Tread erzeugen in dem es benutzt werden soll.
@Fritzew: Tatsächlich, habe den Createdialog ins Execute verschoben und schon reagiert das Fenster unabhängig von der Auslastung vom Hauptthread. Bin beeindruckt, habe nicht gewußt, dass anscheinend TThread.Create noch im Hauptthread läuft.
Vielen Dank für dem essentiellen Hinweis!
Nun zur eigentlichen Frage, ich habe die folgende Messagequeue mit IsDialogMessage, TranslateMessage u. DispatchMessage für den eigenständigen
Nonvcl Thread mit:
Delphi-Quellcode:
procedure TDataThread.Execute;
var
Msg: TMsg;
begin
hdlg := CreateDialog(HInstance, MAKEINTRESOURCE(100), Self.Handle, @DlgFunc);
ShowWindow(hdlg, SW_SHOW);
while not terminated do
begin
if GetMessage(msg,0,0,0) then
begin
if not(IsDialogMessage(hdlg, Msg)) then
begin
TranslateMessage(Msg);
DispatchMessage(Msg);
end;
end;
end;
end;
überhaupt richtig gemacht, oder würdet ihr es anders lösen? oder anders gefragt, braucht man die überhaupt?
lg,
jus