Seite 2 von 3

Verfasst: 26.07.2009 21:21
von Deluxe0321
Ich habe mir das Zeug mal angesehen.. das kannst du in null komma nix in PB lösen.
4 Schritte:
1. Erstell ein Fenster
2. Erstelle die Gadgets und lege die Eigenschaften dieser Fest ( einiges kann PB von Haus aus anderes musst du selbst machen)
3. Lege deine Hotkeys Fest (in deinem Fall Enter, Pfeil nach unten usw.
4. Spaß haben ;)

Ich denke mal bei fragen helfen dir hier viele & wenn nicht gibt es immernoch eine menge was schon gefragt wurde --> Boardsuche

Gruß Marv

Verfasst: 27.07.2009 12:59
von dysti
@mikstart,
hier mal als Beispiel die Umsetzung der Eingabemaske auf der Console.
Ist immer unglücklich.
Unseren Professionells stehen jetzt die Haare zu Berge wenn sie diesen Code sehen.
Es geht hier auch nur darum, das du siehst, welche Befehle PB verwendet.
Beachte z.B. die Locate-Befehle. Hier sind in PB die Achsen x und y genau anders herum.

Nun, ich weiß immer noch nicht, ob Console oder Fenster?

Vielleicht werden wir es erfahren?

Code: Alles auswählen

Global max
max=8

; dimension arrays
Global Dim x(max)
Global Dim y(max)
Global Dim fl(max)
Global Dim text.s(max) 
Global Dim curserpos(max)
Global Dim char.s(60, max)
Global n, e, dir
     
Declare editor(Array x(1), Array y(1), Array fl(1), Array text.s(1), max)
Declare PaintScr()
Declare switch()



