Seite 1 von 2

StringGadget mit #PB_String_Numeric lässt Text zu

Verfasst: 24.04.2009 11:56
von Rokur
Hab grad einen kleinen Bug beim StringGadget gefunden:
Wenn ich das Gadget mit #PB_String_Numeric definiere, dann kann ich zwar über die Tastatur nur Ziffern eingeben wie es sein sollte, aber über die Zwischenablage (Strg+V oder Rechtsklick "Einfügen") kann ich alle möglichen Zeichen reinkopieren.

Getestet mit PB 4.30 Windows XP 32 Bit

Verfasst: 24.04.2009 19:16
von Batze
Ist kein Bug würde ich mal behaupten.

Verfasst: 24.04.2009 19:52
von Andesdaf
man kann in der Tat jedes beliebige Zeichen einfügen:

Code: Alles auswählen

 If OpenWindow(0, 0, 0, 230, 90, "Event-Handling Beispiel...", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)

   StringGadget  (1, 10, 10, 200, 20, "Klick mich",#PB_String_Numeric)
   CheckBoxGadget(2, 10, 40, 200, 20, "Markiere mich")

   If CreateMenu(0, WindowID(0))
     MenuTitle("Menu")
     MenuItem(1, "Eintrag 1")
     MenuItem(2, "Eintrag 2")
     MenuItem(3, "Eintrag 3")
   EndIf

   Repeat
     Event = WaitWindowEvent()
     
     Select Event
     
       Case #PB_Event_Gadget
         Select EventGadget()
           Case 1 : Debug "Schalter 1 angeklickt!"
           Case 2 : Debug "Schalter 2 angeklickt!"
           Case 3 : Debug "Schalter 3 angeklickt!"
         EndSelect
       
       Case #PB_Event_Menu
         Select EventMenu()
           Case 1 : Debug "Menü-Eintrag 1 angeklickt!"
           Case 2 : Debug "Menü-Eintrag 2 angeklickt!"
           Case 3 : Debug "Menü-Eintrag 3 angeklickt!"
         EndSelect
     
     EndSelect
   Until Event = #PB_Event_CloseWindow
 EndIf

(Sorry für den kopierten Code)

Getestet mit PB4.3 (Vista - 32 Bit)

Ob das aber nun an PB direkt liegt ist die Frage...

Verfasst: 24.04.2009 20:02
von ts-soft
Ich würde sagen, das ist eine Einschränkung des OS. Unter Vista bekomme
ich keine ungültigen Zeichen über die Zwischenablage eingefügt, per Code
ist das natürlich möglich, wäre ja auch dumm, wenn nicht.

Verfasst: 24.04.2009 21:43
von Rokur
Dann verwendet PB hier ein Feature vom Betriebssystem, welches nicht überall gleich funktioniert?

Verfasst: 24.04.2009 21:58
von ts-soft
Rokur hat geschrieben:Dann verwendet PB hier ein Feature vom Betriebssystem, welches nicht überall gleich funktioniert?
So sieht es aus! Unter Vista kommt ein Ballontip, der sagt unzulässiges
Zeichen, XP weiß ich jetzt nicht mehr, die davor machen es in jedem Fall anders.

Verfasst: 25.04.2009 04:49
von ts-soft
Falls Interesse an einem WorkAround besteht:

Code: Alles auswählen

EnableExplicit

Global oldStringGadgetCB

Procedure StringGadgetCB(hWnd, uMsg, wParam, lParam)
  Select uMsg
    Case #WM_CHAR
      Select wParam
        Case 47 To 57 ; erlaubte Zeichen 0 - 9
        Default
          ProcedureReturn #False
      EndSelect
    Case #WM_CONTEXTMENU ; Kontextmenü unterdrücken 
      ProcedureReturn #False
  EndSelect
  
  ProcedureReturn CallWindowProc_(oldStringGadgetCB, hWnd, uMsg, wParam, lParam)
EndProcedure

OpenWindow(0, #PB_Ignore, #PB_Ignore, 200, 40, "test", #PB_Window_SystemMenu)
StringGadget(0, 10, 10, 180, 20, "")
SetActiveGadget(0)

oldStringGadgetCB = SetWindowLongPtr_(GadgetID(0), #GWL_WNDPROC, @StringGadgetCB())

Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow

Verfasst: 25.04.2009 10:06
von Andesdaf
> XP weiß ich jetzt nicht mehr
Dort auch ein BalloonTip.

@WorkAround:
mit STRG-EINFG kannste immernoch buchstaben einfügen

[Vista-32bit]

Verfasst: 25.04.2009 10:13
von ts-soft
Andesdaf hat geschrieben:@WorkAround:
mit STRG-EINFG kannste immernoch buchstaben einfügen

[Vista-32bit]
Dann ist Dein PC oder das OS kaputt :mrgreen:
Dat geid man garnich

Verfasst: 25.04.2009 10:25
von Andesdaf
oh oh... :mrgreen:

aber das Wort Ralph kann man per STRG-EINFG und dann SHIFT-EINFG
noch einfügen

oben meine ich natürlich Shift und nicht strg