Findus | Jonathan (27.02.2013)
Salut, peut-être peux cela oui quelqu'un gebrauchen: une Include, avec qui on sur chaque beliebigen la fenêtre sur chaque beliebigen Bereich (relativ (0 jusqu'à 1) et absolu (Pixel)) une Tooltip erzeugen peux, sogar mehrzeilig. ici qui Include: 'TOOLTIPS EVERYWHERE - TOOLTIP-INCLUDE D' TOOLTIPS AUF JEGLICHEN FENSTER-BEREICHEN
'==================================================================================
'
'(c) 2013 Jonathan
'cet Include darf libre verwendet et modifiziert volonté. Um une Hinweis sur den
'original Autor wird gebeten, zumindest im Quellcode.
Struct TTE_lpPoint = X&, Y&
'{GLOBALE VARIABLEN
Déclarer TTE_Tooltip_hWnd&'cela Tooltip-la fenêtre
Déclarer TTE_Tooltip_text$[]'Text des Tooltips [X]
Déclarer TTE_Tooltip_grp&[]'Gruppe des Tooltips [X]
Déclarer TTE_Tooltip_tWnd&[]'la fenêtre des Tooltips [X]
Déclarer TTE_Tooltip_xpos![]'X-Position des Tooltip-Bereichs [X]
Déclarer TTE_Tooltip_ypos![]'Y-Position des Tooltip-Bereichs [X]
Déclarer TTE_Tooltip_xsz![]'X-Taille des Tooltip-Bereichs [X]
Déclarer TTE_Tooltip_ysz![]'Y-Taille des Tooltip-Bereichs [X]
Déclarer TTE_Tooltip_isRelative%[]'Relative Koordinaten pour Tooltip [X]?
Déclarer TTE_Tooltip_aktnum&'numéro des aktuell sichtbaren Tooltips
Déclarer TTE_Tooltip_aktmaxgrp&'Maximale vergebene Gruppen-ID
Déclarer TTE_DisplayFont$'Nichtproportionaler Font
Déclarer TTE_TempStr$
TTE_Tooltip_aktmaxgrp& = -1
TTE_Tooltip_aktnum& = -1
'}
'{INITIALISIEREN DES TOOLTIP-FENSTERS
Fenêtre Style 16 + 64 + 128 + 1024
TTE_Tooltip_hWnd& = @Créer("Window", %hwnd, », 0, 0, 128, 20)
@Externe(User32.dll", "SetWindowPos", TTE_Tooltip_hWnd&, ~HWND_TOPMOST, 0, 0, 0, 0, ~SWP_NOMOVE | ~SWP_NOSIZE | ~SWP_FRAMECHANGED)
Début de peinture TTE_Tooltip_hWnd&
USEP 5, 0, 0
UseBrush 1, 0
Rectangle 0, 0 - Width(TTE_Tooltip_hWnd&), Height(TTE_Tooltip_hWnd&)
EndPaint
ShowWindow(TTE_Tooltip_hWnd&, 0)
Fenêtre Style 1 + 2 + 4 + 8
'}
Proc TTE_ShowTooltip
Paramètres X&, Y&, Text$
Déclarer Tooltip_imgbuffer&, TextLines$[], maxlen&
'@ShowWindow(Tooltip_hWnd&, 8)
TextLines$[] = @Explode(Text$, "\n")
maxlen& = 1
WhileLoop 0, @SizeOf(TextLines$[]) - 1
Si @Len(TextLines$[&loop]) > maxlen&
maxlen& = @Len(TextLines$[&loop])
EndIf
Endwhile
Tooltip_imgbuffer& = @Créer("hNewPic", 8 * maxlen&, 16 * @SizeOf(TextLines$[]), 0)
Début de peinture Tooltip_imgbuffer&
WhileLoop 0, @SizeOf(TextLines$[]) - 1
UseFont TTE_displayFont$, 16, 8, 0, 0, 0
Couleur du texte @Rgb(255, 255, 255), -1
DrawText 0, 16 * &loop, TextLines$[&loop]
Endwhile
EndPaint
~SetWindowPos(TTE_Tooltip_hWnd&, ~HWND_TOPMOST, X&, Y&, @Width(Tooltip_imgbuffer&), @Height(Tooltip_imgbuffer&), ~SWP_NOACTIVATE | ~SWP_NOOWNERZORDER | ~SWP_NOZORDER | ~SWP_SHOWWINDOW)
'SetWindowPos Tooltip_hWnd& = X&, Y& - @Width(Tooltip_imgbuffer&), @Height(Tooltip_imgbuffer&)
Début de peinture TTE_Tooltip_hWnd&
DrawPic Tooltip_imgbuffer&, 0, 0; 0
EndPaint
DeleteObject Tooltip_imgbuffer&
ENDPROC
Proc TTE_HideTooltip
@ShowWindow(TTE_Tooltip_hWnd&, 0)
ENDPROC
Proc TTE_ToolTipRoutine
Déclarer MousePos#, X!, Y!, MousePosInWnd#
Faible MousePos#, TTE_lpPoint
Faible MousePosInWnd#, TTE_lpPoint
~GetCursorPos(MousePos#)
'Imprimer MousePos#.X&, MousePos#.Y&
Si TTE_Tooltip_aktnum& <> -1
MousePosInWnd# = MousePos#
~ScreenToClient(TTE_Tooltip_tWnd&[TTE_Tooltip_aktnum&], MousePosInWnd#)
Si TTE_Tooltip_isRelative%[TTE_Tooltip_aktnum&]
X! = MousePosInWnd#.X& / Width(TTE_Tooltip_tWnd&[TTE_Tooltip_aktnum&])
Y! = MousePosInWnd#.Y& / Height(TTE_Tooltip_tWnd&[TTE_Tooltip_aktnum&])
D'autre
X! = MousePosInWnd#.X&
Y! = MousePosInWnd#.Y&
EndIf
Si non @Between(X!, TTE_Tooltip_xpos![TTE_Tooltip_aktnum&], TTE_Tooltip_xpos![TTE_Tooltip_aktnum&] + TTE_Tooltip_xsz![TTE_Tooltip_aktnum&], Y!, TTE_Tooltip_ypos![TTE_Tooltip_aktnum&], TTE_Tooltip_ypos![TTE_Tooltip_aktnum&] + TTE_Tooltip_ysz![TTE_Tooltip_aktnum&]) And (@GetActiveWindow() = TTE_Tooltip_tWnd&[TTE_Tooltip_aktnum&])
TTE_Tooltip_aktnum& = -1
TTE_ToolTipRoutine
D'autre
TTE_ShowTooltip MousePos#.X& + 20, MousePos#.Y& + 20, TTE_Tooltip_text$[TTE_Tooltip_aktnum&]
'@SetActiveWindow(Tooltip_tWnd&[&loop])
EndIf
D'autre
WhileLoop 0, @SizeOf(TTE_Tooltip_text$[]) - 1
Si (TTE_Tooltip_text$[&loop] <> ») And (@GetActiveWindow() = TTE_Tooltip_tWnd&[&loop]) And (TTE_Tooltip_tWnd&[&loop] <> -1)
MousePosInWnd# = MousePos#
~ScreenToClient(TTE_Tooltip_tWnd&[&loop], MousePosInWnd#)
Si TTE_Tooltip_isRelative%[&loop]
X! = MousePosInWnd#.X& / Width(TTE_Tooltip_tWnd&[&loop])
Y! = MousePosInWnd#.Y& / Height(TTE_Tooltip_tWnd&[&loop])
D'autre
X! = MousePosInWnd#.X&
Y! = MousePosInWnd#.Y&
EndIf
Si @Between(X!, TTE_Tooltip_xpos![&loop], TTE_Tooltip_xpos![&loop] + TTE_Tooltip_xsz![&loop], Y!, TTE_Tooltip_ypos![&loop], TTE_Tooltip_ypos![&loop] + TTE_Tooltip_ysz![&loop])
TTE_Tooltip_aktnum& = &loop
'@MessageBox(@Str$(Tooltip_aktnum&), », 0)
BREAK
EndIf
EndIf
'@MessageBox(@Str$(Tooltip_aktnum&), », 0)
Endwhile
Si TTE_Tooltip_aktnum& = -1
TTE_HideTooltip
EndIf
EndIf
Dispose MousePos#
Dispose MousePosInWnd#
ENDPROC
Proc TTE_RegisterTooltip
Paramètres tWnd&, X!, Y!, SZX!, SZY!, isRelative%, Group&, Text$
Déclarer freePos&
freePos& = -1
WhileLoop 0, @SizeOf(TTE_Tooltip_text$[]) - 1
Si (TTE_Tooltip_text$[&loop] = ») And (TTE_Tooltip_tWnd&[&loop] = -1)
freePos& = &loop
BREAK
EndIf
Endwhile
Si freePos& = -1
freePos& = @SizeOf(TTE_Tooltip_tWnd&[])
EndIf
'@MessageBox(@Str$(freePos&), », 0)
TTE_Tooltip_tWnd&[freePos&] = tWnd&
TTE_Tooltip_xpos![freePos&] = X!
TTE_Tooltip_ypos![freePos&] = Y!
TTE_Tooltip_xsz![freePos&] = SZX!
TTE_Tooltip_ysz![freePos&] = SZY!
TTE_Tooltip_isRelative%[freePos&] = isRelative%
TTE_Tooltip_grp&[freePos&] = Group&
TTE_Tooltip_text$[freePos&] = Text$
'@MessageBox(@Str$(X!) + " " + @Str$(Y!) + " - " + @Str$(SZX!) + " " + @Str$(SZY!) + " = " + Text$, », 0)
Retour freePos&
ENDPROC
Proc TTE_UnregisterTooltip
Paramètres Num&, Grp&
Si Num& <> -1
TTE_Tooltip_text$[Num&] = »
TTE_Tooltip_tWnd&[Num&] = -1
D'autre
WhileLoop 0, @SizeOf(TTE_Tooltip_tWnd&[]) - 1
Si TTE_Tooltip_grp&[&loop] = Grp&
TTE_Tooltip_text$[&loop] = »
TTE_Tooltip_tWnd&[&loop] = -1
EndIf
Endwhile
EndIf
ENDPROC
Proc TTE_GetNewTooltipGroupID
Inc TTE_Tooltip_aktmaxgrp&
Retour TTE_Tooltip_aktmaxgrp&
ENDPROC
Proc TTE_SetTooltipFont
Paramètres F$
TTE_DisplayFont$ = F$
ENDPROC
Proc TTE_destroyWnd
@DestroyWindow(TTE_Tooltip_hWnd&)
ENDPROC
et ici un kleines Beispiel-Programme: $H Windows.ph
$I TooltipsEverywhere.Inc
CLS
TTE_SetTooltipFont "Consolas"
TTE_RegisterTooltip %hwnd, 0, 0, .5, .5, 1, -1, "Links oben"
TTE_RegisterTooltip %hwnd, .5, 0, .5, .5, 1, -1, "Rechts oben"
TTE_RegisterTooltip %hwnd, 0, .5, .5, .5, 1, -1, "Links unten"
TTE_RegisterTooltip %hwnd, .5, .5, .5, .5, 1, -1, "Rechts unten"
Utilisateur Messages 16
WhileNot %umessage = 16
WaitInput 10
TTE_ToolTipRoutine
Endwhile
TTE_destroyWnd
Hat on einmal une Tooltip erstellt, wird cette automatisch angezeigt et ausgeblendet. chez relativen Koordinaten wird qui Tooltip chez einer Changement qui Fenstergröße automatisch récente positionné. on braucht sich alors pas plus tout autor trop kümmern. TTE_ToolTipRoutine Muss simple régulier (z.B. dans 20msec-Abständen) aufgerufen volonté. cet Routine prüft, quel Tooltip aktiv ist, zeichnet ihn usw. TTE_RegisterTooltip tWnd, X, Y, SZX, SZY, isRelative, Group, Text Erstellt une Tooltip sur la fenêtre tWnd à Position X, Y avec Taille SZX, SZY. si isRelative = 1, volonté qui Koordinaten comme Relativ angesehen, sodass on là anstatt Pixeln Werte entre 0 et 1 eingibt. 1 bedeutet "volle Breite/Hauteur des Fensters", entre 0 et 1 sommes beliebige Abstufungen possible. chez "Group" peux on une Gruppen-ID angeben, um plusieurs Tooltips trop einer Gruppe zusammenzufassen. si on aucun Gruppe veux, peux on -1 angeben. Text ist qui Tooltip-Text, y sommes Zeilenumbrüche avec \n possible. Returnwert: Handle des erstellten Tooltips. TTE_UnregisterTooltip H, Group Löscht den Tooltip avec dem Handle H. Ist H = -1, volonté alle Tooltips qui Gruppe avec qui ID Group gelöscht. TTE_GetNewTooltipGroupID Erzeugt une neue Gruppen-ID, qui zum Zusammenfassen de Tooltips genutzt volonté peux. Returnwert: Gruppen-ID TTE_SetTooltipFont S mets qui Schriftart, qui pour Tooltips verwendet volonté soll. Muss avant qui ersten Ausführung de TTE_ToolTipRoutine eingestellt volonté! TTE_destroyWnd Zerstört cela Tooltip-la fenêtre. Muss chez finissons des Programms fonctionnement volonté, après darf TTE_ToolTipRoutine pas plus fonctionnement volonté! qui Include muss am Anfang des Programms eingebunden volonté. Aussi nécessaire vous Windows.ph. Salut Jonathan |
|