 |
Das deutsche QBasic- und FreeBASIC-Forum Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Westbeam

Anmeldungsdatum: 22.12.2009 Beiträge: 760
|
Verfasst am: 15.01.2011, 10:50 Titel: Eigene Input-Routine |
|
|
Hallo
Ich brauche für meine OpenWIZ-GUI eine Textbox, also habe ich folgende Sub erstellt:
Code: | Sub AddTextBox(x As Integer,y As Integer,w As Integer,ByVal id As Integer,ByVal num As Integer)
Line (wx(num)+5+x,wy(num)+26+y)-(wx(num)+5+x+w,wy(num)+42+y),15,BF
Line (wx(num)+5+x,wy(num)+26+y)-(wx(num)+5+x+w,wy(num)+42+y),15,B
Line (wx(num)+5+x,wy(num)+26+y)-(wx(num)+4+x+w,wy(num)+26+y),8
Line (wx(num)+5+x,wy(num)+26+y)-(wx(num)+5+x,wy(num)+41+y),8
Line (wx(num)+6+x,wy(num)+27+y)-(wx(num)+4+x+w,wy(num)+41+y),7,B
Line (wx(num)+6+x,wy(num)+27+y)-(wx(num)+6+x+w-3,wy(num)+27+y),0
Line (wx(num)+6+x,wy(num)+27+y)-(wx(num)+6+x,wy(num)+40+y),0
If (mx>wx(num)+5+x And mx<wx(num)+5+x+w) And (my>wy(num)+26+y And my<wy(num)+42+y) And buttons=1 Then
inum=1
End If
If inum=1 Then
Color 0
'Select Case key2
' Case 32 To 255
key2=Getkey
texttbox=texttbox+Chr(key2)
textz2=Len(texttbox)*8
Draw String(wx(num)+8+x+textz,wy(num)+28+y),texttbox
' Case 13
' Draw String(wx(num)+8+x,wy(num)+28+y),text
' End Select
End If
End Sub |
Kurze Erklärung:
-TextBox wird gezeichnet
-Es wird geprüft, ob die Maus in die TextBox geklickt hat
-Es folgt die Eingabe(die nicht funktioniert)
Wenn ich in die TextBox klicke, dann stoppt das Programm und hängt sich auf. Das liegt wahrscheinlich an Getkey, aber ich weiß auch nicht, wie ich es anders machen soll ...
Hat jemand vielleicht eine Idee? |
|
Nach oben |
|
 |
Eternal_pain

Anmeldungsdatum: 08.08.2006 Beiträge: 1783 Wohnort: BW/KA
|
Verfasst am: 15.01.2011, 13:02 Titel: |
|
|
Zitat: | Syntax: GETKEY
Typ: Funktion
Kategorie: Eingabe
Wartet mit der Programmausführung, bis eine Taste gedrückt wird. GETKEY ist also ein Ersatz für SLEEP. Im Gegensatz zu SLEEP allerdings löscht GETKEY den Tastaturpuffer, nachdem eine Taste gedrückt wurde.
|
probier mal mit:
_________________
 |
|
Nach oben |
|
 |
Westbeam

Anmeldungsdatum: 22.12.2009 Beiträge: 760
|
Verfasst am: 15.01.2011, 13:07 Titel: |
|
|
Jetzt läuft zwar das Programm weiter, aber ich kann trotzdem nichts eingeben.  |
|
Nach oben |
|
 |
Eternal_pain

Anmeldungsdatum: 08.08.2006 Beiträge: 1783 Wohnort: BW/KA
|
Verfasst am: 15.01.2011, 14:19 Titel: |
|
|
koennte daran liegen das er IMMER alles hinzufuegt ob es nun was hinzuzufuegen gibt oder nicht, sprich, er macht auch ohne eingabe immer ein chr(0) hinzu, da gehört wohl noch die eine oder andere afrage rein _________________
 |
|
Nach oben |
|
 |
Westbeam

Anmeldungsdatum: 22.12.2009 Beiträge: 760
|
Verfasst am: 15.01.2011, 15:34 Titel: |
|
|
Hier ist ein Beispiel, auf Anfrage von Eternal_pain:
Code: | Screenres 500,300,8
Declare Sub AddTextBox(x As Integer,y As Integer,w As Integer,ByVal id As Integer)
Dim Shared As Integer inum,textz,mx,my,buttons,key2
Dim Shared As String texttbox
Do
Getmouse mx,my,,buttons
key2=Asc(Inkey)
Screenlock
Cls
AddTextBox(100,100,200,1)
Screenunlock
Sleep 1
Loop Until Inkey=Chr(27)
End
Sub AddTextBox(x As Integer,y As Integer,w As Integer,ByVal id As Integer)
Line (5+x,26+y)-(5+x+w,42+y),15,BF
Line (5+x,26+y)-(5+x+w,42+y),15,B
Line (5+x,26+y)-(4+x+w,26+y),8
Line (5+x,26+y)-(5+x,41+y),8
Line (6+x,27+y)-(4+x+w,41+y),7,B
Line (6+x,27+y)-(6+x+w-3,27+y),0
Line (6+x,27+y)-(6+x,40+y),0
If (mx>+5+x And mx<+5+x+w) And (my>26+y And my<42+y) And buttons=1 Then
inum=1
End If
If inum=1 Then
Color 0
texttbox=texttbox+Chr(key2)
textz=Len(texttbox)*8
Draw String(8+x+textz,28+y),texttbox
End If
End Sub |
|
|
Nach oben |
|
 |
XOR
Anmeldungsdatum: 23.07.2010 Beiträge: 161
|
Verfasst am: 15.01.2011, 20:10 Titel: |
|
|
Man sollte im program immer nur ein Inkey haben, da inkey den puffer der tasten zurucksetzt.
Code: |
Screenres 500,300,8
Declare Sub AddTextBox(x As Integer,y As Integer,w As Integer,ByVal id As Integer)
Dim Shared As Integer inum,textz,mx,my,buttons,key2
Dim Shared As String texttbox
Do
Getmouse mx,my,,buttons
key2 = Asc(InKey)
Screenlock
Cls
AddTextBox(100,100,200,1)
Screenunlock
Sleep 1
Loop Until key2=27
End
Sub AddTextBox(x As Integer,y As Integer,w As Integer,ByVal id As Integer)
Line (5+x,26+y)-(5+x+w,42+y),15,BF
Line (5+x,26+y)-(5+x+w,42+y),15,B
Line (5+x,26+y)-(4+x+w,26+y),8
Line (5+x,26+y)-(5+x,41+y),8
Line (6+x,27+y)-(4+x+w,41+y),7,B
Line (6+x,27+y)-(6+x+w-3,27+y),0
Line (6+x,27+y)-(6+x,40+y),0
If (mx>+5+x And mx<+5+x+w) And (my>26+y And my<42+y) And buttons=1 Then
inum=1
End If
If inum=1 And key2<>0 Then
Color 0
texttbox=texttbox+Chr(key2)
textz=Len(texttbox)*8
End If
Draw String(8+x,28+y),texttbox
End Sub
|
sollte funktionieren
anderst ist die stelle loop until key2 = 27 und der string wird nur erweitert wenn auch key2 ungleich 0 ist. Gezeichnet wird der sting aber immer |
|
Nach oben |
|
 |
Westbeam

Anmeldungsdatum: 22.12.2009 Beiträge: 760
|
Verfasst am: 15.01.2011, 20:41 Titel: |
|
|
Ohja. Das funktioniert, ich danke euch allen für die Hilfe.  |
|
Nach oben |
|
 |
|
|
Du kannst keine Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum nicht antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen.
|
|