Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

Tooltip-Text am Mauszeiger anzeigen

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Windows-spezifische Fragen
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
ffhex



Anmeldungsdatum: 24.02.2012
Beiträge: 11
Wohnort: Jena

BeitragVerfasst am: 26.03.2012, 10:32    Titel: Tooltip-Text am Mauszeiger anzeigen Antworten mit Zitat

Hallo Forum,
...ich komme nicht weiter bei der Frage:
Wie kann ich einen Tooltip-Text am Mauszeiger anzeigen lassen?

Beispiel:
Der Text "Bitte klick mich!" soll angezeigt werden, wenn sich der Mauszeiger über dem Command-Button befindet.
Im FireFly gibt es da das Mousemove-Event. Doch wie zeige ich den Tooltip-Text an?

Code:

Function FORM1_COMMAND1_WM_MOUSEMOVE ( _
                                     ControlIndex  As Integer,  _  ' index in Control Array
                                     hWndForm      As hWnd, _      ' handle of Form
                                     hWndControl   As hWnd, _      ' handle of Control
                                     MouseFlags    As Integer,  _  ' virtual keys that are pressed
                                     xPos          As Integer,  _  ' x-coordinate of cursor
                                     yPos          As Integer   _  ' y-coordinate of cursor
                                     ) As Integer
'jetzt Tooltip-Text am Mauszeiger anzeigen
'????
End Function


Viele Grüsse und vielen Dank für eine Antwort!
FFhex.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
MOD
Fleißiger Referenzredakteur


Anmeldungsdatum: 10.09.2007
Beiträge: 1003

BeitragVerfasst am: 26.03.2012, 18:24    Titel: Antworten mit Zitat

Ich mag mich irren, aber ich glaube, dass es hier nicht viele/keine FireFly-Nutzer gibt. Du kommst bestimmt schneller im englischen Forum zu einer Antwort.
Ich kann aber auch falsch liegen und jemand kann dir hier auch weiterhelfen.

Hab FireFly selbst nur einmal verwendet und es hat mir nicht sonderlich gefallen, weswegen ich davon abgekommen bin.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
ffhex



Anmeldungsdatum: 24.02.2012
Beiträge: 11
Wohnort: Jena

BeitragVerfasst am: 26.03.2012, 18:57    Titel: Antworten mit Zitat

Hallo MOD,
ist das nicht primär eine Frage von Windows-API Funktionen, welche FireFly letztlich auch benutzt?
Wie würde man das Problem denn z.B. mit FBEdit oder anderen IDE's lösen?
FFhex.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
volta



Anmeldungsdatum: 04.05.2005
Beiträge: 1874
Wohnort: D59192

BeitragVerfasst am: 27.03.2012, 09:19    Titel: Antworten mit Zitat

Hi,
der Tooltip ist, soweit ich das kenne, an den Button oder anderes Feld angebunden.
Wenn der Mauszeiger dieses Teil berührt wird der Tip angezeigt.
Der Tooltip muß also nur initialisiert werden. Dafür braucht man das Handle des Button (des Teils) und den Hilfetext.
Hier ist eine Routine dafür:
Code:
#Include "windows.bi"
#Include "win/commctrl.bi"

......

Sub ToolTip(item As HWND, Tip As String)
  Dim ti As TOOLINFO
  Var hWndTip = CreateWindow(TOOLTIPS_CLASS, 0 _
  ,WS_POPUP Or TTS_NOPREFIX Or TTS_ALWAYSTIP _'Or TTS_BALLOON _
  ,0, 0, 0, 0, item, 0, GetModuleHandle(0), 0)
  If hWndTip <> 0 Then
    ti.cbSize = SizeOf(ti)
    ti.uFlags = TTF_CENTERTIP Or TTF_TRANSPARENT Or TTF_SUBCLASS
    ti.hwnd = item
    ti.lpszText = StrPtr(Tip)
    GetClientRect(item, @ti.rect)
    SendMessage(hWndTip, TTM_ADDTOOL, 1, CInt(@ti))
  EndIf
End Sub

......
 
ToolTip hwnd, "das ist ein Tip!!!!"

Wenn der Hilfetext in Form eines Ballons erscheinen soll, muß TTS_BALLOON zu den Eigenschaften ver_OR_t werden.
_________________
Warnung an Choleriker:
Dieser Beitrag kann Spuren von Ironie & Sarkasmus enthalten.
Zu Risiken & Nebenwirkungen fragen Sie Ihren Therapeuten oder Psychiater.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
ffhex



Anmeldungsdatum: 24.02.2012
Beiträge: 11
Wohnort: Jena

