Moin,
die Funktion von GadgetToolTip kann sehr hilfreich sein, leider gibt er den Text ungebrochen in einer Zeile aus.
Gibt es eine Möglichkeit den Text in mehrere Zeilen umzubrechen ?
Oder gibt es einen ähnlichen Befehl der einen Textblock anzeigt, sowie in Excel die Notizzettel?
Danke
DeKa
[gelöst]GadgetToolTip
[gelöst]GadgetToolTip
Zuletzt geändert von DeKa am 25.06.2014 16:36, insgesamt 1-mal geändert.
Re: GadgetToolTip
Das GadgetToolTip() von PB unterstützt leider keine mehrzeiligen Tooltips.
WinAPI-Lösungen:
ToolTip mit Zeilenumbruch
ToolTip mit Icon, Titel und Zeilenumbruch
WinAPI-Lösungen:
ToolTip mit Zeilenumbruch
ToolTip mit Icon, Titel und Zeilenumbruch

Warum OpenSource eine Lizenz haben sollte :: PB-CodeArchiv-Rebirth :: Pleasant-Dark (Syntax-Farbschema) :: RegEx-Engine (kompiliert RegExes zu NFA/DFA)
Manjaro Xfce x64 (Hauptsystem) :: Windows 10 Home (VirtualBox) :: Neueste PureBasic-Version
Re: GadgetToolTip
Sicro hat geschrieben:Das GadgetToolTip() von PB unterstützt leider keine mehrzeiligen Tooltips.
WinAPI-Lösungen:
ToolTip mit Zeilenumbruch
ToolTip mit Icon, Titel und Zeilenumbruch
Schade das GadgetToolTip() keine mehrzeiligen Texte unterstützt!
Danke Sicro, für die Antwort und der beigefügten Links.
DeKa
Re: [gelöst]GadgetToolTip
Diese Funktionen geistern schon seit Jahren im Netz und zeigen wie man es nicht machen sollte. Mit den Funktionen wird jedesmal ein neues Handle erstellt. Wenn man jetzt ein Tooltip nimmt, um einen aktuellen Status anzuzeigen, wird das Programm (oder gar Windows selber) irgendwann am Ende sein. PB erstellt beim ersten Aufruf selber ein Tooltip, warum nutzt man das nicht?
Code: Alles auswählen
Import ""
PB_Object_GetThreadMemory(obj)
PB_Gadget_Globals
EndImport
Structure PB_GadgetGlobals
CurrentWindow.i
FirstOptionGadget.i
DefaultFont.i
*PanelStack.integer
PanelStackIndex.l
PanelStackSize.l
ToolTipWindow.i
EndStructure
Procedure GetToolTipHandle()
Protected *winObj.PB_GadgetGlobals
*winObj = PB_Object_GetThreadMemory(PB_Gadget_Globals)
ProcedureReturn *winObj\ToolTipWindow
EndProcedure
Procedure.l GadgetToolTipEx(Gadget, Text.s)
Protected Info.TOOLINFO
Protected hTip.i
hGadget = GadgetID(Gadget)
if not GetToolTipHandle()
GadgetToolTip(Gadget, Text)
endif
hTip = GetToolTipHandle()
Info\cbSize = SizeOf(TOOLINFO)
Info\uFlags = #TTF_SUBCLASS|#TTF_IDISHWND
Info\hWnd = hGadget
Info\uID = hGadget
Info\hInst = GetModuleHandle_(0)
Info\lpszText = @Text
SendMessage_(hTip, #TTM_ADDTOOL, 0, @Info)
SendMessage_(hTip, #TTM_SETMAXTIPWIDTH, 0, 1024)
ProcedureReturn #True
EndProcedure
Procedure Main()
hWnd = OpenWindow(0, #PB_Ignore, #PB_Ignore, 300, 200, "")
ImageGadget(0, 20, 20, 150, 150,0, #PB_Image_Border)
GadgetToolTipEx(0, "fdfg" + chr(13) + "sddfsdfsfdsd")
Repeat
event = WaitWindowEvent()
Until event = #PB_Event_CloseWindow
EndProcedure:End Main()
Zuletzt geändert von edel am 26.06.2014 18:39, insgesamt 1-mal geändert.
- ts-soft
- Beiträge: 22292
- Registriert: 08.09.2004 00:57
- Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel - Wohnort: Berlin
Re: [gelöst]GadgetToolTip
PS: edels tip funktioniert auch unter 64-bit (und 32-bit), wenn man die Strukture abändert:
Gruß
Thomas
Code: Alles auswählen
Import ""
PB_Object_GetThreadMemory(obj)
PB_Gadget_Globals
EndImport
Structure PB_GadgetGlobals
CurrentWindow.i
FirstOptionGadget.i
DefaultFont.i
*PanelStack.integer
PanelStackIndex.l
PanelStackSize.l
ToolTipWindow.i
EndStructure
Thomas
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

Re: [gelöst]GadgetToolTip
Ok, dass jedes mal ein neues Fenster und somit auch jedes Mal ein neues Handle erstellt wird, ist natürlich schlecht, das sollte man im Code abändern. Da habe ich nicht aufgepasst und die Links zu den Codes blind gepostet.
Da wir uns im Anfänger-Forum befinden, rate ich daher lieber die bessere und schon fertige Variante von edel zu verwenden.
Kurze Frage zu diesen internen PB-Funktionen, deren Antwort für DeKa sicherlich auch wissenswert ist:
Ist die Verwendung dieser internen PB-Funktionen auch noch garantiert bei zukünftigen Versionen von PB, also nicht so wie bei den Funktionen EventwParam() und EventlParam()?
Da wir uns im Anfänger-Forum befinden, rate ich daher lieber die bessere und schon fertige Variante von edel zu verwenden.
Kurze Frage zu diesen internen PB-Funktionen, deren Antwort für DeKa sicherlich auch wissenswert ist:
Ist die Verwendung dieser internen PB-Funktionen auch noch garantiert bei zukünftigen Versionen von PB, also nicht so wie bei den Funktionen EventwParam() und EventlParam()?

Warum OpenSource eine Lizenz haben sollte :: PB-CodeArchiv-Rebirth :: Pleasant-Dark (Syntax-Farbschema) :: RegEx-Engine (kompiliert RegExes zu NFA/DFA)
Manjaro Xfce x64 (Hauptsystem) :: Windows 10 Home (VirtualBox) :: Neueste PureBasic-Version
Re: [gelöst]GadgetToolTip
Nein, Fred kann jederzeit etwas aendern und dann war es das. Allerdings laeuft das bei mir schon seit mehr als 7 Jahren.
Danke Thomas, werde es anpassen.
Danke Thomas, werde es anpassen.
- Falko
- Admin
- Beiträge: 3535
- Registriert: 29.08.2004 11:27
- Computerausstattung: PC: MSI-Z590-GC; 32GB-DDR4, ICore9; 2TB M2 + 2x3TB-SATA2 HDD; Intel ICore9 @ 3600MHZ (Win11 Pro. 64-Bit),
Acer Aspire E15 (Win11 Home X64). Purebasic LTS 6.11b1
HP255G8 Notebook @AMD Ryzen 5 5500U with Radeon Graphics 2.10 GHz 3.4GHz, 32GB_RAM, 3TB_SSD (Win11 Pro 64-Bit) - Kontaktdaten:
Re: [gelöst]GadgetToolTip
Sorry das ich mich jetzt erst melde, aber hier ist vielleicht eine
einfachere variante die mir ozzie aus dem englischen Forum aufgezeigt hatte, nachdem
ich einen alten Thread mal aufgerollt habe. Sowas könnte Fred eigentlich simpel und einfach
einbauen, wenn er nur wollte. Er will aber nicht
einfachere variante die mir ozzie aus dem englischen Forum aufgezeigt hatte, nachdem
ich einen alten Thread mal aufgerollt habe. Sowas könnte Fred eigentlich simpel und einfach
einbauen, wenn er nur wollte. Er will aber nicht

Code: Alles auswählen
;http://www.purebasic.fr/english/viewtopic.php?p=447192#p447192"
;Tipp von ozzie aus dem englischen Forum
Procedure setToolTipControls()
Protected ttip
ttip = FindWindow_("tooltips_class32",0)
If ttip
SendMessage_(ttip,#TTM_SETMAXTIPWIDTH,0,500) ; maximum width set to 500 pixels
SendMessage_(ttip,#TTM_SETDELAYTIME,#TTDT_INITIAL,0) ; cause tooltip to be displayed immediately
SendMessage_(ttip,#TTM_SETDELAYTIME,#TTDT_AUTOPOP,30000) ; time (in ms) tooltip will remain visible
EndIf
EndProcedure
If OpenWindow(0, 0, 0, 270, 100, "GadgetTooltip", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
ButtonGadget(0, 10, 30, 250, 30, "Schalter mit Tooltip")
GadgetToolTip(0, "Tooltip für den Schalter"+#CRLF$+"Teste dieses mal"+#CRLF$+"Cool und nur mit wenigen Sendmessages")
setToolTipControls()
Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf