Tooltip zu einer bestimmten Zeit anzeigen

Anfängerfragen zum Programmieren mit PureBasic.
Andesdaf
Moderator
Beiträge: 2673
Registriert: 15.06.2008 18:22
Wohnort: Dresden

Tooltip zu einer bestimmten Zeit anzeigen

Beitrag von Andesdaf »

Hallo!
Bitte schlagt mich nicht nieder, wenn es schon mal vorkam, aber ich habe
mit der Suche nichts gefunden. Und zwar geht es um folgendes:

Ich möchte ein Textgadget erstellen, dass bei einem Event oder nach einer
Zeit einen Tooltip ausgibt und ihn auch wieder verschwinden lässt.
Das Gadget muss deswegen nicht aktiv sein, es soll so eine Art Infoecke
werden. Am Besten wäre es, wenn der Tooltip nicht nur der normale,
sondern der BalloonTip wäre.

Lässt sich das irgendwie realisieren?
Win11 x64 | PB 6.20
Dare Devil
Beiträge: 237
Registriert: 17.10.2008 18:24
Kontaktdaten:

Beitrag von Dare Devil »

Das Problem ist, dass PB von Haus aus keine Moeglichkeit bietet, einen ToolTip fuer einen TextGadget zu zeigen (warum auch immer), heisst im Klartext: GadgetToolTip() geht bei TextGadgets nicht.
Eine einfache Loesung waere es ein Image zu erstellen und einen Text "einzumalen"... Folgender Vorschlag:

Code: Alles auswählen

