GadgetToolTip

Anfängerfragen zum Programmieren mit PureBasic.
Mr.Vain
Beiträge: 88
Registriert: 29.10.2009 00:14

GadgetToolTip

Beitrag 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?
Benutzeravatar
Kiffi
Beiträge: 10711
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: GadgetToolTip

Beitrag 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
a²+b²=mc²
Mr.Vain
Beiträge: 88
Registriert: 29.10.2009 00:14

Re: GadgetToolTip

Beitrag 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?
Benutzeravatar
Kiffi
Beiträge: 10711
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: GadgetToolTip

Beitrag 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
a²+b²=mc²
Mr.Vain
Beiträge: 88
Registriert: 29.10.2009 00:14

Re: GadgetToolTip

Beitrag 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.
c4s
Beiträge: 1235
Registriert: 19.09.2007 22:18

Re: GadgetToolTip

Beitrag 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
"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
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: GadgetToolTip

Beitrag 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.
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
Mr.Vain
Beiträge: 88
Registriert: 29.10.2009 00:14

Re: GadgetToolTip

Beitrag 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 ;)
Mr.Vain
Beiträge: 88
Registriert: 29.10.2009 00:14

Re: GadgetToolTip

Beitrag 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...
Benutzeravatar
Kiffi
Beiträge: 10711
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: GadgetToolTip

Beitrag von Kiffi »

#EM_SETCUEBANNER: Das imitiert mein erster Code. Und das sogar plattformunabhängig ;-)

Grüße ... Kiffi
a²+b²=mc²
Antworten