Findus | Jonathan (27.02.2013)
¡Hola, Tal vez puede sí alguien gebrauchen: Un Incluir, con el uno en cada beliebigen Ventana encima cada beliebigen Zona (relativ (0 a 1) y absolut (Pixel)) una Tooltip erzeugen kann, incluso mehrzeilig. Hier Incluya el: 'TOOLTIPS EVERYWHERE - TOOLTIP-INCLUDE FÜR TOOLTIPS AUF JEGLICHEN FENSTER-BEREICHEN
'==================================================================================
'
'(c) 2013 Jonathan
'Diese Incluir darf frei verwendet y modifiziert voluntad. Um una Referencia en el
'ursprünglichen Autor se gebeten, zumindest en el Quellcode.
Struct TTE_lpPoint = X&, Y&
'{GLOBALE VARIABLEN
Declarar TTE_Tooltip_hWnd&'Das Tooltip-Ventana
Declarar TTE_Tooltip_text$[]'Texto des Tooltips [X]
Declarar TTE_Tooltip_grp&[]'Gruppe des Tooltips [X]
Declarar TTE_Tooltip_tWnd&[]'Ventana des Tooltips [X]
Declarar TTE_Tooltip_xpos![]'X-Position des Tooltip-Bereichs [X]
Declarar TTE_Tooltip_ypos![]'Y-Position des Tooltip-Bereichs [X]
Declarar TTE_Tooltip_xsz![]'X-Größe des Tooltip-Bereichs [X]
Declarar TTE_Tooltip_ysz![]'Y-Größe des Tooltip-Bereichs [X]
Declarar TTE_Tooltip_isRelative%[]'Relative Koordinaten para Tooltip [X]?
Declarar TTE_Tooltip_aktnum&'Nummer des aktuell sichtbaren Tooltips
Declarar TTE_Tooltip_aktmaxgrp&'Maximale vergebene Gruppen-ID
Declarar TTE_DisplayFont$'Nichtproportionaler Font
Declarar TTE_TempStr$
TTE_Tooltip_aktmaxgrp& = -1
TTE_Tooltip_aktnum& = -1
'}
'{INITIALISIEREN DES TOOLTIP-FENSTERS
Ventana de Estilo 16 + 64 + 128 + 1024
TTE_Tooltip_hWnd& = @Crear("Window", %hwnd, "", 0, 0, 128, 20)
@Externo("User32.dll", "SetWindowPos", TTE_Tooltip_hWnd&, ~HWND_TOPMOST, 0, 0, 0, 0, ~SWP_NOMOVE | ~SWP_NOSIZE | ~SWP_FRAMECHANGED)
StartPaint TTE_Tooltip_hWnd&
USEP 5, 0, 0
UseBrush 1, 0
Rectángulo 0, 0 - Width(TTE_Tooltip_hWnd&), Height(TTE_Tooltip_hWnd&)
EndPaint
ShowWindow(TTE_Tooltip_hWnd&, 0)
Ventana de Estilo 1 + 2 + 4 + 8
'}
Proc TTE_ShowTooltip
Parámetros X&, Y&, Texto$
Declarar Tooltip_imgbuffer&, TextLines$[], maxlen&
'@ShowWindow(Tooltip_hWnd&, 8)
TextLines$[] = @Explode(Texto$, "\n")
maxlen& = 1
WhileLoop 0, @SizeOf(TextLines$[]) - 1
If @Len(TextLines$[&bucle]) > maxlen&
maxlen& = @Len(TextLines$[&bucle])
EndIf
EndWhile
Tooltip_imgbuffer& = @Crear("hNewPic", 8 * maxlen&, 16 * @SizeOf(TextLines$[]), 0)
StartPaint Tooltip_imgbuffer&
WhileLoop 0, @SizeOf(TextLines$[]) - 1
UseFont TTE_displayFont$, 16, 8, 0, 0, 0
Color del texto @Rgb(255, 255, 255), -1
DrawText 0, 16 * &bucle, TextLines$[&bucle]
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&)
StartPaint 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
Declarar MousePos#, X!, Y!, MousePosInWnd#
Dim MousePos#, TTE_lpPoint
Dim MousePosInWnd#, TTE_lpPoint
~GetCursorPos(MousePos#)
'Imprimir MousePos#.X&, MousePos#.Y&
If TTE_Tooltip_aktnum& <> -1
MousePosInWnd# = MousePos#
~ScreenToClient(TTE_Tooltip_tWnd&[TTE_Tooltip_aktnum&], MousePosInWnd#)
If 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&])
Más
X! = MousePosInWnd#.X&
Y! = MousePosInWnd#.Y&
EndIf
Caso negativo @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
Más
TTE_ShowTooltip MousePos#.X& + 20, MousePos#.Y& + 20, TTE_Tooltip_text$[TTE_Tooltip_aktnum&]
'@SetActiveWindow(Tooltip_tWnd&[&loop])
EndIf
Más
WhileLoop 0, @SizeOf(TTE_Tooltip_text$[]) - 1
If (TTE_Tooltip_text$[&bucle] <> "") And (@GetActiveWindow() = TTE_Tooltip_tWnd&[&bucle]) And (TTE_Tooltip_tWnd&[&bucle] <> -1)
MousePosInWnd# = MousePos#
~ScreenToClient(TTE_Tooltip_tWnd&[&bucle], MousePosInWnd#)
If TTE_Tooltip_isRelative%[&bucle]
X! = MousePosInWnd#.X& / Width(TTE_Tooltip_tWnd&[&bucle])
Y! = MousePosInWnd#.Y& / Height(TTE_Tooltip_tWnd&[&bucle])
Más
X! = MousePosInWnd#.X&
Y! = MousePosInWnd#.Y&
EndIf
If @Between(X!, TTE_Tooltip_xpos![&bucle], TTE_Tooltip_xpos![&bucle] + TTE_Tooltip_xsz![&bucle], Y!, TTE_Tooltip_ypos![&bucle], TTE_Tooltip_ypos![&bucle] + TTE_Tooltip_ysz![&bucle])
TTE_Tooltip_aktnum& = &bucle
'@MessageBox(@Str$(Tooltip_aktnum&), "", 0)
BREAK
EndIf
EndIf
'@MessageBox(@Str$(Tooltip_aktnum&), "", 0)
EndWhile
If TTE_Tooltip_aktnum& = -1
TTE_HideTooltip
EndIf
EndIf
Disponer MousePos#
Disponer MousePosInWnd#
ENDPROC
Proc TTE_RegisterTooltip
Parámetros tWnd&, X!, Y!, SZX!, SZY!, isRelative%, Group&, Texto$
Declarar freePos&
freePos& = -1
WhileLoop 0, @SizeOf(TTE_Tooltip_text$[]) - 1
If (TTE_Tooltip_text$[&bucle] = "") And (TTE_Tooltip_tWnd&[&bucle] = -1)
freePos& = &bucle
BREAK
EndIf
EndWhile
If 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&] = Texto$
'@MessageBox(@Str$(X!) + " " + @Str$(Y!) + " - " + @Str$(SZX!) + " " + @Str$(SZY!) + " = " + Texto$, "", 0)
Volver freePos&
ENDPROC
Proc TTE_UnregisterTooltip
Parámetros Num&, Grp&
If Num& <> -1
TTE_Tooltip_text$[Num&] = ""
TTE_Tooltip_tWnd&[Num&] = -1
Más
WhileLoop 0, @SizeOf(TTE_Tooltip_tWnd&[]) - 1
If TTE_Tooltip_grp&[&bucle] = Grp&
TTE_Tooltip_text$[&bucle] = ""
TTE_Tooltip_tWnd&[&bucle] = -1
EndIf
EndWhile
EndIf
ENDPROC
Proc TTE_GetNewTooltipGroupID
Inc TTE_Tooltip_aktmaxgrp&
Volver TTE_Tooltip_aktmaxgrp&
ENDPROC
Proc TTE_SetTooltipFont
Parámetros F$
TTE_DisplayFont$ = F$
ENDPROC
Proc TTE_destroyWnd
@DestroyWindow(TTE_Tooltip_hWnd&)
ENDPROC
Und hier una kleines Ejemplo-Programa: $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"
Mensajes del usuario 16
Sinestar encargado %umessage = 16
WaitInput 10
TTE_ToolTipRoutine
EndWhile
TTE_destroyWnd
Sombrero uno una vez una Tooltip erstellt, se dieser automáticamente adecuado y ausgeblendet. En relativen Koordinaten se el Tooltip en uno Änderung el Fenstergröße automáticamente neu positioniert. Man braucht se also no mehr por lo tanto a kümmern. TTE_ToolTipRoutine Muss simplemente regelmäßig (z.B. en 20msec-Abständen) aufgerufen voluntad. Diese Rutina prüft, welcher Tooltip aktiv es, características ihn usw. TTE_RegisterTooltip tWnd, X, Y, SZX, SZY, isRelative, Group, Texto Erstellt una Tooltip en Ventana tWnd a Position X, Y con Größe SZX, SZY. Wenn isRelative = 1, voluntad el Koordinaten como Relativ angesehen, sodass uno hay anstatt Pixeln Werte zwischen 0 y 1 eingibt. 1 bedeutet "volle Breite/Höhe des Fensters", zwischen 0 y 1 son beliebige Abstufungen posible. En "Group" puede ser una Gruppen-ID angeben, en mehrere Tooltips a uno Gruppe zusammenzufassen. Wenn uno no Gruppe voluntad, puede ser -1 angeben. Texto es el Tooltip-Texto, en él son Zeilenumbrüche con \n posible. Returnwert: Handle des erstellten Tooltips. TTE_UnregisterTooltip H, Group Löscht el Tooltip con el Handle H. Ist H = -1, voluntad todos Tooltips el Gruppe con el ID Group gelöscht. TTE_GetNewTooltipGroupID Erzeugt una neue Gruppen-ID, el para Zusammenfassen de Tooltips genutzt voluntad kann. Returnwert: Gruppen-ID TTE_SetTooltipFont S Setzt el Schriftart, el para Tooltips verwendet voluntad se. Muss antes ersten Ausführung de TTE_ToolTipRoutine eingestellt voluntad! TTE_destroyWnd Zerstört el Tooltip-Ventana. Muss en Beenden des Programms ausgeführt voluntad, danach darf TTE_ToolTipRoutine no mehr ausgeführt voluntad! El Incluir muss al Anfang des Programms eingebunden voluntad. Außerdem benötigt ellos Windows.ph. Saludo Jonathan |
|