![]() |
createDesktop & Forms
Hallo,
ich habe mal wieder eine Frage, die mich heute schon etliche Stunden beschäftigt hat. Und zwar ich möchte einen neuen Desktop mit createDesktop erstellen. Soweit kein Problem. Ich habe mir mal Luckies Code angeschaut ![]() Wenn ich aber die Procedure in eine VCL - Anwendung einbaue, dann funktioniert sie nur soweit, dass der Neue Desktop erstellt wird und dann auch gar nix mehr macht. Ich habe raugefunden, dass nach setThreadDesktop(), getLastError <> 0 zurückgibt. Den ErrorCode 1447 (ERROR_NO_SCROLLBARS) (laut msdn) finde ich relativ komisch. (Normalerweise müsste ich eventuell 170 für Thread in use) Hat von euch jemand eine Idee was da schief laufen könnte?
Delphi-Quellcode:
Grüße
procedure BaitAndSwitchDesktop;
var OldDesk : HDESK; NewDesk : HDESK; begin OldDesk := GetThreadDesktop(GetCurrentThreadID); NewDesk := CreateDesktop(PChar('Foobar'), nil, nil, 0, DESKTOP_CREATEWINDOW or DESKTOP_SWITCHDESKTOP or DESKTOP_CREATEMENU or DESKTOP_WRITEOBJECTS, nil); if NewDesk <> 0 then begin showmessage(inttostr(windows.GetLastError)); // Gibt 0 zurück showmessage(booltostr(Windows.SetThreadDesktop(NewDesk))); showmessage(inttostr(windows.GetLastError)); // Gibt 1447 zurück Windows.SwitchDesktop(NewDesk); // Form erstellen Windows.SwitchDesktop(OldDesk); Windows.SetThreadDesktop(OldDesk); CloseDesktop(NewDesk); end; CloseDesktop(OldDesk); end; Björn |
Re: createDesktop & Forms
Nach der MSDN Doku zu SetThreadDesktop funktioniert diese nur, wenn keine Handles des aktuellen Threads auf dem aktuelle Desktop bestehen. Und da die VCL das schon beim Programmstart geht das net.
Du musst also entweder einen neuen Thread verwenden, dann aber ohne VCL, oder du machst einen neuen Thread und startest darin die VCL. Soweit ich weiß, gibt es bereits Posts dazu. Einfach mal CreateDesktop oder SetThreadDesktop suchen. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:31 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz