Input Requester Centered Char

Share your advanced PureBasic knowledge/code with the community.
RASHAD
PureBasic Expert
PureBasic Expert
Posts: 4954
Joined: Sun Apr 12, 2009 6:27 am

Input Requester Centered Char

Post by RASHAD »

Code: Select all

Global InputString$

#InputString_Length = 20

Procedure NewChar(char) 
  If char > 31 And char < 128
      InputString$ + Chr(char)
  ElseIf char = 8
      InputString$ = Left(InputString$,Len(InputString$)-1)
  EndIf
   InputString$ = Left(InputString$,#InputString_Length)
  StartDrawing( ImageOutput(1) ) 
    Box(15,15,170,20,GetSysColor_(#COLOR_BTNFACE))
    FrontColor(RGB(Red(255),Green(0),Blue(0))) 
    DrawingMode(1) 
    SetCaretPos_((200-TextWidth(InputString$))/2+TextWidth(InputString$),17) 
    DrawText((200-TextWidth(InputString$))/2,17,InputString$) 
  StopDrawing() 
  SetGadgetState(0,ImageID(1)) 
EndProcedure 

Procedure WinProc(hWnd,Msg,wParam,lParam) 
  result = #PB_ProcessPureBasicEvents 
  Select Msg 
    Case #WM_CHAR 
      NewChar(wParam) 
  EndSelect 
  ProcedureReturn result 
EndProcedure 

CreateImage(1,200,50) 

OpenWindow(0,0,0,200,50,"Please Input Password",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
  ImageGadget(0,0,0,200,50,ImageID(1)) 
  SetWindowCallback(@WinProc())
  CreateCaret_(WindowID(0),0,2,16):ShowCaret_(WindowID(0))
 
  NewChar(0) 

Repeat:Until WaitWindowEvent()=#PB_Event_CloseWindow
End
RASHAD
User avatar
Rook Zimbabwe
Addict
Addict
Posts: 4322
Joined: Tue Jan 02, 2007 8:16 pm
Location: Cypress TX
Contact:

Post by Rook Zimbabwe »

I just tossed this off at work...

You didn't comment your code at all so I had to figure out what you think you are trying to do... not a good start there!

It seemed to me that you were trying to set the text on a button... I hashed a simple program that would do that without all those extended system calls...

Code: Select all

; PureBasic Visual Designer v3.95 build 1485 (PB4Code)


;- Window Constants
;
Enumeration
  #Window_0
EndEnumeration

;- Gadget Constants
;
Enumeration
  #Button_0
  #String_0
EndEnumeration

Global chr$

Procedure CheckChar(chr$)
old$ = chr$
chr= Asc(chr$)
If chr > 31 And char < 128 
  new$ = old$ + chr$
EndIf
SetGadgetText(#Button_0, new$)
  
EndProcedure

Procedure Open_Window_0()
  If OpenWindow(#Window_0, 216, 0, 408, 163, "New window ( 0 )",  #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar )
    If CreateGadgetList(WindowID(#Window_0))
      ButtonGadget(#Button_0, 20, 80, 350, 50, "")
      StringGadget(#String_0, 20, 20, 370, 40, "")
      
    EndIf
  EndIf
EndProcedure

; PureBasic Visual Designer v3.95 build 1485 (PB4Code)


Open_Window_0()

Repeat ; Start of the event loop
  
  Event = WaitWindowEvent() ; This line waits until an event is received from Windows
  
  WindowID = EventWindow() ; The Window where the event is generated, can be used in the gadget procedures
  
  GadgetID = EventGadget() ; Is it a gadget event?
  
  EventType = EventType() ; The event type
  
  ;You can place code here, and use the result as parameters for the procedures
  
  If Event = #PB_Event_Gadget
    
    If GadgetID = #Button_0
      
    ElseIf GadgetID = #String_0
      chr$ = GetGadgetText(#String_0)
      CheckChar(chr$)
    EndIf
    
  EndIf
  
Until Event = #PB_Event_CloseWindow ; End of the event loop

End
I hate the event loop in the demo VD... but I had to download that at work to lpay with this!
Binarily speaking... it takes 10 to Tango!!!

Image
http://www.bluemesapc.com/
RASHAD
PureBasic Expert
PureBasic Expert
Posts: 4954
Joined: Sun Apr 12, 2009 6:27 am

Post by RASHAD »

Rook
I am so sorry for late
The internet is not available for me all the time
I am glad To hear from you my friend

My point is To center the text immediatly While typing

right now at least we have two different point of view

have a good day

RASHAD
RASHAD
PureBasic Expert
PureBasic Expert
Posts: 4954
Joined: Sun Apr 12, 2009 6:27 am

Post by RASHAD »

The options are endless:
1- You chang the size
2- You can change the starting position
3- You can change The req Input (char Or digit Or both)
4- Can change the limiit of characters req.
5- Can change Backcolor
6- Can change Frame color
7- Can change the foreground And the background colors
8- Can change the shape of the Caret

And more And more

make it fun

RASHAD

Code: Select all

Global InputString$,InputString_Length.l,IRx,IRy,Bx,By,FrColor,BColor,FColor
IRx=300
IRy=300
Bx=270
By=30
FrColor=$F50304
BColor=$FFFFFF
FColor=$0000FF
InputString$="123-456000"
InputString_Length = 30

; DataSection
;   Image0:
;   IncludeBinary "mobile.bmp"
; EndDataSection

Procedure NewChar(char) 
  If (char > 47 And char < 58) Or char = 45
      InputString$ + Chr(char)
  ElseIf char = 8
      InputString$ = Left(InputString$,Len(InputString$)-1)
  EndIf
   InputString$ = Left(InputString$,InputString_Length)
  StartDrawing( ImageOutput(1) )
    Box(0,0,Bx,By,FrColor)
    Box(2,2,Bx-4,By-10,BColor)
    FrontColor(FColor) 
    DrawingMode(1) 
    SetCaretPos_((300-TextWidth(InputString$))/2+TextWidth(InputString$),19) 
    DrawText((270-TextWidth(InputString$))/2,4,InputString$) 
  StopDrawing() 
  SetGadgetState(0,ImageID(1)) 
EndProcedure 

Procedure WinProc(hWnd,Msg,wParam,lParam) 
  result = #PB_ProcessPureBasicEvents 
  Select Msg 
    Case #WM_CHAR 
      NewChar(wParam) 
  EndSelect 
  ProcedureReturn result 
EndProcedure 

CreateImage(1,Bx,24)

OpenWindow(0,IRx,IRy,300,100,"              Please Input Your Mobile No",#PB_Window_TitleBar)
  ImageGadget(0,15,15,Bx,20,ImageID(1))
  ButtonGadget(1, 120, 60,60, 25,"OK") 
  SetWindowCallback(@WinProc())
  CreateCaret_(WindowID(0),1,3,16):ShowCaret_(WindowID(0))  
 
  NewChar(0) 

Repeat
   EventID = WaitWindowEvent()
   
   Select EventID

    Case #PB_Event_Gadget
    
     Select EventGadget()
     
           Case 1
                Quit = 1            
                
     EndSelect
  EndSelect
     
Until Quit = 1
End
Have fun
RASHAD
PB
PureBasic Expert
PureBasic Expert
Posts: 7581
Joined: Fri Apr 25, 2003 5:24 pm

Post by PB »

> I just tossed this off at work

Just make sure you don't get caught tossing off. ;)
I compile using 5.31 (x86) on Win 7 Ultimate (64-bit).
"PureBasic won't be object oriented, period" - Fred.
User avatar
Rescator
Addict
Addict
Posts: 1769
Joined: Sat Feb 19, 2005 5:05 pm
Location: Norway

Post by Rescator »

@RASHAD

Doesn't work on Vista here at all, and most likely not Win7 either.

The following looks pretty good on Vista, and should on XP and Win7 as well.
On Linux and Mac you'd have to get rid of the ES_ constant though so you'd loose the centering on those two platforms.

Code: Select all

If OpenWindow(0, 0, 0, 200, 40, "Please Input Password",#PB_Window_TitleBar|#PB_Window_ScreenCentered|#PB_Window_SystemMenu)
    StringGadget(0, 8,  10, 184, 15, "",#PB_String_Password|#PB_String_BorderLess|#ES_CENTER) ;windows API constant
    SetWindowColor(0,0)
    SetGadgetColor(0,#PB_Gadget_BackColor,#White)
    SetGadgetColor(0,#PB_Gadget_FrontColor,#Red)
    SetActiveGadget(0)
    Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf
A #PB_String_Center would be really cool, but not sure if that is on the PureBasic wishlist yet?
RASHAD
PureBasic Expert
PureBasic Expert
Posts: 4954
Joined: Sun Apr 12, 2009 6:27 am

Post by RASHAD »

@Rescator
Hello sir
It works fine with Win 7 I checked it already
But I did not check it with Vista,So let me see @ that


Thank you and have a good day

RASHAD
User avatar
Rescator
Addict
Addict
Posts: 1769
Joined: Sat Feb 19, 2005 5:05 pm
Location: Norway

Post by Rescator »

I have Vista x64 btw.
RASHAD
PureBasic Expert
PureBasic Expert
Posts: 4954
Joined: Sun Apr 12, 2009 6:27 am

Post by RASHAD »

You make it hard to me
I have Ultimate x86
But I have to know then I will answer that

Thank you again sir

RASHAD
rsts
Addict
Addict
Posts: 2736
Joined: Wed Aug 24, 2005 8:39 am
Location: Southwest OH - USA

Post by rsts »

Works fine under Win 7 x64 - BUT I'm running 32 bit PB.

cheers
RASHAD
PureBasic Expert
PureBasic Expert
Posts: 4954
Joined: Sun Apr 12, 2009 6:27 am

Post by RASHAD »

@rsts
My guardian and my friend
Think for a way to enforce Sparkie to be back to the forum again
That man means to me a lot

RASHAD
rsts
Addict
Addict
Posts: 2736
Joined: Wed Aug 24, 2005 8:39 am
Location: Southwest OH - USA

Post by rsts »

Runs fine under Win 7 64 bit PB too.

I'd be surprised if it's not ok under Vista, but anything's possible.

Will check a little later.

cheers
Matt
Enthusiast
Enthusiast
Posts: 447
Joined: Sat May 21, 2005 1:08 am
Location: USA

Post by Matt »

rsts wrote:Runs fine under Win 7 64 bit PB too.

I'd be surprised if it's not ok under Vista, but anything's possible.

Will check a little later.

cheers
Works perfect under vista
RASHAD
PureBasic Expert
PureBasic Expert
Posts: 4954
Joined: Sun Apr 12, 2009 6:27 am

Post by RASHAD »

Hello Matt

PB x64
Win 7 x64

It works fine now
Please confirm

Code: Select all

Global InputString$,InputString_Length.l,IRx,IRy,Bx,By,FrColor,BColor,FColor
IRx=300
IRy=300
Bx=270
By=30
FrColor=$F50304
BColor=$FFFFFF
FColor=$0000FF
InputString$="123-456000"
InputString_Length = 30


Procedure NewChar(char) 
  If (char > 47 And char < 58) Or char = 45
      InputString$ + Chr(char)
  ElseIf char = 8
      InputString$ = Left(InputString$,Len(InputString$)-1)
  EndIf
   InputString$ = Left(InputString$,InputString_Length)
  StartDrawing( ImageOutput(1) )
    Box(0,0,Bx,By,FrColor)
    Box(2,2,Bx-4,By-10,BColor)
    FrontColor(FColor) 
    DrawingMode(1) 
    SetCaretPos_((300-TextWidth(InputString$))/2+TextWidth(InputString$),19) 
    DrawText((270-TextWidth(InputString$))/2,4,InputString$) 
  StopDrawing() 
  SetGadgetState(0,ImageID(1)) 
EndProcedure 

Procedure WinProc(hWnd,Msg,wParam,lParam) 
  result = #PB_ProcessPureBasicEvents 
  Select Msg 
    Case #WM_CHAR 
      NewChar(wParam) 
  EndSelect 
  ProcedureReturn result 
EndProcedure 

CreateImage(1,Bx,24)

OpenWindow(0,IRx,IRy,300,100,"              Please Input Your Mobile No",#PB_Window_TitleBar)
  ImageGadget(0,15,15,Bx,20,ImageID(1))
  ButtonGadget(1, 120, 60,60, 25,"OK") 
  SetWindowCallback(@WinProc(),0)
  CreateCaret_(WindowID(0),1,3,16):ShowCaret_(WindowID(0))  
 
  NewChar(0) 

Repeat
   EventID = WaitWindowEvent()
   
   Select EventID

    Case #PB_Event_Gadget
    
     Select EventGadget()
     
           Case 1
                Quit = 1            
                
     EndSelect
  EndSelect
     
Until Quit = 1
End
rsts
Addict
Addict
Posts: 2736
Joined: Wed Aug 24, 2005 8:39 am
Location: Southwest OH - USA

Post by rsts »

Fine as PB64 under Win 7

cheers
Post Reply