Seite 1 von 2

Tooltip zu einer bestimmten Zeit anzeigen

Verfasst: 28.11.2008 16:44
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?

Verfasst: 28.11.2008 20:57
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...

Verfasst: 28.11.2008 21:22
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() 

Verfasst: 28.11.2008 22:34
von Dare Devil
Thx!
Wusst ich nich - wieder etwas dazugelernt :)

Verfasst: 29.11.2008 15:40
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!

Verfasst: 29.11.2008 16:58
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.

Verfasst: 29.11.2008 18:00
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?

Verfasst: 29.11.2008 21:43
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.

Verfasst: 30.11.2008 12:47
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:

Verfasst: 30.11.2008 13:18
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.