AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi eigenes Deskband über eigenes Programm steuern
Thema durchsuchen
Ansicht
Themen-Optionen

eigenes Deskband über eigenes Programm steuern

Offene Frage von "Gausi"
Ein Thema von Gausi · begonnen am 24. Nov 2006 · letzter Beitrag vom 24. Jul 2007
Antwort Antwort
Benutzerbild von Gausi
Gausi

Registriert seit: 17. Jul 2005
877 Beiträge
 
Delphi 11 Alexandria
 
#1

eigenes Deskband über eigenes Programm steuern

  Alt 24. Nov 2006, 19:55
Es gibt zwar schon das eine oder andere Thema dazu, aber irgendwie werde ich aus den Tips da nicht schlau, bzw. habe ich auch weitergehende Fragen. Daher ein neues Topic.

Ich habe mir grade sakuras Tutorial zu dem Thema angeschaut, und die Demo-Deskbar auch schon leicht modifiziert und installiert. Das Prinzip funktioniert also bei mir. Wenn ich das richtig sehe, ist so ein Deskband immer im Speicher. Es wird also beim Systemstart initialisiert und beim Abmelden wieder freigegeben. Ich möchte jetzt über ein solches Deskband ein eigenes Programm (einen Player) steuern, was irgendwann gestartet wird, oder auch nicht.

Dazu ist es natürlich sinnvoll, dass in etwa das Verhalten des WMP-Deskbandes nachgeahmt wird. D.h. es kann nur dann eingeblendet werden (über Taskleiste->Rechtsklick->Symbolleisten), wenn mein Programm läuft oder gar nur dann, wenn es minimiert wird.
So wie ich mir das vorstelle, müsste das Deskband nachfragen, ob mein Player läuft und/oder minimiert ist, was man sicherlich so lösen kann, dass man nach dem Fensterhandle meiner Anwendung sucht und dann evtl. da noch nachfragt, ob es grade minimiert ist. Die Frage ist: Wo muss ich diese Abfrage "Darf ich mich zeigen?" einbauen, damit ich über das Taskleisten-Menü mein Deskband nur dann angezeigt bekomme, und sonst nicht? Ich habe da ja stark irgendwlche Parameter in GetBandInfo in Verdacht, komme da aber nicht weiter.

Dann ist auch die Frage, wie kann mein Player beim Start ggf. das Deskband anzeigen? Geht das über die Deskband-GUID? Und wenn ja, wie? Und wie schließt man das wieder?

Das die Buttons im Deskband dann den Player steuern dürfte dann ja wohl über das Versenden von Nachrichten an diesen gehen. Das ist zwar nicht trivial für mich, aber prinzipiell kein Problem (hoffe ich). Das muss dann einfach in den Code der Band-Form, wenn ich das richtig sehe.
  Mit Zitat antworten Zitat
Benutzerbild von Gausi
Gausi

Registriert seit: 17. Jul 2005
877 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: eigenes Deskband über eigenes Programm steuern

  Alt 26. Nov 2006, 12:05
Ok, ich bin einen kleinen Schritt weitergekommen. Allerdings erscheint mir die Lösung nicht besonders sauber. Vor allem, weil sie nicht 100%ig funktioniert.
Ich kann jetzt (fast) verhindern, dass mein Deskband angezeigt wird, wenn meine andere Anwendung nicht läuft. Dazu setze ich einfach die Größe des Bandes auf 0:
Delphi-Quellcode:
 // in TDemoDeskBand.GetBandInfo
MyProgHandle:= FindWindow('MeinProgrammKlassenName',nil);
if MyProgHandle = 0 then
  begin
    pdbi.ptMinSize.x := 0;
    pdbi.ptMinSize.y := 0;
    pdbi.ptMaxSize.x := 0;
    pdbi.ptMaxSize.y := 0;
    pdbi.ptActual.x := 0;
    pdbi.ptActual.y := 0;
  end;
Es ist allerdings so, dass trotzdem etwas unsichtbares von der Breite eines Pixels gezeichnet wird, da sich das "DE" der Eingabegebietsschemaleiste um einen (oder zwei oder drei) Pixel verschiebt.Damit könnte ich zur Not leben.

