Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Form in Taskleiste zwischen ReBarWindow32 & TrayNotifyWnd ? (https://www.delphipraxis.net/92910-form-taskleiste-zwischen-rebarwindow32-traynotifywnd.html)

frost 28. Mai 2007 19:13


Form in Taskleiste zwischen ReBarWindow32 & TrayNotifyWn
 
Hi,
ich möchte eine Form / Panel / Bild in die Taskleiste einbauen,
jedoch ohne DeskBands da diese meinen Wünschen nicht entsprechen. :stupid:

Edit: Hab ein OpenSource Projekt gefunden dass das macht, jedoch in C++ gecodet. :(
Edit2 Was ich dem Source entnehmen kann ist dass ich irgendwie mit RECT arbeiten muss..

Die Handles der Taskleiste sind ja folgendermaßen aufgebaut:

Code:
// Shell_TrayWnd
//    |- Button
//    |- ReBarWindow32
//    |    |- MSTaskSwWClass
//    |    |    +- ToolbarWindow32
//    |    +- ToolbarWindow32
//    |- ]]]] Hier soll mein Control rein [[[[
//    +- TrayNotifyWnd
//         |- TrayClockWClass
//         |- SysPager
//         |    +- ToolbarWindow32
//         +- Button


Grob gesagt möchte ich etwas zwischen ReBarWindow32 und TrayNotifyWnd quetschen.
Wie das aussieht kann man sich bei NHC (Notebook Hardware Control) ansehen:
http://www.imagebanana.com/img/s7lujk3/nhc.PNG

Das habe ich bisher versucht:
Delphi-Quellcode:
var Shell_TrayWnd_HWND: HWND;
begin

  // Das Handle von der Taskleiste rauskriegen
  Shell_TrayWnd_HWND := FindWindow('Shell_TrayWnd', nil);

  // Taskleiste als Parent fürs Panel setzen
  Windows.SetParent(Panel1.Handle,Shell_TrayWnd_HWND);

end;
Das klappt auch, jedoch landet das Panel dann irgendwo unterm Startbutton.
Natürlich könnte man mit Windows.MoveWindow das Panel zur gewünschten Stelle veschieben,
jedoch ist das keine Lösung.

Wie kann ich dem Panel begfreiflich machen dass von der Position her ReBarWindow32 und TrayNotifyWnd seine "Geschwister" sind?

Vielen dank für jede Hilfe! :thumb:

DGL-luke 28. Mai 2007 19:26

Re: Form in Taskleiste zwischen ReBarWindow32 & TrayNoti
 
...geht das nicht per Hier im Forum suchenDeskband?

frost 28. Mai 2007 19:51

Re: Form in Taskleiste zwischen ReBarWindow32 & TrayNoti
 
Zitat:

Zitat von DGL-luke
...geht das nicht per Hier im Forum suchenDeskband?

Danke dass du meinen Post so aufmerksam gelesen hast.. :roll:

Deskbands mag ich nicht benutzen, da
- es auch ohne sie geht (siehe NHC)
- ich ihr "verhalten" nicht mag
- Deskbands zu umfangreich sind. (Möchte nur einen Simplen Button, zwecks Launcher Programm)
- verschiedene andere gründe.

DGL-luke 28. Mai 2007 19:58

Re: Form in Taskleiste zwischen ReBarWindow32 & TrayNoti
 
Ja, das ganze zeugs war mir zu viel zum Lesen :stupid:

Coly 4. Jun 2007 21:24

Re: Form in Taskleiste zwischen ReBarWindow32 & TrayNoti
 
Zitat:

Edit: Hab ein OpenSource Projekt gefunden dass das macht, jedoch in C++ gecodet.
Edit2 Was ich dem Source entnehmen kann ist dass ich irgendwie mit RECT arbeiten muss..
^^ Die machen nichts anders als du, sie verschieben das Panel an die stelle. Damit das dann so ausschaut wie es halt ausschaut bei
denen wird einfach die ReBar gekürzt und siehe da Platz zwischen Rebar und Tray ;-)

PS: Du hast nur ein Problem, Taskbar Bug, du must via Timer z.b. die ReBar Size überwachen und wieder kürzen fals sie ihre Orginal
Size wieder hat.

Code Technisch so in etwa :

Windows.MoveWindow(MyReBarHWnd, L,T,R,B, True);
Windows.RedrawWindow(MyReBarHWnd, nil,0,RDW_UPDATENOW or RDW_FRAME or RDW_INVALIDATE );

hoffe das hilft dir ein bissel..


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:19 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz