Delphi-Forum.de Delphi-Library.de
C-Sharp-Forum.de C-Sharp-Library.de
Registrieren Login Suche Hilfe Sitemap
...das XP-Startmenü selbst auf dem Bildschirm anzeigen
spacer
Autor Nachricht
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star

Beiträge: 11102
Erhaltene Danke: 41
Dabei seit: 22.10.2003
Wohnort: Erde (Milch- straße) ;-), ok, ok: Berlin

(XP), Vista Business, W7 (Chrome, Op10, IE8)
D2006 Pro, Java (Eclipse), C++, C# (VS 2008 Prof), Lazarus
BeitragVerfasst: Fr 23.01.09 02:26  Antworten mit Zitat Beitrag melden
Das XP-Startmenü selbst auf dem Bildschirm anzeigen

Da gerade die Frage im Forum gestellt wurde wie das Startmenü selbst an einer anderen Stelle als der normalen angezeigt werden könne, hier der Versuch einer Lösung. Diese funktioniert allerdings nur mit dem neuen unter XP eingeführten Startmenü.

Die Prozedur dafür sieht so aus:
ausblenden volle Höhe Delphi-Quelltext markieren
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
// Zeigt das Startmenü an der angegebenen Position auf dem Bildschirm an.
// von: jaenicke - delphi-forum.de
// Parameter:
// uPosition die Position, an der die Anzeige erfolgen soll
// uPosRelativeTo wenn <> 0, dann bezieht sich uPosition auf das als Handle angegebene Fenster
// uMoveOnTopOfPos wenn True, dann wird das Startmenü oberhalb von uPosition angezeigt
procedure ShowStartMenu(uPosition: TPoint; uPosRelativeTo: Hwnd;
uMoveOnTopOfPos: Boolean);
var
StartMenuWinRect: TRect;
DropShadow: BOOL;
StartMenuHandle: HWND;
begin
// Wenn die Position als Clientposition gegeben ist, in eine globale umwandeln
if uPosRelativeTo <> 0 then
ClientToScreen(uPosRelativeTo, uPosition);
// das unsichtbare Startmenüfenster suchen
StartMenuHandle := FindWindow('DV2ControlHost', nil);
if uMoveOnTopOfPos then
begin
// Wenn angegeben wurde, dass das Menü oberhalb der angegebenen Position
// angezeigt werden soll, diese um dessen Höhe nach oben verschieben.
GetWindowRect(StartMenuHandle, StartMenuWinRect);
uPosition.Y := uPosition.Y - StartMenuWinRect.Bottom + StartMenuWinRect.Top;
end;
// Workaround: DropShadow Problem
// Unter Windows XP hinterlässt die Anzeige des Startmenü an anderer Stelle
// den Schatten unterhalb des Menüs, wenn diese aktiviert sind.
// Deshalb diese ab XP vorher aus- und danach wieder anschalten, falls sie
// aktiviert sind.
if CheckWin32Version(5, 1) then
begin
SystemParametersInfo(SPI_GETDROPSHADOW, 0, @DropShadow, 0);
if DropShadow then
SystemParametersInfo(SPI_SETDROPSHADOW, 0, Pointer(False), 0);
end;
// Startmenü positionieren und anzeigen, Größe unverändert lassen
SetWindowPos(StartMenuHandle, 0, uPosition.X, uPosition.Y, 0, 0,
SWP_NOSIZE or SWP_SHOWWINDOW);
// DropShadows ggf. wieder aktivieren
if CheckWin32Version(5, 1) and DropShadow then
SystemParametersInfo(SPI_SETDROPSHADOW, 0, Pointer(True), 0);
end;
Aufruf, hier mit den Koordinaten bezogen auf das Formular:
ausblenden Delphi-Quelltext markieren
1:
ShowStartMenu(Point(Button1.Left, Button1.Top), Form1.Handle, CheckBox1.Checked);
Oder um es links oben an der Formularecke anzuzeigen z.B. kann man auch Bildschirmkoordinaten bezogen auf den ganzen Bildschirm übergeben:
ausblenden Delphi-Quelltext markieren
1:
ShowStartMenu(Point(Form1.Left, Form1.Top), 0, CheckBox1.Checked);


Getestet unter:
Windows XP
Windows Vista
Windows 7

Getestete Delphiversionen:
Delphi 7
Delphi 2006
Delphi 2007
Delphi 2009

Bekannte Probleme:
  • Unter Windows Vista ist das Menü zum Neu Starten, Herunterfahren, etc. nicht funktionsfähig.
  • Unter Windows 7 setzt jedes Ausklappen eines Anwendungsmenüs die Position auf die normale Position
  • Bei ViStart (einem Startmenüersatz) funktioniert nur die horizontale Positionierung, vertikal liegt es über der Taskleiste


Screenshot unter Windows Vista (liegt auch im Anhang):
user defined image

Schönen Gruß,
Sebastian


ShowStartMenu_Vista.png  (25.63 KB) Download (Rev 0)
 (237x, 237x gesamt)
Beschreibung:  


Zuletzt bearbeitet von jaenicke am So 08.02.09 14:11, insgesamt 5-mal bearbeitet
Private Nachricht sendenPosting in privater Nachricht zitieren Webseite dieses Mitglieds besuchen
Werbung ausblenden? Dann registriere Dich kostenlos. Weitere Gründe für eine Registrierung.


Werbung ausblenden? Dann registriere Dich kostenlos. Weitere Gründe für eine Registrierung.
Beiträge vom vorherigen Thema anzeigen:   
home home