Restore NumericalData
                                           ; define max number of
  
  Dim x(max)
  Dim y(max)
  Dim fl(max)
  
  For n = 1 To max
    Read a                        
    x(n) = a 
    Read a                                       
    y(n) = a
    Read a  
    fl(n) = a
 Next n 
                                                     ; fields
 
 
 

 

 ; *************  unrem this to see text strings after editor *************
 ;
 ;  ConsoleLocate( 23, 6: Print(" Press any key . . . "
 ;  WHILE INKEY$ = "": WEND
 ;  CLS
 ;
 ;  FOR n = 1 TO max
 ;   Print("Text string "; n; " "; text.s(n)
 ;  NEXT n
 ;
 ; ************************************************************************

 ;    x, y, fl       define x & y cordinates and the field lenths here
 ;        
 DataSection
 NumericalData:
 Data.l 21,16,10
 Data.l 21,17,30
 Data.l 21,18,30
 Data.l 21,19,27
 Data.l 56,19,4
 Data.l 67,19,10
 Data.l 21,20,16
 Data.l 21,21,50
 EndDataSection

 
 Procedure  PaintScr()

 ConsoleColor(7, 9)
 ClearConsole()
 
  For n = 3 To 77
    ConsoleLocate(n, 4 ):  Print( Chr(196))
    ConsoleLocate( n,14): Print( Chr(196))
    ConsoleLocate(n, 23): Print( Chr(196))
  Next n

 ConsoleLocate(7, 2):   Print("Input Field Example")
 ConsoleLocate(7, 3):   Print("1992 Nocturnal Creations - David Pastore, Timothy Truman")
 ConsoleLocate(7, 5):   Print("Keys:   up,down,left,right - to scroll cursor though fields")
 ConsoleLocate(15, 6):  Print("insert             - toggle insert mode")
 ConsoleLocate(15,7):  Print("delete             - delete char at cursor")
 ConsoleLocate(15, 8):  Print("home               - go to begining of field")
 ConsoleLocate(15, 9):  Print("end                - go to end of text")
 ConsoleLocate(15, 10): Print("F1                 - convert field to lower case")
 ConsoleLocate(15, 11): Print("F2                 - convert field to upper case")
 ConsoleLocate(15, 12): Print("F3                 - convert field to proper case")
 ConsoleLocate(15, 13): Print("Esc                - quits")
 ConsoleLocate(10, 16): Print("Account #:")
 ConsoleLocate(10, 17): Print("Name     :")
 ConsoleLocate(10, 18): Print("Address  :")
 ConsoleLocate(10, 19): Print("City     :                             State:       Zip:")
 ConsoleLocate(10, 20): Print("Phone    :")
 ConsoleLocate(10, 21): Print("Comment  :")
EndProcedure

Procedure editor( Array x(1), Array y(1), Array fl(1), Array text.s(1), max)


 For z = 1 To max                           ; fill all field cells
   For x = 1 To fl(z)                      ; with blank spaces
     char(x, z) = Chr(32)
   Next x
 Next z

 For n = 1 To max                           ; set the default cursor
  curserpos(n) = 1                          ; position to equal 1 in
 Next n                                      ; in all fields

 uc = 1                                      ; upper case flag for proper F3
 e = 1                                       ; set starting field to 1
 done = 0                                    ; not done yet!!
 insert = 0                                  ; insert on ( default )

 ConsoleColor( 0, 7 )                                        ; init first field
 ConsoleLocate(x(e), y(e)): Print( Str(fl(e)))  
 ConsoleLocate( x(e), y(e))                           


  Repeat
        
       i$ = Inkey()

      If Len(i$) = 1                      ; create key code
        i = Asc(i$)                          ; regular key
       Else     
       i = -Asc(Chr(RawKey()))                  ; extented key
      EndIf
     
      Select  i                                ; process key

          Case 80                                    ; **** backspace ****

            If curserpos(e) > 1               ; if not first cell in
                                                    ; field
              For n = curserpos(e) To fl(e)
                char(n - 1, e) = char(n, e)    ; drag everything starting
                char(n, e) = " "                 ; at cursor pos back 1 cell
              Next n
             
              curserpos(e) = curserpos(e) - 1   ; dec cursor pos
           
            EndIf
        
          Case 27                                    ; **** escape key ****

            text.s(e) = ""                           ; set current $ to null
     
            For n = 1 To fl(e)                    ; rebuild string from
                                                     ; cells
              If char(n, e) = ""
                char(n, e) = " "
                text.s(e) = text.s(e) + char(n, e)
              EndIf

            Next 

            ConsoleColor (7, 9 )                               ; reprint string
            ConsoleLocate( x(e), y(e)): Print( text.s(e)) ;
            done = 1                                 ; all done
         
          Case 32 To 126                             ; **** letter keys ****
         
           If insert = 0                        ; if insert mode
            If curserpos(e) <= fl(e)         ; if not end of field

              For n = fl(e) To curserpos(e) Step -1  ; bring cells in
                char(n + 1, e) = char(n, e)           ; front of cursor
              Next n                                     ; ahead 1

              char(curserpos(e), e) = i$            ; make cell at cursor
                                                       ; pos = input
               If curserpos(e) < fl(e)        ; if not end of field
                curserpos(e) = curserpos(e) + 1    ; inc cursor pos
               EndIf
           
            EndIf

           Else                                      ; if not insert mode

            If curserpos(e) <= fl(e)         ; if not end of field
              char(curserpos(e), e) = i$          ; make cursor pos cell
                                                     ; = input
               If curserpos(e) < fl(e)        ; if not end of field
                 curserpos(e) = curserpos(e) + 1  ; inc cursor pos
               EndIf

            EndIf

           EndIf
         
          Case -112                                   ; **** F1 ****

              For n = 1 To fl(e)                   ; loop though cells
                char(n, e) = LCase(char(n, e))   ; & make them lower
              Next n                                 ; case
         
          Case -113                                   ; **** F2 ****

              For n = 1 To fl(e)                   ; loop though cells
                char(n, e) = UCase(char(n, e))   ; & make them upper
              Next n                                 ; case

          Case -114                                   ; **** F3 ****
            
              For n = 0 To fl(e)                   ; loop though entire
                                                      ; field
                 If char(n, e) >= "A" And char(n, e) <= "z"  ; if A-z
                   If uc                         ; if upper case flag on
                    char(n, e) = UCase(char(n, e)) ; make cell upper case
                    uc = 0                             ; set flag off
                     Else                               ; if flag is off
                       char(n, e) = LCase(char(n, e)) ; make cell lower
                   EndIf                                  ; case
                  EndIf
             
                 If char(n, e) = " " Or char(n, e) = ""  ; if cell =
                   uc = 1                            ; a space turn flag on
                 EndIf

              Next n

          Case -36                                   ; **** home ****
         
            curserpos(e) = 1                       ; set cursor pos to
                                                     ; begining
          Case -38                                   ; **** up ****
        
            If e > 1                            ; if not first field

              dir = 0                               ; direction = -
              switch()                           ; switch field

            EndIf

          Case 3-7                                   ; **** left ****
           
            If curserpos(e) > 1              ; if not begining of field
              curserpos(e) = curserpos(e) - 1  ; dec cursor pos
             Else                                  ; if begining of field
              If e > 1                        ; if not first field
                 dir = 0                          ; direction = -
                 curserpos(e - 1) = fl(e - 1)  ; set last cursor pos to
                 switch()                      ; end of last field
              EndIf
            EndIf

          Case -39                                   ; **** right ****
         
            If curserpos(e) < fl(e)         ; if not end of field
              curserpos(e) = curserpos(e) + 1   ; inc cursor pos
             Else                                   ;  if end of field
              If e < max                      ;    if not last field
                 dir = 1                           ; direction = +
                 curserpos(e + 1) = 1             ; set next cursor pos to
                 switch()                       ; beginning of next field
              EndIf
            EndIf

          Case -35                                   ; **** end ****
        
            n = fl(e)                             ; set counter to fl

            Repeat
             
              If char(n, e) <> Chr(32)        ; if cell does not = a
                curserpos(e) = n + 1              ; space we;ve found End
                Break 2                             ; of text - exit loop
              EndIf
             
             n = n - 1                             ; dec n
            Until n = 1                        ; until begining of field

          Case -40                                   ; **** down ****
         
            If e < max                         ; if not in last field

              dir = 1                               ; direction = +
              switch()                           ; switch field

            EndIf

          Case -45                                   ; **** insert ****
                                            
              If insert = 0                     ; if insert on
                insert = 1                          ; turn it off & set
                ConsoleLocate((x(e) + curserpos(e)), y(e)) ; cursor
                                                                  ; style
               Else                                  ; if insert off
                insert = 0                          ; turn it on & set
                ConsoleLocate((x(e) + curserpos(e)), y(e)); cursor
                                                                  ; style
              EndIf

          Case -46                                   ; **** del ****
               
             For n = curserpos(e) To fl(e)      ; drag all cells from
               char(n, e) = char(n + 1, e)       ; cursor pos to end
             Next n                                 ; back one

          Case 13                                    ; **** enter ****

             If e < max                        ; if not last field
               dir = 1                              ; direction = +
               switch()                          ; switch field
             EndIf

       EndSelect

     text.s(e) = ""                                  ; set text to null
     char(fl(e) + 1, e) = " "

       For n = 1 To fl(e)                         ; rebuild text from
         text.s(e) = text.s(e) + char(n, e)        ; cells
       Next n
       
     ConsoleLocate(x(e), y(e)): Print( text.s(e))       ; display field
     ConsoleLocate((curserpos(e) - 1 + x(e)), y(e))

   Until i$ = Chr(27) ; Wartet, bis Escape gedrückt wird
                                  ; until escape

 EndProcedure
 

Procedure switch()

        text.s(e) = ""                                  ; set current text
                                                        ; to null
        For n = 1 To fl(e)
          If char(n, e) = ""  ; rebuild string
          text.s(e) = text.s(e) + char(n, e)          ; from cells
          EndIf
        Next n

        ConsoleColor( 7, 9): ConsoleLocate(x(e), y(e)): Print( text.s(e)) ; display
                                                              ; string
        If dir = 1                        ; + direction
          e = e + 1                            ; inc e
         Else                                  ; - direction
          e = e - 1                            ; dec e
        EndIf

        ConsoleColor (0, 7 )                                          ; display next/
        ConsoleLocate(x(e), y(e))
        Print( Str(fl(e)))    ; last field
        ConsoleLocate(curserpos(e) + x(e), y(e))            ;

   ;Return
   EndProcedure


OpenConsole()
ConsoleTitle ("Eingabemaske - Console Example:")  ; Now we can give the opened console a Titlename ;)
EnableGraphicalConsole(1)
PaintScr()                                       ; draw screen
editor(x(), y(), fl(), text.s(), max)             ; call editor

Verfasst: 27.07.2009 21:38
von mikstart
hi Kaeru Gaman



> da ich nicht mit maus schnell zahlen eingeben kann,
wie will man auch mit der Maus Zahlen eingeben?

> so wie kein enter gedrückt werden soll nach der eingabe
wie soll die fertigstellung des feldes festgestellt werden?

> nach der eingabe das feld gleich löschen sollte
gar kein problem


> geht nicht ohne die inputroutine
> eben die funktionen von der inputroutine brauche

also, "inputroutine" ist kein Zauberwort.

jegliche Funktionalität die du wünscht läßt sich mit einer Window-Oberfläche auch realisieren.
letztendlich wahrscheinlich sogar komfortabler.

zu 1)
natürlich nicht aber im meinen programm das ich vorhabe zu schreiben.

zu 2)

gut das man anfänger ist da kennt man noch die einfachen befehle :-)

eingabe$=eingabe$+ inkey$
if len (eingabe$) = 3 then X

das ganze natürlich in einer endlosschleife und wenn länge 3 erreicht ist springt er automatisch ohne enter nach x.

zu 3)

das denke ich auch

zu 4)

vieleicht kein zauberwort aber es erspart dir eine menge code und ist sehr flexibel.

zu 5) werd mich mal diese woche ein bischen reinfuchsen und berichten wie es mir so geht

gruss mik

Verfasst: 27.07.2009 21:58
von mikstart
hi dysti,

na da hab ich doch wieder etwas gelernt, da ich nun die unterschiede zu qbasic sehe.

nun wenn ich so was wie die input routine und eingabe maske unter windows machen kann würde ich natürlich windows beforzugen da die gestaltung der menüs um einiges vereinfachter ist und proffesioneller aussehen.

wer mich diese woche mal ein bischen reinfuchsen. denk aber ich werde euch dann mit fragen überhäufen ;-)

ein bischen komisch flimmer tut die eingabe maske unter konsole mode.

gruß mik

Verfasst: 27.07.2009 22:10
von mikstart
Hi Deluxe0321,

ich denk mal mit der eingabe maske pfeil links,rechts und so weiter wird nicht ein so grosses problem sein. kann man den auch tasten defenieren über Gadet. zB. ##.## und oder 0-9, a-z, ist if len(eingabe$) = X dann springt er weiter und kann man zb das cursor aussehen bestimmen?

gruß mik

Verfasst: 27.07.2009 22:16
von mikstart
Hi Kiffi,

so ungefär wie dysti weiter oben geschrieben hat.


Danke an alle für Eure tollen Vorschläge Tipps und Hilfe.

gruss mik

Verfasst: 27.07.2009 22:38
von Kaeru Gaman
noch ein kleiner Hinweis der nichts mit deiner Frage zu tun hat:

es gibt hier einen Edit-Button, damit kann man seine Postings nachträglich editieren,
das ist besser als vier postings hintereinander zu haun.

es gibt auch einen Zitat-Button und Quote-Tags, das erleichtert es, zu erkennen, welcher Teil deines Postings zitiert ist und welcher nicht.

alternativ kannst du auch mehrere Level von > hintereinandersetzen:

>>>>> Frage1
>>>> Antwort1
>>> Frage2
>> Antwort2
> danke
und tschüß

Verfasst: 27.07.2009 22:45
von mikstart
Kaeru Gaman hat geschrieben:noch ein kleiner Hinweis der nichts mit deiner Frage zu tun hat:

es gibt hier einen Edit-Button, damit kann man seine Postings nachträglich editieren,
das ist besser als vier postings hintereinander zu haun.

es gibt auch einen Zitat-Button und Quote-Tags, das erleichtert es, zu erkennen, welcher Teil deines Postings zitiert ist und welcher nicht.

alternativ kannst du auch mehrere Level von > hintereinandersetzen:

>>>>> Frage1
>>>> Antwort1
>>> Frage2
>> Antwort2
> danke
und tschüß
danke, werd ich mir merken.

gruss mik

Verfasst: 28.07.2009 10:09
von dysti
@mikstart,
hier ist das Prog mit einem Windowsfenster. Ich habe es dokumentiert und soll dir verdeutlichen, wie viel schneller du zum Ziel kommst.
Natürlich kannst du das nur feststellen, wenn du es mit den angegebenen Tools nachvollziehst.
Wenn noch was unklar ist, einfach posten.

Code: Alles auswählen

