AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

In HintWindowClass eigenes Form verwenden

Offene Frage von "taaktaak"
Ein Thema von taaktaak · begonnen am 23. Sep 2023 · letzter Beitrag vom 27. Sep 2023
Antwort Antwort
taaktaak

Registriert seit: 25. Okt 2007
Ort: Radbruch
1.990 Beiträge
 
Delphi 7 Professional
 
#1

In HintWindowClass eigenes Form verwenden

  Alt 23. Sep 2023, 15:06
Moin, Moin,
hier https://www.delphipraxis.net/94518-k...-anzeigen.html hat Sirius vor vielen Jahren einen Weg aufgezeigt, wie in einem Hint auch ein eigenes Bitmap angezeigt werden kann. In abgewandelter Form nutze ich das seit langer Zeit. Nun bin ich ein wenig am basteln und mich stört, das mein neu definiertes Hintwindow weder eigene Methoden noch Properties veröffentlichen kann. Ich hätte gern so etwas...
Delphi-Quellcode:
type TrzHintWindow = class(THintWindow) // by sirius [DelphiPraxis] "Kleines Icon bei Hint anzeigen"
                     private // :-) Juni 2007

                      FText : String;
                      FGutter,Dh,
                      FMaxWH,FDrawW,FDrawH : Integer;
                      FHintBitmap : TBitmap;

                     protected

                      procedure Paint; override;

                     public

                      // -----------------------------------------------------------------------------------------
                      property HintBitmap : TBitmap read FHintBitmap write FHintBitmap; // funktioniert nicht
                      // -----------------------------------------------------------------------------------------

                      function CalcHintRect (MaxWidth:Integer;const AHint:String;AData:Pointer):TRect; override;
                      constructor Create (AOwner:TComponent); override;
                     end;

var HintBMP : TBitmap; // "Schnittstelle" zu TrzHintWindow nur über GLOBALE Variable möglich
Derzeit kann ich das individuelle Bitmap nur via globaler Variable übergeben.
Das funktioniert zwar - aber schön ist das ja nicht.
Gibt es einen "richtigen" Weg?
Ralph
  Mit Zitat antworten Zitat
Benutzerbild von Olli73
Olli73

Registriert seit: 25. Apr 2008
Ort: Neunkirchen
662 Beiträge
 
#2

AW: In HintWindowClass eigenes Form verwenden

  Alt 24. Sep 2023, 13:05
Wirklich Delphi 7?

Also bei neuerem Delphi und wenn du innerhalb der Applikation immer das gleiche Bitmap anzeigen willst, würde ich eine Class var / property machen.

Sollten es unterschiedliche Bitmaps sein, könntest du Application.OnShowHint verwenden und THintInfo.HintData nutzen:

https://docwiki.embarcadero.com/Code...wHint_(Delphi)
https://docwiki.embarcadero.com/Libr...rols.THintInfo
  Mit Zitat antworten Zitat
taaktaak

Registriert seit: 25. Okt 2007
Ort: Radbruch
1.990 Beiträge
 
Delphi 7 Professional
 
#3

AW: In HintWindowClass eigenes Form verwenden

  Alt 25. Sep 2023, 13:28
Moin, Moin,
vielen Dank für die Antwort.

Ja, ich bin ein alter Starrkopf und nutze immer noch Delphi 7

Die möglich Übergabe des anzuzeigenden Bitmps via THintInfo.HintData ist für mich kaum besser als die globale Variable zu nutzen. Ich hatte gedacht, dass es vielleicht möglich ist, wie mit einer "normalen" Klasse zu arbeiten. Aber ich lebe jetzt schon so viele Jahre mit der globalen Variable, das geht auch noch länger.

Mein "Weltbild" ist folgendes
So wie ich die Situation verstehe, wird in der "sirius-Lösung" der bereits laufenden HintWindow-Instanz einfach ein anderes Codegerüst untergeschoben. Da das gar nicht vom Nutzer (VCL?) bemerkt wird, ist natürlich ein verändertes Interface nicht nutzbar. Man müsste also die bereits laufende Instanz beenden und die neue Klasse (durch VCL?) neu starten lassen können.

Meine Vermutungen sind vermutlich entweder völlig falsch oder nur die halbe Wahrheit...
Ralph
  Mit Zitat antworten Zitat
Benutzerbild von Olli73
Olli73

Registriert seit: 25. Apr 2008
Ort: Neunkirchen
662 Beiträge
 
#4

AW: In HintWindowClass eigenes Form verwenden

  Alt 25. Sep 2023, 15:00
So wie ich das verstehe, sagst du Delphi, welche (abgeleitete) Klasse du für Hints benutzen möchtest. Delphi erzeugt dann jedes Mal, wenn ein Hint angezeigt werden soll, eine Instanz genau dieser Klasse.