Procedure CreateTextGadget(WinID, GadgetText$, x, y, FrontColor)
StartDrawing(WindowOutput(WinID))
textwidth = TextWidth(GadgetText$)
textheight = TextHeight(GadgetText$)
image = CreateImage(#PB_Any, textwidth, textheight)
StopDrawing()
StartDrawing(ImageOutput(image))
DrawText(0, 0, GadgetText$, FrontColor, GetSysColor_(#COLOR_BTNFACE))
StopDrawing()

newgadget = ImageGadget(#PB_Any, x, y, textwidth, textheight, ImageID(image))
ProcedureReturn newgadget
EndProcedure
Anmerkung: Wenn du die Window-Hintergrundfarbe durch SetWindowColor() geaendert hast, dann ersetze bitte die API-Funktion GetSysColor_() durch GetWindowColor().

Jetzt kannste die Funktion zum erstellen von TextGadgets verwenden, anstelle von TextGadget() und mit GadgetToolTip() einen ToolTip erstellen.

Hier ein Beispiel:

Code: Alles auswählen

OpenWindow(0, 0, 0, 200, 200, "Tool-Tip", #PB_Window_ScreenCentered | #PB_Window_SystemMenu)
CreateGadgetList(WindowID(WinID))
textgadget = CreateTextGadget(0, "Hi!", 20, 20, RGB(0, 0, 0))
GadgetToolTip(textgadget, "Text")

Repeat
Until WaitWindowEvent(1) = #PB_Event_CloseWindow
Sobald man mit der Maus drueberfaehrt wird der Tooltip angezeigt...
Allerdings laesst sich die Darstellung des Tooltips nicht bestimmen und wird eben nur angezeigt, wenn man mit der Maus auf das Gadget faehrt.

Vielleicht hat ja jemand eine API-Loesung!

Ansonsten koennte man so einen ToolTip auch selbst basteln...
Bild + Bild

Bild
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Beitrag von edel »

Dare Devil hat geschrieben:Das Problem ist, dass PB von Haus aus keine Moeglichkeit bietet, einen ToolTip fuer einen TextGadget zu zeigen (warum auch immer), heisst im Klartext: GadgetToolTip() geht bei TextGadgets nicht.
Das geht schon nur ist das TextGadget ein StaticControl. Damit dieses
Control auch sein Tooltip erhaelt, erstellt man es mit dem Flag #ss_notify,
zumindest unter Windows.

Beispiel:

Code: Alles auswählen

EnableExplicit 

Enumeration ; Window 
  #WINDOW_MAIN 
EndEnumeration 

Enumeration ; Gadget 
  #GADGET_TEST 
EndEnumeration 

#WINDOW_MAIN_CX    = 400 
#WINDOW_MAIN_CY    = 300 
#WINDOW_MAIN_TITLE = "Test" 
#WINDOW_MAIN_STYLE = #PB_Window_SystemMenu 

Procedure main()  

  Protected hwnd 
  Protected event 
  Protected header 
  Protected font 
  
  hwnd = OpenWindow(#WINDOW_MAIN,#PB_Ignore,#PB_Ignore,#WINDOW_MAIN_CX,#WINDOW_MAIN_CY,#WINDOW_MAIN_TITLE,#WINDOW_MAIN_STYLE) 

  CompilerIf #PB_Compiler_Version < 430 
    CreateGadgetList(hwnd) 
  CompilerEndIf 
  
  TextGadget(#GADGET_TEST,5,5,100,23,"BLa",#SS_NOTIFY)
  GadgetToolTip(#GADGET_TEST,"Lalallaallalaaa")
  
    
  Repeat 
    event = WaitWindowEvent()    
    
    If event = #PB_Event_CloseWindow 
      End 
    EndIf 
    
  ForEver  
  
  
EndProcedure:main() 
Dare Devil
Beiträge: 237
Registriert: 17.10.2008 18:24
Kontaktdaten:

Beitrag von Dare Devil »

Thx!
Wusst ich nich - wieder etwas dazugelernt :)
Bild + Bild

Bild
Andesdaf
Moderator
Beiträge: 2673
Registriert: 15.06.2008 18:22
Wohnort: Dresden

Beitrag von Andesdaf »

@Dare Devil & edel: Danke, wusste nicht, dass Textgadgets keine Tooltips
haben können... das hätte die Umsetzung noch erschwert. :allright:

Aber wie kann man nun, z.B. wenn man auf einen Button klickt, machen,
dass der Tooltip angezeigt wird. Vorher soll auch beim Überfahren mit der
Maus kein Tooltip erscheinen. Eben nur dann, wenn man diesen Button
drückt.

Freue mich auf Antworten!
Win11 x64 | PB 6.20
c4s
Beiträge: 1235
Registriert: 19.09.2007 22:18

Beitrag von c4s »

Zum löschen/verschwinden lassen des Tooltips machst du einfach einen
leeren Text als Tooltip und andernfalls (beim klicken) machst du erneuert
einen Tooltip auf dein Gadget mit dem anzuzeigenden Text.
"Menschenskinder, das Niveau dieses Forums singt schon wieder!" — GronkhLP ||| "ich hogffe ihr könnt den fehle endecken" — Marvin133 ||| "Ideoten gibts ..." — computerfreak ||| "Jup, danke. Gruss" — funkheld
Andesdaf
Moderator
Beiträge: 2673
Registriert: 15.06.2008 18:22
Wohnort: Dresden

Beitrag von Andesdaf »

Klappt leider nicht so wie ich es mir vorgestellt hatte...

Code: Alles auswählen

If OpenWindow(0,5,5,300,300,"Andesdaf's Tooltip Spielchen")
  ButtonGadget(1,5,5,200,50,"Hier kommt der ToolTip") And GadgetToolTip(1,"Informacion")
  ButtonGadget(2,5,70,200,50,"Tooltip: Erscheine")
  ButtonGadget(3,5,140,200,50,"Tooltip: Verschwinde")
EndIf

Repeat
  Event = WaitWindowEvent()
  Select Event
    Case #PB_Event_Gadget
      Select EventGadget()
    
        Case 2
          GadgetToolTip(1,"Informacion 2")
        
        Case 3
          GadgetToolTip(1,"")
        
      EndSelect
  EndSelect
Until Event = #PB_Event_CloseWindow
CloseWindow(0)
Das mit dem leeren Tooltip funktioniert, aber wenn ich den Tooltip
anzeigen lassen will wird nur der Text im Tooltip ("Informacion" ->
"Informacion 2") geändert, aber der Tooltip wird dann nicht auf dem
Button angezeigt.

Oder gehst du jetzt von den TextGadgets aus?
Win11 x64 | PB 6.20
c4s
Beiträge: 1235
Registriert: 19.09.2007 22:18

Beitrag von c4s »

...zumindest die And-Verknüpfung von Button und Tooltip kannst du dir
schonmal sparen.

Aber dein Vorhaben verstehe ich nicht: Der Tooltip soll also dauerhaft
angezeigt werden oder was? Denn der Tooltip wird ja wie ein normaler PB-
Tooltip angezeigt auf dem Button.
"Menschenskinder, das Niveau dieses Forums singt schon wieder!" — GronkhLP ||| "ich hogffe ihr könnt den fehle endecken" — Marvin133 ||| "Ideoten gibts ..." — computerfreak ||| "Jup, danke. Gruss" — funkheld
Andesdaf
Moderator
Beiträge: 2673
Registriert: 15.06.2008 18:22
Wohnort: Dresden

Beitrag von Andesdaf »

Nein, er soll nur angezeigt werden, wenn ich auf den Button (ID: 2) klicke,
und wenn ich auf den Button (ID: 3) klicke, soll er wieder verschwinden.
(verschwinden muss er nicht unbedingt, es reicht auch, wenn er nach der
normalen Zeit abhaut...)

Window wird geöffnet - kein Tooltip
Klick auf Button 2 - Tooltip anzeigen
Klick auf Button 3 - Tooltip verschwinden lassen (muss nicht sein)

Der Tooltip soll erst angezeigt werden, wenn ich auf den 2. Button klicke.
Vorher soll er nicht angezeigt werden.

auch wenn ich die Maus auf den 1. Button bewege, soll kein Tooltip ange-
zeigt werden, eben nur wenn ich auf den 2. Button klicke. Danach soll der
Tooltip wieder verschwinden und nicht mehr existieren.

Ich hoffe du verstehst mich :freak:
Win11 x64 | PB 6.20
c4s
Beiträge: 1235
Registriert: 19.09.2007 22:18

Beitrag von c4s »

Wie wäre es dann, wenn du einfach am Anfang
> "And GadgetToolTip(1,"Informacion")"
weglässt?
Window wird geöffnet - kein Tooltip ✓

Klick auf Button 2 - Tooltip anzeigen ✓, Maus über Button 1 zeigt Tooltip

Klick auf Button 3 - Tooltip verschwinden lassen ✓, da ja dann kein Tooltip
mehr vorhanden ist und demnach auch keiner angezeigt wird.
"Menschenskinder, das Niveau dieses Forums singt schon wieder!" — GronkhLP ||| "ich hogffe ihr könnt den fehle endecken" — Marvin133 ||| "Ideoten gibts ..." — computerfreak ||| "Jup, danke. Gruss" — funkheld
Antworten