Bleibt aber immer noch das andere Problem: Wie kann ich dafür sorgen, dass ggf. das Band aktualisiert wird, d.h. wie kann ich durch mein Programm die Taskleiste dazu bringen, mein Band neu zu zeichnen, wodurch (hoffentlich) die BandInfo-Prozedur aufgerufen wird, und dann (weil mein Fenster dann da ist) die Größe richtig gesetzt wird?
  Mit Zitat antworten Zitat
loetmann

Registriert seit: 22. Dez 2003
Ort: Rostock
33 Beiträge
 
Delphi 3 Standard
 
#3

Re: eigenes Deskband über eigenes Programm steuern

  Alt 13. Dez 2006, 09:49
Hallo,

kannst Du nicht mit visible das Teil ausblenden?

Ist der Player ein Fremdprogramm oder ein eigenes? Wenn es ein eigenes ist könntest Du das Deskband von dort aus generieren.

Ein Gruß
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#4

Re: eigenes Deskband über eigenes Programm steuern

  Alt 13. Dez 2006, 10:01
Wenn du dein Programm minimirst kannst du doch dem Desktband eine WindowMessage schicken.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Benutzerbild von Gausi
Gausi

Registriert seit: 17. Jul 2005
877 Beiträge
 
Delphi 11 Alexandria
 
#5

Re: eigenes Deskband über eigenes Programm steuern

  Alt 13. Dez 2006, 10:35
Der Player ist mein eigener, ja. Aber so, wie ich das Tutorial über Deskbands verstehe, lässt sich so ein Deskband nicht einfach so erstellen, sondern muss installiert werden, und "ist einfach immer da", nur halt nicht unbedingt sichtbar. Mit visible scheint das nicht ganz so einfach zu gehen - der Platz wird dann trotzdem für das Band "reserviert".
Wie würde man denn ein Deskband von einer Anwendung aus generieren? Man muss ja nicht nur das Deskband in die Taskleiste reinbringen, sondern da auch evtl. erstmal "Platz schaffen".

Das mit dem Message senden hab ich mir auch schon gedacht. Problem ist: Wohin sende ich diese Nachricht? Wenn ich mit Luckies WindowInfo darüber gehe, dann erhalte ich als Anwendung die explorer.exe (was ja auch irgendwie Sinn macht). Ich weiß jetzt nicht, wie ich bei Start meines Programms das Handle des Deskbands bekommen kann.
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#6

Re: eigenes Deskband über eigenes Programm steuern

  Alt 13. Dez 2006, 10:56
Du kannst ja eigene eigene Klasse/Komponente schreiben welche ein Handle anfordert. Dieser Komponente gibst du einen eindeutigen Klassennamen und setzt den WindowText des Handles anschließend auch noch auf einen eindeutigen Wert. Anschließend sollte sich mit FindWindow was machen lassen
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Benutzerbild von Dunkel
Dunkel

Registriert seit: 26. Mär 2007
Ort: Klingenstadt
541 Beiträge
 
Delphi 2007 Enterprise
 
#7

Re: eigenes Deskband über eigenes Programm steuern

  Alt 24. Jul 2007, 20:11
Hallo,

similar Problem here!

Momentan habe ich es so weit, dass mein Deskband "minimiert" angezeigt wird wenn das dazugehörige Programm nicht gestartet wurde/ist. Startet man das Programm fährt das Deskband aus. Beendet man das Programm wieder fährt das Deskband wieder zu. (das alles mache ich indem ich entsprechend ob das Programm läuft oder nicht die Rückgabewerte von GetBandInfo, also die DESKBANDINFO-Structure, anpasse)

As far as good. Das größte (bei weitem nicht einzige ) Problem ist aber, dass sich das Deskband im "minimiertem" Zustand manuell mit der Mouse aufziehen lässt.

Alles Suchen in der PSDK, MSDN, Google & Co. bringt mich kein Stück weiter.
Gibt es wirklich keine Möglichkeit das Deskband einfach nur auszublenden (so wie es der WMP auch macht)?!?
Es ist zu wahr um schön zu sein...
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:39 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