|
Das deutsche QBasic- und FreeBASIC-Forum Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
ffhex
Anmeldungsdatum: 24.02.2012 Beiträge: 11 Wohnort: Jena
|
Verfasst am: 26.03.2012, 11:32 Titel: Tooltip-Text am Mauszeiger anzeigen |
|
|
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 |
|
|
MOD Fleißiger Referenzredakteur
Anmeldungsdatum: 10.09.2007 Beiträge: 1003
|
Verfasst am: 26.03.2012, 19:24 Titel: |
|
|
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 |
|
|
ffhex
Anmeldungsdatum: 24.02.2012 Beiträge: 11 Wohnort: Jena
|
Verfasst am: 26.03.2012, 19:57 Titel: |
|
|
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 |
|
|
volta
Anmeldungsdatum: 04.05.2005 Beiträge: 1875 Wohnort: D59192
|
Verfasst am: 27.03.2012, 10:19 Titel: |
|
|
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 |
|
|
ffhex
Anmeldungsdatum: 24.02.2012 Beiträge: 11 Wohnort: Jena
|
Verfasst am: 27.03.2012, 11:20 Titel: |
|
|
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 |
|
|
MOD Fleißiger Referenzredakteur
Anmeldungsdatum: 10.09.2007 Beiträge: 1003
|
Verfasst am: 27.03.2012, 17:45 Titel: |
|
|
Zitat: | ist das nicht primär eine Frage von Windows-API Funktionen |
Du hast natürlich Recht, sry. |
|
Nach oben |
|
|
ffhex
Anmeldungsdatum: 24.02.2012 Beiträge: 11 Wohnort: Jena
|
Verfasst am: 28.03.2012, 10:35 Titel: |
|
|
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 |
|
|
volta
Anmeldungsdatum: 04.05.2005 Beiträge: 1875 Wohnort: D59192
|
Verfasst am: 28.03.2012, 12:50 Titel: |
|
|
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 |
|
|
ffhex
Anmeldungsdatum: 24.02.2012 Beiträge: 11 Wohnort: Jena
|
Verfasst am: 28.03.2012, 13:40 Titel: |
|
|
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 |
|
|
RWK
Anmeldungsdatum: 04.07.2011 Beiträge: 44
|
Verfasst am: 29.03.2012, 11:09 Titel: |
|
|
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 |
|
|
ffhex
Anmeldungsdatum: 24.02.2012 Beiträge: 11 Wohnort: Jena
|
Verfasst am: 29.03.2012, 14:28 Titel: |
|
|
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 |
|
|
RWK
Anmeldungsdatum: 04.07.2011 Beiträge: 44
|
Verfasst am: 29.03.2012, 15:33 Titel: |
|
|
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
Grüße |
|
Nach oben |
|
|
ffhex
Anmeldungsdatum: 24.02.2012 Beiträge: 11 Wohnort: Jena
|
Verfasst am: 29.03.2012, 20:08 Titel: |
|
|
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 |
|
|
|
|
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.
|
|