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