Der letzte Satz war der entscheidende, denke ich.
Delphi-Quellcode:
EnableWindow(hDlg, False);
New(Info);
Info.hParent := hDlg;
Info.InfoText := rsWaitPrivileges;
hWaitDlg := CreateDialogParam(hInstance, MAKEINTRESOURCE(500), hDlg, @waitdlgproc, Integer(Info));
//Dispose(Info);
New(ThreadParams);
ThreadParams.hParent := hDlg;
ThreadParams.hWaitDlg := hWaitDlg;
CloseHandle(BeginThread(nil, 0, @Thread, ThreadParams, 0, ThreadID));
Jetzt erstelle ich das Fenster außerhalb des Threads. Allerdings klappt das Zerstören innerhalb des Threads nicht mehr:
Delphi-Quellcode:
function Thread(p: PThreadParams): Integer;
begin
try
FillLVGroups(p.hParent, ID_LV_GROUPS);
FillLVPrivileges(p.hParent, ID_LV_PRIVILEGES);
except
on E:
Exception do
DisplayExceptionMsg(p.hParent, E.Errorcode, E.
Message, rsErrorGetPrivilegesCap);
end;
sleep(5000);
DestroyWindow(p.hWaitDlg);
EnableWindow(p.hParent, True);
Dispose(p);
result := 0;
end;
GetLastError liefert mir "Zugriff verweigert". Darf ich DestroyWindow nicht in einem anderen Thread aufrufen?
Da hebn wirs:
Zitat:
A thread cannot use DestroyWindow to destroy a window created by a different thread.
Und nu?