Innerhalb der Instanz kannst du dann z.B. ein Bitmap zeichnen.
  Mit Zitat antworten Zitat
Benutzerbild von Gausi
Gausi

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

AW: In HintWindowClass eigenes Form verwenden

  Alt 25. Sep 2023, 15:34
Das mit dem HintData ist aber der Weg, den Windows da vorgibt. Dafür braucht man dann auch keine globalen Variablen o.ä.. Wenn der Hint angezeigt werden soll, werden über das HitInfo-Konstrukt die Daten übergeben, die die HintWindow-Klasse (bzw. die gerade erzeugt Instanz) zum Zeichnen benötigt.

Das lässt sich natürlich auch in eigene (oder fremde) Controls auslagern, so dass man nicht immer das Application-Objekt dafür heranziehen muss. Das geht dann aber afaik nicht direkt mit TForm.

Ich hab z.B. für meinen Player neulich die Hints im VirtualStringTrees ein wenig erweitert. Der VST bietet da ja ein solides Grundgerüst, um das Hintfenster komplett selbst zu malen.

Da läuft das im Prinzip so, dass in procedure CMHintShow(var Message: TCMHintShow); message CM_HINTSHOW; des VirtualStringTree die HintWindow-Klasse bestimmt wird (eben die vom VST definierte zum Selbermalen, nicht die Standard-Klasse), und dann das HintData-Konstrukt mit allen Infos gefüllt wird, die hinterher im Paint nützlich sein können - u.a. der Tree , der den Hint anzeigen soll, und dazu Infos zum Knoten, Spalte etc. pp.
Im Paint des HintWindow wird dann im Wesentlichen HintData.Tree.OnDrawHint(...) aufgerufen, so dass die Anwendung sich in dem Eventhandler um das Zeichnen des Hints kümmern kann - inkl. aller Daten, Bitmaps, sonstwas, die an dem Knoten hängen, der im HintData verknüpft ist.

Alternativ könnte man in dem OnDrawHint-Event einer eigenen Komponente natürlich auch diverse Var-Parameter mitgeben (u.a. ein Bitmap?) welche dann von der Paint-Methode des HintWindow verarbeitet und passend an eine vordefinierte Stelle gezeichnet werden.

Oder eben im OnShowHint der Application alles mitgeben, was du zum Zeichnen brauchst - das könnte ja auch ein fertiges Bitmap sein (inkl. Hinttext und allem), das das HintWindow nur noch auf sein Canvas kopiert.
Miniaturansicht angehängter Grafiken
hint.png  
The angels have the phone box.
  Mit Zitat antworten Zitat
taaktaak

Registriert seit: 25. Okt 2007
Ort: Radbruch
1.990 Beiträge
 
Delphi 7 Professional
 
#6

AW: In HintWindowClass eigenes Form verwenden

  Alt 25. Sep 2023, 16:45
Moin, Moin,
interessante Aspekte. Habe jetzt einmal den Weg ausprobiert das Bitmap über HintInfo.HintData zu übergeben. Das funktioniert und ich benötige die globale Variable nicht mehr. Da sind aber noch Macken, bin daher nicht überzeugt von diesem "offiziellen" Weg.

Gausi schreibt ...
Zitat:
Alternativ könnte man in dem OnDrawHint-Event einer eigenen Komponente natürlich auch diverse Var-Parameter mitgeben (
Das ist ja eigentlich das, was ich möchte. Aber wie sorge ich dafür, dass die neue Komponente die Aufgabe des HintWindow übernimmt?
Ralph
  Mit Zitat antworten Zitat
Benutzerbild von Gausi
Gausi

Registriert seit: 17. Jul 2005
847 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: In HintWindowClass eigenes Form verwenden

  Alt 26. Sep 2023, 18:10
Wirklich konkret kann ich da nicht werden. Schau mal in den Code von VirtualTreeView rein, wie da das Konzept läuft.
Es muss halt irgendwas geben, was der HintWindow-Klasse bekannt ist und auch der Komponente (oder Application), die dieses HintFenster benutzen soll. Beim VST ist das der VST selbst.

Evtl. klappt es, wenn man im Application.OnShowHint dem THintInfo.HintData einen Methodenzeiger mit einer passenden Signatur übergibt, der dann im Paint des Hints aufgerufen wird.
The angels have the phone box.
  Mit Zitat antworten Zitat
taaktaak

Registriert seit: 25. Okt 2007
Ort: Radbruch
1.990 Beiträge
 
Delphi 7 Professional
 
#8

AW: In HintWindowClass eigenes Form verwenden

  Alt 27. Sep 2023, 17:18
Moin, Moin,
vielen Dank für die Anregungen - 'mal schauen, was ich davon realisieren werde.
Ralph
  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 07:33 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