Seite 1 von 2
GadgetToolTip
Verfasst: 15.02.2011 10:37
von Mr.Vain
Hallo,
ich hab ein Programm erstellt, welches keine Maus benötigt.
Nun möchte ich ein GadgetToolTip mit einem StringGadget verknüpfen.
Dabei soll der Tooltip-Text solange erscheinen, bis etwas in dem StringGadget geschrieben ist.
Wie kann ich dies ermöglichen?
Re: GadgetToolTip
Verfasst: 15.02.2011 10:57
von Kiffi
mal auf die Schnelle zusammengelötet:
Code: Alles auswählen
EnableExplicit
Define ToolTip.s, WWE
ToolTip = "Geben Sie hier etwas ein"
Enumeration
#myWindow
#myStringGadget1
#myStringGadget2
#myStringGadget3
EndEnumeration
If OpenWindow(#myWindow, #PB_Ignore, #PB_Ignore, 322, 205, "StringGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
StringGadget(#myStringGadget1, 8, 10, 306, 20, ToolTip)
StringGadget(#myStringGadget2, 8, 30, 306, 20, ToolTip)
StringGadget(#myStringGadget3, 8, 50, 306, 20, ToolTip)
SetGadgetColor(#myStringGadget1, #PB_Gadget_FrontColor, #Gray)
SetGadgetColor(#myStringGadget2, #PB_Gadget_FrontColor, #Gray)
SetGadgetColor(#myStringGadget3, #PB_Gadget_FrontColor, #Gray)
Repeat
WWE = WaitWindowEvent()
Select WWE
Case #PB_Event_Gadget
Select EventGadget()
Case #myStringGadget1, #myStringGadget2, #myStringGadget3
Select EventType()
Case #PB_EventType_Focus
If GetGadgetText(EventGadget()) = ToolTip
SetGadgetText(EventGadget(), "")
EndIf
SetGadgetColor(EventGadget(), #PB_Gadget_FrontColor, #Black)
Case #PB_EventType_LostFocus
If GetGadgetText(EventGadget()) = ""
SetGadgetText(EventGadget(), ToolTip)
EndIf
If GetGadgetText(EventGadget()) = ToolTip
SetGadgetColor(EventGadget(), #PB_Gadget_FrontColor, #Gray)
EndIf
EndSelect
EndSelect
Case #PB_Event_CloseWindow
Break
EndSelect
ForEver
EndIf
Geht mit Sicherheit noch eleganter, aber für die erste Gedankenanregung sollte es reichen.
Grüße ... Kiffi
Re: GadgetToolTip
Verfasst: 15.02.2011 11:37
von Mr.Vain
Danke für die rasche Antwort.
Bei mir ist es so, dass das StringGadget ständig aktiv ist (Cursor blinkt).
Wäre hier ein ToolTip evl eleganter?
Re: GadgetToolTip
Verfasst: 15.02.2011 12:01
von Kiffi
Mr.Vain hat geschrieben:Wäre hier ein ToolTip evl eleganter?
wie wäre es hiermit?
Code: Alles auswählen
EnableExplicit
Enumeration
#myWindow
#myStringGadget
#myToolTip
EndEnumeration
If OpenWindow(#myWindow, #PB_Ignore, #PB_Ignore, 322, 205, "StringGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
StringGadget(#myStringGadget, 8, 10, 306, 20, "")
TextGadget(#myToolTip, 8, 30, 306, 20, "Eingabe erforderlich")
SetGadgetColor(#myToolTip, #PB_Gadget_FrontColor, #Red)
Repeat
Select WaitWindowEvent()
Case #PB_Event_Gadget
Select EventGadget()
Case #myStringGadget
Select EventType()
Case #PB_EventType_Change
If GetGadgetText(#myStringGadget) = ""
HideGadget(#myToolTip, #False)
Else
HideGadget(#myToolTip, #True)
EndIf
EndSelect
EndSelect
Case #PB_Event_CloseWindow : Break
EndSelect
ForEver
EndIf
ansonsten kann ich mir im Moment nicht wirklich vorstellen, wie Dein GUI aussieht.
Kannst Du vielleicht eine kleine Skizze oder einen Screenshot erstellen, damit
Dein Vorhaben ein wenig klarer für uns wird?
Grüße ... Kiffi
Re: GadgetToolTip
Verfasst: 15.02.2011 12:57
von Mr.Vain
Es ist ein Programm mit einer Suchmaske.
D.H. das StringGadget ist immer aktiv. Hier muss ein Name eingetragen werden.
Unten wird dann eine Liste mit den Ergebnissen angezeigt.
Das Problem ist, dass immer der Nachname der Person eingetragen werden soll. Dies möchte ich verdeutlichen (evl. durch Sprechblase). Eine ist hier nicht angeschlossen.
Re: GadgetToolTip
Verfasst: 15.02.2011 13:10
von c4s
Wie wäre es hiermit?
Code: Alles auswählen
Procedure StringGadgetCue(GadgetNr, Text.s)
CompilerIf #PB_Compiler_Unicode = #True ; Funktioniert nur mit Unicode (und XP-Style)
SendMessage_(GadgetID(GadgetNr), #EM_SETCUEBANNER, #False, @Text)
CompilerEndIf
EndProcedure
If OpenWindow(0, #PB_Ignore, #PB_Ignore, 200, 40, "", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
StringGadget(1, 10, 10, 180, 20, "")
StringGadgetCue(1, "Nachname eingeben...")
Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf
Re: GadgetToolTip
Verfasst: 15.02.2011 13:18
von ts-soft
Was habt Ihr alle für Probleme mit Unicode, man kann doch in PB alles wandeln:
Code: Alles auswählen
Procedure StringGadgetCue(GadgetNr, Text.s)
Protected *mem = AllocateMemory(StringByteLength(Text, #PB_Unicode) + 2)
PokeS(*mem, Text, -1, #PB_Unicode)
SendMessage_(GadgetID(GadgetNr), #EM_SETCUEBANNER, #False, *mem)
FreeMemory(*mem)
EndProcedure
If OpenWindow(0, #PB_Ignore, #PB_Ignore, 200, 40, "", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
StringGadget(1, 10, 10, 180, 20, "")
StringGadgetCue(1, "Nachname eingeben...")
Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf
Jetzt ist es egal ob uni oder ansi.
Re: GadgetToolTip
Verfasst: 15.02.2011 13:19
von Mr.Vain
c4s hat geschrieben:Wie wäre es hiermit?
Code: Alles auswählen
Procedure StringGadgetCue(GadgetNr, Text.s)
CompilerIf #PB_Compiler_Unicode = #True ; Funktioniert nur mit Unicode (und XP-Style)
SendMessage_(GadgetID(GadgetNr), #EM_SETCUEBANNER, #False, @Text)
CompilerEndIf
EndProcedure
If OpenWindow(0, #PB_Ignore, #PB_Ignore, 200, 40, "", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
StringGadget(1, 10, 10, 180, 20, "")
StringGadgetCue(1, "Nachname eingeben...")
Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf
danke, werds gleich mal probieren. Hab allerdings noch PB 4.50 drauf... muss ma eben updaten

Re: GadgetToolTip
Verfasst: 15.02.2011 13:24
von Mr.Vain
Hab's jetzt getestet - sieht auch gut aus.
Jedoch hab ich auch hier das Problem, dass der Text weg ist, sobald ich das Gadget aktiviere.
In meinem Programm ist das Gadget stets aktiviert (blinkender Cursor) - ich denke, dass ich hier dann wohl einfach nen TextGadget nehmen muss...
Re: GadgetToolTip
Verfasst: 15.02.2011 13:28
von Kiffi
#EM_SETCUEBANNER: Das imitiert mein erster Code. Und das sogar plattformunabhängig
Grüße ... Kiffi