AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi 2 Fragen zum Thema: Prog in die TNA verschieben
Thema durchsuchen
Ansicht
Themen-Optionen

2 Fragen zum Thema: Prog in die TNA verschieben

Ein Thema von Marco Steinebach · begonnen am 7. Nov 2006 · letzter Beitrag vom 7. Nov 2006
Antwort Antwort
Marco Steinebach

Registriert seit: 4. Aug 2006
491 Beiträge
 
Delphi 5 Enterprise
 
#1

2 Fragen zum Thema: Prog in die TNA verschieben

  Alt 7. Nov 2006, 12:22
Hallo,
ich hab noch zwei Verständnisfragen zum Thema, daß ein Programm beim Minimieren in die TNA verschoben wird:

In der Unit von Luckie wird eine Message mittels RegisterWindowMessage registriert, die dann ausgelöst wird, wenn
Zitat:
Die Taskbar im System registriert wird.

Wann wird sie das, sprich: durch was wird die Message ausgelöst?

Es gibt zwei Wege, das Programm in der TNA abzulegen. Einmal eine Message-Prozedur für
WM_TASKBAREVENT
zu schreiben, und, zum Zweiten, die
WndProc
zu erweitern.
Ist eine davon zu bevorzugen, warum?

Vielen Dank für eure Antworten!

Marco
Marco Steinebach
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#2

Re: 2 Fragen zum Thema: Prog in die TNA verschieben

  Alt 7. Nov 2006, 12:52
Ich gehe mal davon aus, dass die RegisterWindowMessage die Explorer Nachricht ID ermittelt. Diese Nachricht wird vom Explorer per Broadcast an alle Top Level Fenster verschickt um ihnen zu signalisieren, dass die Taskbar zur Verfügung steht und Registrierungen von Icons in der TNA vorgenommen werden können. Wenn der Explorer abstürzt und neu gestartet wird, dann wird diese Nachricht von ihm verschickt und dein Programm kann darauf reagieren und das Icon neu registrieren.

Die WndProc oder die direkten MessageHandler sind soweit nicht gross unterschiedlich. Ein MessageHandler kann immer nur eine Message behandeln und das auch nur, wenn zum Erstellunsgzeitpunkt die ID der Nachricht bekannt ist. Die oben genannte Nachrichten ID wird durch RegisterWindowMessage() ermittelt und ist somit nicht bekannt zur Erstellungszeit und kann somit nicht mit einer solchen Methode behandelt werden. Da ist dann die WndProc die einzige Wahl zwischen den beiden Möglichkeiten. Auch wenn man z.B. mehrere Nachrichten abfangen will und alles themenverwandt ist, würde ich persönlich das überschreiben der WndProc bevorzugen, da es sonst unnötig aufgebläht wird.

Nachteil von WndProc: Man muss den Typ TMessage auf bestimmte Nachrichtenstrukturen erst noch typecasten, bei den einzelnen MessageHandlern kann man schon einen speziellen Typ angeben. Dafür kann man afaik in der WndProc die weitere Behandlung der Nachricht unterbinden (in der Klassenhiarchie) durch weglassen des inherited Aufrufes. Bei den MessageHandlern geschieht dies afaik immer.
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

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

Re: 2 Fragen zum Thema: Prog in die TNA verschieben

  Alt 7. Nov 2006, 13:07
@Muetze: So weit ich weiß liefert RegisterWindowMessage eine freie MessageID zurück. Manche nutzen feste ID's wie "wm_user + 1" und andere lassen sich per RegisterWindowMessage eine freie ID zurück geben um Konflikte zu vermeiden.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Marco Steinebach

Registriert seit: 4. Aug 2006
491 Beiträge
 
Delphi 5 Enterprise
 
#4

Re: 2 Fragen zum Thema: Prog in die TNA verschieben

  Alt 7. Nov 2006, 13:55
Hi Muetze,
vielen herzlichen Dank für die rasche, verständliche und schlicht sehr gute Antwort!
Jetzt bin ich schon 'n erhebliches Stück weiter!

Viele Grüße
Marco
Marco Steinebach
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#5

Re: 2 Fragen zum Thema: Prog in die TNA verschieben

  Alt 7. Nov 2006, 23:18
Zitat von SirThornberry:
@Muetze: So weit ich weiß liefert RegisterWindowMessage eine freie MessageID zurück. Manche nutzen feste ID's wie "wm_user + 1" und andere lassen sich per RegisterWindowMessage eine freie ID zurück geben um Konflikte zu vermeiden.
Ja, richtig. Eine freie aus dem Pool der von RegisterWindowMessage() belegbaren Bereich. Die in einer App privat deklarierten wie du sie hier nennst, gilt das nicht. Diese werden dort nicht "ausgetragen" und können somit theoretisch mit diesen überschneiden.

RegisterWindowMessage() wird in so fern genutzt um eine eindeutige ID innerhalb von Windows zu bekommen. Der Identifier (String-Parameter) ist eindeutig - die erste App mit diesem String bekommt eine freie ID. Alle darauffolgenden Aufrufe mit dem gleichen String liefert die gleiche ID. Damit wird sicher gestellt, dass sich vor allem unterschiedliche Programme verständigen können. Der Explorer nutzt auch daher diese Funktion und definiert nicht eine globale Konstante in der WinAPI - und genau das spricht gegen Nutzung eines direkten MessageHandlers wie oben genannt. Da kann man dann nur noch mit der WndProc arbeiten.
  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 21:46 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