;{- Enumerations / DataSections
;:PureFORM:Init:Start:
; PureFORM V1.99 ~ 28.07.2009 07:14:08

; Zum Compilieren braucht man die Gnozal-Tools
; erhältlich hier: http://freenet-homepage.de/gnozal/
; Diese Grundgerüst wurde mit Gnozals PureFORM erstellt und generiert
; Dadurch ereicht man kürzere Entwicklungszeit und man kann sich sofort auf das Programmieren konzentrieren
; Folgende Tools von Gnozal werden hier in diesem Code verwendet: PureFORM, PureCOLOR
; Interessant ist die Verwendung von PureRESIZE, wird aber hier nicht verwendet.

; Festlegen der Konstanten zum einfachen Händeln.
; Konstantennamen sind innerhalb des Codes ausagekrätiger z.B. #Text_9 ist besser als die Zahl 19
; Die Konstantennamen wurden im Tool PureFORM festgelegt bzw. nach Bedarf verändert
; die Enumerationanfänge 10,100,200 wurden nach der Generierung in der Purebasic-Ide gesetzt

;{ Windows
;Fensternummern: fängt mit 0 an
Enumeration
  #Window_0
EndEnumeration
;}

;{ Gadgets
;die Gadget erhalten Nummern ab 10 - 99
Enumeration 10
  #Text_0
  #Text_1
  #Text_2
  #Text_3
  #Text_4
  #Text_5
  #Text_6
  #Text_7
  #Text_8
  #Text_9
  #Text_10
  #Text_11
  #Text_12
  #Text_13
  #Text_14
  #Text_15
  #Text_16
  #Text_17
  #Text_18
  #Text_19
  #Text_20
  #Text_21
  #Text_22
  #Account
  #Name
  #Adress
  #State
  #Zip
  #City
  #Phone
  #Comment
  
EndEnumeration
;}
;{ Fonts
;die Fonts erhalten Nummern ab 100 - 199
Enumeration 100
  #Font_Text_0
  #Font_Text_1
  #Font_Text_2
  #Font_Text_3
  #Font_Text_4
  #Font_Text_5
  #Font_Text_6
  #Font_Text_7
  #Font_Text_8
  #Font_Text_9
  #Font_Text_10
  #Font_Text_11
  #Font_Text_12
  #Font_Text_13
  #Font_Text_14
  #Font_Text_15
  #Font_Text_16
  #Font_Text_17
  #Font_Text_18
  #Font_Text_19
  #Font_Text_20
  #Font_Text_21
  #Font_Text_22
EndEnumeration
;}
;{ Keys
;die Keys erhalten Nummern ab 200
Enumeration 200
  #Menu_Enter
  #Menu_F1
  #Menu_F2
  #Menu_F3
  #Menu_ESC
  #Menu_Down
  #Menu_UP
EndEnumeration
;}
;:PureFORM:Init:End:
;}
;:PureFORM:Windows:Start:
;:PureFORM:Window_0_1:Start:
;Aufbau der Fenstermaske mit einem Windowsfenster
Procedure OpenWindow_Window_0()
  If OpenWindow(#Window_0, 235, 168, 637, 504, "Eingabemaske", #PB_Window_SystemMenu|#PB_Window_SizeGadget|#PB_Window_MinimizeGadget|#PB_Window_TitleBar)
    TextGadget(#Text_0, 65, 15, 155, 25, "Input Field Example")
    TextGadget(#Text_1, 65, 35, 495, 25, "1992 Nocturnal Greations - David Pastore, Timothy Trumann")
    TextGadget(#Text_2, 5, 50, 620, 25, "______________________________________________________________________________")
    TextGadget(#Text_3, 65, 70, 560, 25, "Keys:       up,down,left,right - to scroll cursor though fields")
    TextGadget(#Text_4, 130, 90, 235, 20, "insert             - toggle insert mode")
    TextGadget(#Text_5, 130, 105, 295, 25, "delete             - delete char at cursor")
    TextGadget(#Text_6, 130, 120, 265, 25, "home               - go to begining of field")
    TextGadget(#Text_7, 130, 135, 215, 25, "end                - go to end of text")
    TextGadget(#Text_8, 130, 150, 285, 25, "F1                 - convert field to lower case")
    TextGadget(#Text_9, 130, 166, 470, 25, "F2                 - convert field to upper case")
    TextGadget(#Text_10, 130, 180, 295, 20, "F3                 - convert field to proper case")
    TextGadget(#Text_11, 130, 195, 285, 25, "Esc                - quits")
    TextGadget(#Text_12, 5, 210, 620, 25, "______________________________________________________________________________")
    TextGadget(#Text_13, 80, 235, 85, 25, "Account #  :")
    TextGadget(#Text_14, 80, 265, 85, 25, "Name         :")
    TextGadget(#Text_15, 80, 300, 85, 25, "Address     :")
    TextGadget(#Text_16, 80, 335, 85, 25, "City            :")
    TextGadget(#Text_17, 400, 300, 45, 25, "State:")
    TextGadget(#Text_18, 502, 300, 30, 25, "Zip:")
    TextGadget(#Text_19, 80, 370, 85, 25, "Phone        :")
    TextGadget(#Text_20, 65, 615, 155, 25, "Gadget_20")
    TextGadget(#Text_21, 80, 405, 85, 25, "Comment  :")
    TextGadget(#Text_22, 5, 425, 620, 25, "______________________________________________________________________________")
    StringGadget(#Account, 180, 235, 75, 20, "")
    StringGadget(#Name, 180, 265, 215, 20, "")
    StringGadget(#Adress, 180, 300, 215, 20, "")
    StringGadget(#City, 180, 335, 215, 20, "")
    StringGadget(#Phone, 180, 370, 215, 20, "")
    StringGadget(#Comment, 180, 405, 408, 20, "")
    StringGadget(#State, 441, 300, 55, 20, "")
    StringGadget(#Zip, 532, 300, 55, 20, "")
    ; Gadget Fonts
    SetGadgetFont(#Text_0, LoadFont(#Font_Text_0, "Times New Roman", 11, 272))
    SetGadgetFont(#Text_1, LoadFont(#Font_Text_1, "Times New Roman", 11, 272))
    SetGadgetFont(#Text_2, LoadFont(#Font_Text_2, "Times New Roman", 11, 272))
    SetGadgetFont(#Text_3, LoadFont(#Font_Text_3, "Times New Roman", 11, 272))
    SetGadgetFont(#Text_4, LoadFont(#Font_Text_4, "Times New Roman", 11, 272))
    SetGadgetFont(#Text_5, LoadFont(#Font_Text_5, "Times New Roman", 11, 272))
    SetGadgetFont(#Text_6, LoadFont(#Font_Text_6, "Times New Roman", 11, 272))
    SetGadgetFont(#Text_7, LoadFont(#Font_Text_7, "Times New Roman", 11, 272))
    SetGadgetFont(#Text_8, LoadFont(#Font_Text_8, "Times New Roman", 11, 272))
    SetGadgetFont(#Text_9, LoadFont(#Font_Text_9, "Times New Roman", 11, 272))
    SetGadgetFont(#Text_10, LoadFont(#Font_Text_10, "Times New Roman", 11, 272))
    SetGadgetFont(#Text_11, LoadFont(#Font_Text_11, "Times New Roman", 11, 272))
    SetGadgetFont(#Text_12, LoadFont(#Font_Text_12, "Times New Roman", 11, 272))
    SetGadgetFont(#Text_13, LoadFont(#Font_Text_13, "Times New Roman", 11, 272))
    SetGadgetFont(#Text_14, LoadFont(#Font_Text_14, "Times New Roman", 11, 272))
    SetGadgetFont(#Text_15, LoadFont(#Font_Text_15, "Times New Roman", 11, 272))
    SetGadgetFont(#Text_16, LoadFont(#Font_Text_16, "Times New Roman", 11, 272))
    SetGadgetFont(#Text_17, LoadFont(#Font_Text_17, "Times New Roman", 11, 272))
    SetGadgetFont(#Text_18, LoadFont(#Font_Text_18, "Times New Roman", 11, 272))
    SetGadgetFont(#Text_19, LoadFont(#Font_Text_19, "Times New Roman", 11, 272))
    SetGadgetFont(#Text_20, LoadFont(#Font_Text_20, "Times New Roman", 11, 272))
    SetGadgetFont(#Text_21, LoadFont(#Font_Text_21, "Times New Roman", 11, 272))
    SetGadgetFont(#Text_22, LoadFont(#Font_Text_22, "Times New Roman", 11, 272))
    ; Gadget Colors
    PureCOLOR_SetGadgetColor(#Text_0, $FFFFFF, $A00000)
    PureCOLOR_SetGadgetColor(#Text_1, $FFFFFF, $A00000)
    PureCOLOR_SetGadgetColor(#Text_2, $FFFFFF, $A00000)
    PureCOLOR_SetGadgetColor(#Text_3, $FFFFFF, $A00000)
    PureCOLOR_SetGadgetColor(#Text_4, $FFFFFF, $A00000)
    PureCOLOR_SetGadgetColor(#Text_5, $FFFFFF, $A00000)
    PureCOLOR_SetGadgetColor(#Text_6, $FFFFFF, $A00000)
    PureCOLOR_SetGadgetColor(#Text_7, $FFFFFF, $A00000)
    PureCOLOR_SetGadgetColor(#Text_8, $FFFFFF, $A00000)
    PureCOLOR_SetGadgetColor(#Text_9, $FFFFFF, $A00000)
    PureCOLOR_SetGadgetColor(#Text_10, $FFFFFF, $A00000)
    PureCOLOR_SetGadgetColor(#Text_11, $FFFFFF, $A00000)
    PureCOLOR_SetGadgetColor(#Text_12, $FFFFFF, $A00000)
    PureCOLOR_SetGadgetColor(#Text_13, $FFFFFF, $A00000)
    PureCOLOR_SetGadgetColor(#Text_14, $FFFFFF, $A00000)
    PureCOLOR_SetGadgetColor(#Text_15, $FFFFFF, $A00000)
    PureCOLOR_SetGadgetColor(#Text_16, $FFFFFF, $A00000)
    PureCOLOR_SetGadgetColor(#Text_17, $FFFFFF, $A00000)
    PureCOLOR_SetGadgetColor(#Text_18, $FFFFFF, $A00000)
    PureCOLOR_SetGadgetColor(#Text_19, $FFFFFF, $A00000)
    PureCOLOR_SetGadgetColor(#Text_20, $FFFFFF, $A00000)
    PureCOLOR_SetGadgetColor(#Text_21, $FFFFFF, $A00000)
    PureCOLOR_SetGadgetColor(#Text_22, $FFFFFF, $A00000)
    ; Window Backcolor
    PureCOLOR_SetWindowColor(#Window_0, $A00000)
    ;:PureFORM:Window_0_1:End:
    ; Your code here ...
    
    ;
    ;:PureFORM:Window_0_2:Start:
  EndIf
EndProcedure

; Unterprogramm für die Cursorbewegung, z.B. rauf und runter zum nächsten Eingabefeld
Procedure menu_pos(poscase)

          agadget=GetActiveGadget()                 ;welches Eingabefeld wird verlassen?
          If poscase                                ; aber wohin? Hier wurde Enter oder die Pfeiltaste nach unten gedrückt.
          agadget=agadget+1                         ; Das Gadget hat eine Nummer, das nächste Gadget eine Nummer höher
          If agadget>#Comment                       ; haben wir das letzte Eingabefeld erreicht?
          agadget=#Account                          ; dann setzen wir es auf das Erste
          EndIf
          Else                                      ; es wurde die Pfeiltaste nach unten gedrückt
          agadget=agadget-1                         ; Das Gadget hat eine Nummer, das nächste Gadget eine Nummer tiefer
          If agadget<#Account                       ; haben wir das erste Eingabefeld erreicht?
          agadget=#Comment                          ; dann setzen wir es auf das Letzte                         
          EndIf
          EndIf
          SetActiveGadget(agadget)                  ; und Aktivieren das Eingabefeld, der Schreibcursor ist weitergesprungen
          
EndProcedure

; Unterprogramm für die Textumwandlung innerhalb eines Eingabefeldes, z.B. Groß- oder Kleinschreibung
Procedure menu_key(keycase)

          Define text$                             ; hier speichern wir den Inhalt des Eingabefeldes zwischen
          agadget=GetActiveGadget()                 ; aus welchem Eingabefeld wurde eine Funktionstaste gedrückt?
          text$=GetGadgetText(agadget)              ; erstmal das Eingabefeld auslesen
          If keycase=1                              ; welche Funktionstaste wurde gedrückt? F1
          text$=LCase(text$)                        ; wir ändern auf klein um
          ElseIf keycase=2                         ; F2 wurde gedrückt
          text$=UCase(text$)                         ; also schreiben wir GROß
          ElseIf keycase=3                          ; F3 wurde gedrückt
          text$=UCase(Left(text$,1))+ Mid(text$,2)   ; es wird nur der -erste- Buchstabe GROß geschrieben
          EndIf
          SetGadgetText(agadget,text$)              ; und setzen das Ergebnis in das Eingabefeld ein
               
EndProcedure

;:PureFORM:Window_0_2:End:
;:PureFORM:Windows:End:
;
;:PureFORM:Gadgets:Start:
;:PureFORM:Gadgets:End:

; Wir starten und Öffnen das Windowsfenster mit dem Aufbau der Eingabemaske
OpenWindow_Window_0()
;:PureFORM:Main:Start:
;:PureFORM:Main:End:

;{- Shortcut Keys
; Dies sind die Definierungen der Positions- / Bewegungstasten für die Eingabemaske
; sofern sie nicht direkt von den Gadgets/Eingabefeldern unterstützt werden
AddKeyboardShortcut(#Window_0, #PB_Shortcut_Return, #Menu_Enter)
AddKeyboardShortcut(#Window_0, #PB_Shortcut_F1, #Menu_F1)
AddKeyboardShortcut(#Window_0, #PB_Shortcut_F2, #Menu_F2)
AddKeyboardShortcut(#Window_0, #PB_Shortcut_F3, #Menu_F3)
AddKeyboardShortcut(#Window_0, #PB_Shortcut_Escape, #Menu_ESC)
AddKeyboardShortcut(#Window_0, #PB_Shortcut_Down, #Menu_Down)
AddKeyboardShortcut(#Window_0, #PB_Shortcut_Up, #Menu_UP)
;
;}

;{- Event loop
; Die eigentliche Ereignisschleife unserer Eingabemaske. Hier spielt die Musik.
Repeat
  ;:PureFORM:Loop:Start:
  Select WaitWindowEvent()
    ; ///////////////////
    ; hier reagieren wir auf Ereignisse, die die Eingabefelder versenden
    ; die Case habe ich aber nicht herausgelöscht, um nicht zu verwirren, da sie von PureFORM generiert werden.
    Case #PB_Event_Gadget
      Select EventGadget()
        Case #Text_0
        Case #Text_1
        Case #Text_2
        Case #Text_3
        Case #Text_4
        Case #Text_5
        Case #Text_6
        Case #Text_7
        Case #Text_8
        Case #Text_9
        Case #Text_10
        Case #Text_11
        Case #Text_12
        Case #Text_13
        Case #Text_14
        Case #Text_15
        Case #Text_16
        Case #Text_17
        Case #Text_18
        Case #Text_19
        Case #Text_20
        Case #Text_21
        Case #Text_22
        Case #Account
        Case #Name
        Case #Adress
        Case #City
        Case #Phone
        Case #Comment
        Case #State
        Case #Zip
      EndSelect
      
     ; Diese Case werden gebraucht und steuern unsere Eingabemaske
     ; Die Funktion "AddKeyboardShortcut" verursacht ein Ereignis vom Typ "#PB_Event_Menu"
     
     Case #PB_Event_Menu
       Select EventMenu()
        Case #Menu_Enter ; wir drücken die Enter-/Returntaste, ein Eingabefeld weiter
        menu_pos(1) 
        Case #Menu_F1    ; wir drücken die F1-Taste, die Buchstaben im Eingabefeld werden -klein- geschrieben
        menu_key(1)
        Case #Menu_F2    ; wir drücken die F2-Taste, die Buchstaben im Eingabefeld werden -GROß- geschrieben
        menu_key(2)
        Case #Menu_F3    ; wir drücken die F3-Taste, der -erste- Buchstabe in einem Eingabefeld wird -groß- Geschrieben
        menu_key(3)
        Case #Menu_ESC   ; wir drücken die ESC-Taste, wir beenden das Programm
        CloseWindow(#Window_0)
        End
        Case #Menu_Down  ; wir drücken die Pfeiltasten nach unten, ein Eingabefeld tiefer
        menu_pos(1)
        Case #Menu_UP    ; wir drücken die Pfeiltasten nach oben, ein Eingabefeld höher
        menu_pos(0) 
       EndSelect  
     
    Case #PB_Event_CloseWindow
      Select EventWindow()
        Case #Window_0   ; upps, Schließenbutton des Fensters wurde angeklickt
          CloseWindow(#Window_0)
          Break
      EndSelect
  EndSelect
  ;:PureFORM:Loop:End:
ForEver
;
;}
;:PureFORM:AfterLoop:Start:
;:PureFORM:AfterLoop:End:

Verfasst: 28.07.2009 10:25
von ts-soft
@dysti

Alle Enumerationen sollten ab 0 beginnen wenn sie PB Objekte (Gadgets,
Fenster, Schriften usw.) verwalten! Du verschwendest hier sinnlos
Speicher.

Desweiteren sollten Windows-Eingabemasken auch Windows-Like sein,
Return wird dort normal nicht ausgewertet! Navigation per Maus und Tab
sind wichtig. Shortcuts für Buttons, aber Eingaben werden nicht mit Return
verlassen!

Sobald eine Eingabemaske vollständig ausgefüllt wurde, sollte ein Button
für Übernahme aktiviert werden.

Consolen-Eingabemasken und Windows-Eingabemasken arbeiten
grundlegend anders und sind deshalb auch vollkommen anders zu gestalten.

Hab Dein Beispiel aber nicht weiter getestet, hab keine entsprechende
Userlib installiert.

Gruß
Thomas