Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Eigene Hintklasse nur für bestimmte Controls (https://www.delphipraxis.net/122619-eigene-hintklasse-nur-fuer-bestimmte-controls.html)

Ares 19. Okt 2008 14:56


Eigene Hintklasse nur für bestimmte Controls
 
Hallo!

Ich stricke an einer Komponente für eine Adressliste. Dabei soll eine Funktion sein, dass wenn der Nutzer die Maus über einen Namen hält ein "erweiterter Hint" mit Bild, Anschrift und sonstigen Kontaktdetails angezeigt wird. Das lässt sich mit dem normalen Hintfenster natürlich nicht lösen. Daher habe ich eine eigene Klasse von THintWindows abgeleitet.

Mein Problem ist nun, dass ich diesen erweiterten Hint nur innerhalb der Komponente und auch dort nur an ganz bestimmten Controls verwenden will. Überall anders soll der normale Hint verwendet werden. Ich kann den Hint aber nur durch Application.HintWindowClass ändern. Das ändert aber den Hint für das gesamte Programm...

Wie kann ich meinen erweiterten Hint nur einzelnen Controls zuweisen?

Besten Dank
Ares

Hawkeye219 19. Okt 2008 15:18

Re: Eigene Hintklasse nur für bestimmte Controls
 
Hallo Ares,

im Ereignis Delphi-Referenz durchsuchenTApplication.OnShowHint hast du Zugriff auf das HintControl (oder dessen ClassType): klick

Das Herausfiltern der gewünschten Controls findet damit allerdings auf Formularebene statt und nicht lokal in deiner Komponente.

Gruß Hawkeye

Ares 19. Okt 2008 15:26

Re: Eigene Hintklasse nur für bestimmte Controls
 
Hallo Hawkeye,

vielen Dank für den Tipp! Wie du schon sagst liegt bei dieser Lösung ein Teil der Funktion der Komponente beim Formular bzw. dem Programm. Das ist natürlich nicht optimal, da die Komponente eigentlich in sich funktionieren sollte. Gibt es hierzu also noch eine andere Möglichkeit?

Besten Dank
Ares

Hawkeye219 19. Okt 2008 15:51

Re: Eigene Hintklasse nur für bestimmte Controls
 
Zitat:

Zitat von Ares
Gibt es hierzu also noch eine andere Möglichkeit?

Die Steuerung der HintWindows wird von der Applikation übernommen. Ein Blick in den zugehörigen Quelltext (unit Forms, Methode TApplication.ActivateHint) zeigt, dass auch die einzelnen Controls eine Nachricht CM_HINTSHOW erhalten.

Man könnte nun diese Nachricht in den Controls abfangen und die übergebenen Daten anpassen:

Delphi-Quellcode:
procedure TYourControl.CMHintShow(var Message: TMessage);
var
  Info : PHintInfo;
begin
  inherited;

  Info := PHintInfo(Message.LParam);
  Info.HintWindowClass := TMyHintWindow;
end;
Ob diese Lösung sauber genug und damit für dich akzeptabel ist, musst du selbst entscheiden.

Gruß Hawkeye


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:08 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