[gelöst]GadgetToolTip

Anfängerfragen zum Programmieren mit PureBasic.
DeKa
Beiträge: 6
Registriert: 22.07.2013 16:35
Wohnort: Bremen

[gelöst]GadgetToolTip

Beitrag von DeKa »

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
Zuletzt geändert von DeKa am 25.06.2014 16:36, insgesamt 1-mal geändert.
Benutzeravatar
Sicro
Beiträge: 963
Registriert: 11.08.2005 19:08
Kontaktdaten:

Re: GadgetToolTip

Beitrag von Sicro »

Das GadgetToolTip() von PB unterstützt leider keine mehrzeiligen Tooltips.
WinAPI-Lösungen:
ToolTip mit Zeilenumbruch
ToolTip mit Icon, Titel und Zeilenumbruch
Bild
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
DeKa
Beiträge: 6
Registriert: 22.07.2013 16:35
Wohnort: Bremen

Re: GadgetToolTip

Beitrag von DeKa »

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
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Re: [gelöst]GadgetToolTip

Beitrag von edel »

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.
Benutzeravatar
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

Beitrag von ts-soft »

PS: edels tip funktioniert auch unter 64-bit (und 32-bit), wenn man die Strukture abändert:

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
Gruß
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.
Bild
Benutzeravatar
Sicro
Beiträge: 963
Registriert: 11.08.2005 19:08
Kontaktdaten:

Re: [gelöst]GadgetToolTip

Beitrag von Sicro »

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()?
Bild
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
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Re: [gelöst]GadgetToolTip

Beitrag von edel »

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.
Benutzeravatar
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

Beitrag von Falko »

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 :mrgreen:

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
Bild
Win11 Pro 64-Bit, PB_6.11b1
Antworten