BeitragVerfasst am: 27.03.2012, 10:20    Titel: Antworten mit Zitat

Hallo Volta,
vielen Dank für den excellenten Code! Das funktioniert Bestens!
Mein Ziel war es, mit einem Image-Button einen Internet-Link zu erzeugen.
Hier der komplette Code (für FireFly3):

Code:

#Include Once "windows.bi"
#Include Once "win/shellapi.bi"

Function FORM1_IMAGEBUTTON1_BN_CLICKED ( _
                                       ControlIndex     As Integer, _   ' index in Control Array
                                       hWndForm         As hWnd, _      ' handle of Form
                                       hWndControl      As hWnd, _      ' handle of Control
                                       idButtonControl  As Integer   _  ' identifier of button
                                       ) As Integer
   'Webseite aufrufen
   Dim dummy As HINSTANCE
   dummy = ShellExecute(0, "open", "http://www.meineSeite.de", "", "", SW_SHOWNORMAL)
End Function

Function FORM1_IMAGEBUTTON1_WM_MOUSEMOVE ( _
                                     ControlIndex  As Integer,  _  ' index in Control Array
                                     hWndForm      As hWnd, _      ' handle of Form
                                     hWndControl   As hWnd, _      ' handle of Control
                                     MouseFlags    As Integer,  _  ' virtual keys that are pressed
                                     xPos          As Integer,  _  ' x-coordinate of cursor
                                     yPos          As Integer   _  ' y-coordinate of cursor
                                     ) As Integer
        'Cursor als "Hand" darstellen
        SetCursor(LoadCursor(Null,IDC_HAND))
End Function

Function FORM1_IMAGEBUTTON1_BN_SETFOCUS ( _
                                        ControlIndex     As Integer, _   ' index in Control Array
                                        hWndForm         As hWnd, _      ' handle of Form
                                        hWndControl      As hWnd, _      ' handle of Control
                                        idButtonControl  As Integer   _  ' identifier of button
                                        ) As Integer
        'ToolTip anzeigen
        ToolTip hWndControl, "www.meineSeite.de"
End Function


Viele Grüsse!
FFhex.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
MOD
Fleißiger Referenzredakteur


Anmeldungsdatum: 10.09.2007
Beiträge: 1003

BeitragVerfasst am: 27.03.2012, 16:45    Titel: Antworten mit Zitat

Zitat:
ist das nicht primär eine Frage von Windows-API Funktionen

Du hast natürlich Recht, sry.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
ffhex



Anmeldungsdatum: 24.02.2012
Beiträge: 11
Wohnort: Jena

BeitragVerfasst am: 28.03.2012, 09:35    Titel: Antworten mit Zitat

Hallo,
...hier noch ein Nachtrag:
Noch besser macht sich der ToolTip (beim FireFly) im WM_PAINT - Ereignis (FORM1_IMAGEBUTTON1_WM_PAINT), da beim 'BN_SETFOCUS' der ToolTip nur dann angezeigt wird, wenn der Focus auch auf dem Control liegt.
Mfg.
FFhex.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
volta



Anmeldungsdatum: 04.05.2005
Beiträge: 1874
Wohnort: D59192

BeitragVerfasst am: 28.03.2012, 11:50    Titel: Antworten mit Zitat

Hi ffhex,
ich kenn mich mit FireFly nicht aus aber die Initialisierung des Tooltip gehört bestimmt nicht in die WM_PAINT - Routine.
WM_PAINT wird beim verschieben, verändern des Fensters ausgeführt.
Jedesmal wird dann auch das Fenster des Tooltips erneut initialisiert?
Meiner Meinung nach gehört der Aufruf des Tooltips in den WM_INITDIALOG Bereich.
_________________
Warnung an Choleriker:
Dieser Beitrag kann Spuren von Ironie & Sarkasmus enthalten.
Zu Risiken & Nebenwirkungen fragen Sie Ihren Therapeuten oder Psychiater.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
ffhex



Anmeldungsdatum: 24.02.2012
Beiträge: 11
Wohnort: Jena

BeitragVerfasst am: 28.03.2012, 12:40    Titel: Antworten mit Zitat

Hi Volta,
Du hast Recht, jetzt wo ich mir die Beschreibung von WM_PAINT genauer angesehen habe.....
Um so erstaunlicher ist, dass das Bestens beim FireFly funktioniert!
(Ich hatte dort einige Events ausprobiert.)
WM_MOUSEMOVE zeigt Cursor:hand
WM_PAINT zeigt ToolTip
(getestet unter : Win-XP, Win7 32/64)

Den WM_INITDIALOG gibt es beim FireFly explizit nicht.
Beim ImageButton kann man folgendes auswählen:
BN_CLICKED
BN_KILLFOCUS
BN_SETFOCUS
WM_CONTEXTMENU
WM_DESTROY
WM_LBUTTONDOWN
WM_LBUTTONUP
WM_MOUSEMOVE
WM_PAINT
WM_RBUTTONDOWN
WM_RBUTTONUP
CUSTOM

Der letzte Punkt (CUSTOM) ist für mich z.Zt. noch ein Buch mit sieben Siegeln...
Mfg.
FFhex.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
RWK



Anmeldungsdatum: 04.07.2011
Beiträge: 44

BeitragVerfasst am: 29.03.2012, 10:09    Titel: Antworten mit Zitat

Hi,

und genau diese Buch benutzt Du wenn Du auf irgendein Signal für das entsprechende Control reagieren willst.

Für den ToolTip - Fall z.B. :

Code:
 
Function FRMMAIN_CMDCHECK_CUSTOM ( _
                                 ControlIndex  As Integer,  _  ' index in Control Array
                                 hWndForm      As HWND, _      ' handle of Form
                                 hWndControl   As HWND, _      ' handle of Control
                                 wMsg          As Integer,  _  ' type of message
                                 wParam        As WPARAM, _    ' first message parameter
                                 lParam        As LPARAM   _   ' second message parameter
                                 ) As Integer
 
  Select Case wMsg
    Case WM_SETFONT 'das nehm ich, weils das erste Event ist was ankommt geht auch : WM_CHILDACTIVATE etc.
        Dim ti As TOOLINFO
        Dim Tip As String = "DrückMich"
        Var hWndTip = CreateWindow(TOOLTIPS_CLASS, 0,WS_POPUP Or TTS_NOPREFIX Or TTS_ALWAYSTIP ,0, 0, 0, 0, hWndControl, 0, GetModuleHandle(0), 0)
        If hWndTip <> 0 Then
            ti.cbSize = SizeOf(ti)
            ti.uFlags = TTF_CENTERTIP Or TTF_TRANSPARENT Or TTF_SUBCLASS
            ti.hwnd = hWndControl
            ti.lpszText = StrPtr(Tip)
            GetClientRect(hwndControl, @ti.Rect)
        SendMessage(hWndTip, TTM_ADDTOOL, 1, CInt(@ti))
        EndIf
   End Select
Function = False
End Function


Grüße
Rainer
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
ffhex



Anmeldungsdatum: 24.02.2012
Beiträge: 11
Wohnort: Jena

BeitragVerfasst am: 29.03.2012, 13:28    Titel: Antworten mit Zitat

Hallo RWK,
danke für den Code. Das funzt prima!
Jetzt habe ich gelernt, wie man auf ein Ereignis im Custom-Zweig reagieren kann.

Du schreibst:
RWK hat Folgendes geschrieben:
WM_SETFONT 'das nehm ich, weils das erste Event ist was ankommt geht auch : WM_CHILDACTIVATE etc.


... aber wo genau kann ich mal so etwas nachlesen?
In der normalen WIN-API.hlp finde ich da keine Zusammenhänge.
Hat jemand einen Tip für eine gute API-Doku, die Hintergründe und Zusammenhänge erklärt?
Mfg.
FFhex.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
RWK



Anmeldungsdatum: 04.07.2011
Beiträge: 44

BeitragVerfasst am: 29.03.2012, 14:33    Titel: Antworten mit Zitat

Hmmm.... also bei Microsoft in der MSDN gibt es bestimmt eine Auflistung.


Ich gucke meistens in /Freebasic/inc/win/xxx.bi nach

winuser.bi
commctrl.bi

wenn ich was winApi maessiges suche.

in diesem Fall bin ich einfach hergegangen und habe mir die ankommenden Events mit ausgeben lassen : Print wMsg

dann hab ich mir in der WinUser.bi halt ein passende Pseudonym rausgesucht lächeln

Grüße
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
ffhex



Anmeldungsdatum: 24.02.2012
Beiträge: 11
Wohnort: Jena

BeitragVerfasst am: 29.03.2012, 19:08    Titel: Antworten mit Zitat

Hallo RWK,
jetzt konnte ich das nachvollziehen.
Mit der Compileroption: -exx sieht man alle Events im Consolenfenster.
Das hat mir sehr geholfen. Vielen DANK!
Mfg.
FFhex.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Windows-spezifische Fragen Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.

 Impressum :: Datenschutz