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ützt TWinControl 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 Erfolg

    Application->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, dass TWinControl keine Hints unterstützt. Wenn man aber in der Hilfe zu TWinControl ganz nach unten scrollt steht da unter den __published Eigenschaften Hint .
    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 ja

    DocShoe 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 ja

    DocShoe 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 = "";
    }
    

Anmelden zum Antworten