Control-unabhängigen Hint anzeigen
-
Hallo,
ich habe eine von
TWinControl
abgeleitete Komponente, auf der ich in Abhängigkeit der Mausposition einen Hint anzeigen möchte. Leider unterstütztTWinControl
von sich aus keine Hints, sodass ich mich selbst darum kümmern muss.
Gibt es eine Möglichkeit, mit VCL Standardmitteln einen Hint anzuzeigen?
Ich möchte jetzt nichts mit Timern und nicht-modalen Fenster basteln.Edit:
Ich habe Folgendes schon probiert, leider ohne ErfolgApplication->CancelHint(); Application->Hint = "Test-Text"; Application->ShowHint = true; Application->ActivateHint( Mouse->CursorPos );
-
Du könntest mal Application->OnShowHint ausprobieren.
In der Ereignismethode teste ich dann immer mittels
TControl *pCtrl = HintInfo.HintControl; if(pCtrl->ClassNameIs("TMyWinControl")) // <-- hier dein Controlnamen eintragen { if(IsPointInRect(HintInfo.CursorPos, HintRect)) { // ... } }
-
Danke für deine Antwort, Th69, dein Beispiel hat mich veranlasst, noch mal in die Hilfe zu gucken und dabei die Lösung zu finden.
Ich bin (manchmal) so doof, dass mich die Schweine beißen...
Nur weil der Codeinspector keinen Vorschlag für Hint gemacht hat und ich nicht die vollständige Hilfe für
TWinControl
gelesen habe war ich der Meinung, dassTWinControl
keine Hints unterstützt. Wenn man aber in der Hilfe zuTWinControl
ganz nach unten scrollt steht da unter den __published EigenschaftenHint
.
Lange Rede, kurzer Sinn: Hab´s mit Bordmitteln hinbekommen.
-
Ja, das wollte ich dir auch erst schreiben (also daß Hint schon in der Basisklasse TControl deklariert ist).
Jedoch hast du jaDocShoe schrieb:
... auf der ich in Abhängigkeit der Mausposition einen Hint anzeigen möchte.
geschrieben, so daß ich davon ausgegangen bin, daß du noch bestimmte Berechnungen anstellen möchtest, ob und wie der Hint-Text angezeigt wird (und dann würde dir ja der statische Hint-Text nicht reichen).
-
Epilog:
Th69 schrieb:
if(pCtrl->ClassNameIs("TMyWinControl")) // <-- hier dein Controlnamen eintragen
if (pCtrl->ClassType() == __classid(TMyWinControl)) // <-- hier dein Control eintragen
Oder noch besser:
if (dynamic_cast<TMyWinControl*> (pCtrl) != 0) // <-- hier dein Control eintragen
-
Th69 schrieb:
Ja, das wollte ich dir auch erst schreiben (also daß Hint schon in der Basisklasse TControl deklariert ist).
Jedoch hast du jaDocShoe schrieb:
... auf der ich in Abhängigkeit der Mausposition einen Hint anzeigen möchte.
geschrieben, so daß ich davon ausgegangen bin, daß du noch bestimmte Berechnungen anstellen möchtest, ob und wie der Hint-Text angezeigt wird (und dann würde dir ja der statische Hint-Text nicht reichen).
Ja, das ist auch so richtig. Ich habe einen Callback auf dem OnMouseMove Event, in dem ich die Hinteigenschaften in Abhängigkeit der Mausposition einstelle:
void __fastcall TMyForm::OnMouseMove( TObject* Sender, TShiftState ShiftState, int X, int Y ) { ShowHint = check_something( X,Y ); if( ShowHint ) Hint = "Criteria met!"; else Hint = ""; }