Forum | | | | Mindanao | Ich habe jetzt jahrelang mit Blitz 3D programmiert. In meinem letzten Projekt werden viele Zahleneingaben gemacht. Blitzbasic kennt leider keinen Zehnerblock. Da Blitzbasic schon jahrelang nicht mehr supportet wird, bin ich jetzt bei XProfan 10 gelandet. Ich habe hier aber für Grafik leider noch nichts gefunden. Die Eingabebox nutzt mir nichts. Ich möchte zwar in einem Fenster arbeiten, möchte aber grafikmäßig alles selber machen. |
| | | | |
| | H.Brill | Kann man doch schön mit Locate und Input machen.
Mit einem Editfeld (Create("Edit",...) ist es halt leichter, was die Beschränkung auf n Zeichen betrifft :
$00C5 : em_LimitText Bestimmt die maximale Anzahl von Zeichen, die ein Editierfeld aufnehmen darf. N3: Anzahl der Zeichen (0 = unbegrenzt) Rückgabewert: 0 = Fehler aufgetreten
Da braucht man halt nur eine Message ans Editfeld senden :
Beschränkt das Editfeld auf 10 Zeichen. |
| | | Benutze XPROFAN X3 + FREEPROFAN Wir sind die XProfaner. Sie werden von uns assimiliert. Widerstand ist zwecklos! Wir werden alle ihre Funktionen und Algorithmen den unseren hinzufügen.
Was die Borg können, können wir schon lange. | 01.06.2017 ▲ |
| |
| | Mindanao | Ersmal vielen Dank fürs antworten. Wenn ich richtig gelesen habe kann man mit Locate nur Reihe und Zeile eingeben. Ich möchte ein Fenster mit Titel 500 x 400 Pixel groß. Darin werden mehrere Datengruppen eingegeben und bleiben sichtbar bis alle Daten eingegeben sind. Diese Eingaben möchte pixelgenau positionieren können. Ich suche eigentlich einen Befehl wie Input x,y, eingabe$,max_zeichen. Ich habe mir sowas schon mal in Blitz 3D programmiert, geht auch. Ich denke mal wenn ich hier nicht was fertiges finde, versuche ich das halt in XProfan umzusetzen. |
| | | | |
| | Jörg Sellmeyer | Wäre nicht sowas besser als eine grafische Lösung?
Cls
Declare Liste&,Eingabe&,Button&
Liste& = Create("ListBox",%hwnd,0,10,10,100,160)
Eingabe& = Create("Edit", %HWnd, "", 210, 10, 80, 25)
SendMessage(Eingabe&, $00C5, 10, 0)
Button& = Create("Button",%hwnd,"einfügen",210,40,80,25)
While 1
WaitInput
If Clicked(Button&)
If GetText$(Eingabe&) > ""
AddString(Liste&,GetText$(Eingabe&))
SetText Eingabe&,""
EndIf
EndIf
Wend
|
| | | | |
| | H.Brill | Ganz pixelgenau wird man das nicht hinbekommen. Man muß ja auch noch an die Schriftart bzw. Schrifthöhe denken. Entweder, wie oben Jörg schon geschrieben hat, oder halt im Textmodus mit Locate usw.
Mit TBox x1, y1 - x2, y2; N kann man ja auch schöne Rahmen zur Abgrenzung machen. Vielleicht sowas :
Declare Name$, Vorname$, Ort$, Strasse$, Telefon$, nochmal$
Declare ende%
WindowTitle "Mein Fenster"
Window 500, 400
Cls RGB(0, 0, 0)' schwarzes Fenster
Color 14, 0
Fensteraufbau()
ende% = 0
WhileNot ende%
Locate 2,13 : Input Name$
Locate 3,13 : Input Vorname$
Locate 4,13 : Input Ort$
Locate 5,13 : Input Strasse$
Locate 6,13 : Input Telefon$
Locate 7,20 : Input nochmal$
If Upper$(nochmal$) = "N"
ende% = 1
Else
Locate 12, 10 : Print Space$(70)
Locate 12, 10 : Print Name$, Vorname$, Ort$
LoescheEingabefelder()
EndIf
EndWhile
Proc Fensteraufbau
TBox 1, 1 - 9, 35; 2
Locate 2,2 : Print "Name : "
Locate 3,2 : Print "Vorname : "
Locate 4,2 : Print "Ort : "
Locate 5,2 : Print "Straße : "
Locate 6,2 : Print "Telefon : "
Locate 7,2 : Print "Nochmal (J/N) ?"
Locate 1,5 : Print "Eingaben"
EndProc
Proc LoescheEingabeFelder
Locate 2,13 : Print Space$(22)
Locate 3,13 : Print Space$(22)
Locate 4,13 : Print Space$(22)
Locate 5,13 : Print Space$(22)
Locate 6,13 : Print Space$(22)
EndProc
End
Was die Längenbegrenzung betrifft : Da hat mal irgendwer was gebastelt :
DECLARE testtext0$,testtext1$,testtext2$
Proc Dput
Parameters x%, y%, r$, size%, mode%
declare DIend%,blink%,mod0$,mod1$,mod2$,curs$,a$
'Vorgaben für die Eingabe Modis definieren"
mod0$="0123456789"'modus 0 = nur Zahlen
mod1$="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"'modus 1 = Nur Buchstaben
mod1$=mod1$+"-_.: !?"'modus 1 = plus ggf. sonderzeichen
mod2$=mod0$+mod1$'modus 2 = Zeuichen von modus 1 und modus 2
locate x%,y%
print r$;":";
whilenot DIend%
if blink%=1'falls blinkender Cursor gewünscht ist
curs$="_ "'Cursor anzeigen
else
curs$=" "'Kein Cursor
endif
blink%=abs(blink%-1)' damit wird Blink% immer 0 oder -1
settimer 500'wartezeit 500 ms wenn keine taste gedrückt wird
waitinput'warten auf Eingabe ereigniss (Tastatur, Maus..)
killtimer
'Hier die Auswertung der eingabe
if (%scankey<>0)' wurde eine taste gedrückt????
if %scankey = 8' Del Taste gedrückt
case @len(a$)>=1: let a$=@mid$(a$,1,@len(a$)-1)'dann die Stringvariable um 1 stelle abschneiden wenn Länge Größer gleich 1 zeichen ist
elseif %scankey = 13'Enter Taste
DIend%=1
else'weder ENTER noch DEL
if (@len(a$)<>size%)'ist die MaxLänge noch nicht erreicht???
if mode% = 0
case @instr(chr$(%scankey),mod0$)<>0: a$=a$+mid$(mod0$,@instr(chr$(%scankey),mod0$),1)'Die Zeichen die in mod0$ angegeben sind zulassen (hier nur Zahlen)
elseif mode% = 1
case @instr(chr$(%scankey),mod1$)<>0: a$=a$+mid$(mod1$,@instr(chr$(%scankey),mod1$),1)'Die Zeichen die in mod1$ angegeben sind zulassen (hier nur Buchstaben)
elseif mode% = 2
case @instr(chr$(%scankey),mod2$)<>0: a$=a$+mid$(mod2$,@instr(chr$(%scankey),mod2$),1)'Die Zeichen aus in mod2$ (hier nur Zahlen und Buchstaben)
endif
endif
endif
endif
locate x%,y%
case DIend%=0:print r$;":";a$;curs$
wend
PRINT r$;":";a$;" "
return a$
endproc
'Aufruf der Procedure
Dput 3,10,"Geben Sie Ihre PLZ ein",5,0
testtext0$= $(0)'Rückgabewert (eingabe) in Variable holen
Dput 4,5,"Geben Sie Ihre Ihren Namen ein",15,1
testtext1$= $(0)'Rückgabewert (eingabe) in Variable holen
Dput 5,5,"Geben Sie Ihre Ihre Strasse + Nr ein",15,2
testtext2$= $(0)'Rückgabewert (eingabe) in Variable holen
print "Deine Eingaben waren "
print testtext0$
print testtext1$
print testtext2$
waitinput
Möglicherweise kannst du auch das verwenden. |
| | | Benutze XPROFAN X3 + FREEPROFAN Wir sind die XProfaner. Sie werden von uns assimiliert. Widerstand ist zwecklos! Wir werden alle ihre Funktionen und Algorithmen den unseren hinzufügen.
Was die Borg können, können wir schon lange. | 02.06.2017 ▲ |
| |
| | Jörg Sellmeyer | Na locate und co sind da aber Elefantenbüchsen für Flöhe. Wenn dann doch lieber DrawText X, Y, S[, N] Damit kann man pixelgenau positionieren. Wenn man sich die Arbeit unbedingt machen möchte... |
| | | | |
| | H.Brill | Stimmt schon, was du schreibst. Weiß aber nicht, was das bringen soll. Er muß dann sowieso mit Input arbeiten, wenn wir mal im Grafikmodus bleiben.
Das Input im Grafikmodus gibt es ja nicht.
Und eine bestimmte Schrifthöhe muß man ja auch haben, um vernünftig das mit DrawText Geschriebene lesen zu können bzw. was eingeben kann. Nach meiner Erfahrung ist da nicht viel Unterschied, was den Platzbedarf angeht.
Da müßte Mindanao mal genau sagen, was er haben will. Wenn ich Blitz 3 D sehe, ist es auf jeden Fall mal keine GUI. Das konnte man nur mit dem normalen Blitzbasic machen. |
| | | Benutze XPROFAN X3 + FREEPROFAN Wir sind die XProfaner. Sie werden von uns assimiliert. Widerstand ist zwecklos! Wir werden alle ihre Funktionen und Algorithmen den unseren hinzufügen.
Was die Borg können, können wir schon lange. | 02.06.2017 ▲ |
| |
| | Mindanao | Hallo Leute In Blitz 3D gibt es ein Input das man, egal ob Fenster oder NichtFenster, überal in Pixelschritten hinpinnen kann. Das Problem ist, das auf die Eingabe halt immer gewartet wird. In XProfan kann man bei Input scheinbar nicht mit anderen und grösseren Schriften arbeiten. Warum ich das Pixelgenau haben möchte liegt an der Art Bedienoberfläche wie ich sie mag. Bei allen Programmen die ich bis jetzt programmiert habe, mache ich mir die Programmoberfläche mit allen Grafiken, Knöpfen u.s.w. alles selber. Die Eigaberoutine in Blitzbasic habe mir auch selber geschrieben. Die arbeitet mit Tastenabfrage, man kann immer zu den einzelnen Eingaben per Tastatur hin und herspringen,beliebige Schriftenn u.s.w. Die Function habe ich mir heute ausgedruckt, und werde versuchen diese 1 zu 1 in XProfan umzusetzen. Sollte hinzukriegen sein. |
| | | | |
| | Mindanao | Hallo ! Ich habe mir nochmal die beigefügten Quelltexte angeschaut. Das zweite Beispiel von H.Brill ist eigentlich genau das was ich suche, allerdings mit zwei wichtigen änderungen. Das Pixelgenaue, indem man statt Print den Befehl Text nimmt wahrschein kein Problem. Das zweite, der Zehnerblock, der geht mit diesem Quelltext nämlich leider auch nicht und bei der Art von Abfrage wird es wahrscheinlich auch nicht gehen. |
| | | | |
| | H.Brill | Du hast recht. Der Zehnerblock geht nicht. Der Scancode ist auch ein anderer, wie in der Tabelle der Tastencodes (96 - 105) angegeben ist. Richtig geht es nur in einem Editfeld. Das würde ich an deiner Stelle nehmen, da man dieses auch pixelgenau dimensionieren kann und obendrein kann man auch die Anzahl der einzugebenden Zeichen einstellen.
PS: Wenn du haben willst, daß in einem Editfeld nur Zahlen, Komma oder Punkt zugelassen wird, siehe Anhang. |
| | | Benutze XPROFAN X3 + FREEPROFAN Wir sind die XProfaner. Sie werden von uns assimiliert. Widerstand ist zwecklos! Wir werden alle ihre Funktionen und Algorithmen den unseren hinzufügen.
Was die Borg können, können wir schon lange. | 10.06.2017 ▲ |
| |
| | Mindanao | Hallo Ersmal Danke das sich immer noch jenand Gedanken zu diesem Thema macht. Den Code von Dir, mit den guten ansätzen, bin ich schon dran an meine bedürfnisse anzupassen. Generell bin dabei die Befehle von von Blitz 3D in XProfan zu finden. Nochmal zum Zehnerblock. Ich habe mir für die Arbeit einige Helferlei in Blitz 3D programmiert, die auch alle funktionieren, bis auf das letzte, wo halt der Zehnerblock nicht geht. Diesen Tool dient dazu, für einen Druckauftrag der fast täglich kommt viele Daten einzugeben. Alle meine Helferlein werden nicht nur von mir, auch von Kollegen genutzt. Es soll alles ohne Maus funktionieren und die Daten nacheinander eingegeben werden. Die Daten werden aufbereitet und dann als Datensätze in éinem Ordner abgelegt. Ein Ordner für den Druckauftrag, jedes File enpricht einer zu druckenden Rolle. Nachdem das gespeichert ist werden auf einem Etikettendrucker für jede Rolle entsprechende Rollenetiketten gedruckt und danach noch auf einem zweiten Etikettendrucker passende grössere Kartonetiketten. An den Filebefehlen bin dran. Kleine probierschnipsel gehen schon. Beim drucken habe ich noch einige Probleme. Das drucken soll alles ohne aufpopende Fenster gehen. Ich muss im Programm mit 3 Druckern arbeiten, also im Programm auswählen, drucken und zu schluss wieder den Standartdrucker setzen können. Îch habe zwar den einen oder anderen Befehl schon gefunden, aber halt noch nicht alle. Da währe noch die Hilfefunktion. Zuerst mal grosses Lob das alles in deutsch ist, das viel zu lesen da ist, aber ich finde nur schwer das was ich eigentlich suche. Zum Thema drucken findet sich zwar was, aber irgentwie fehlt immer was. Naja, ich bin 62, vieleicht fehlt langsam der Überblick fürs grosse ganze. |
| | | | |
| | H.Brill | Hallo, bin auch nur 3 Jahre jünger, als du. Bin dafür aber schon seit Anfang an hier dabei.
Ich habe dir mal ein kleines Beispielprogramm mit reichlich Kommentaren gemacht. Vielleicht hilft es dir ja weiter :
Declare Dialog&, Btn1&, Edit1&, Edit2&, Edit3&, Ende&
Ende& = 0
WindowTitle "Editfelder"
Window 600, 400
' Da in einem Dialogfenster auch die ENTER-Taste im Editfeld
' funktioniert, nehmen wir einen Dialog statt einem normalen Fenster.
Dialog& = Control("DIALOG","",$54000000,10,10,200,150,%hwnd,0,%hinstance)
Create("Text", Dialog&, "Nummer :", 10, 10, 80, 20)
Create("Text", Dialog&, "Name :", 10, 35, 80, 20)
Create("Text", Dialog&, "Ort :", 10, 60, 80, 20)
Edit1& = Create("Edit", Dialog&, "", 100, 10, 90, 20)
Edit2& = Create("Edit", Dialog&, "", 100, 35, 90, 20)
Edit3& = Create("Edit", Dialog&, "", 100, 60, 90, 20)
Btn1& = Create("Button", Dialog&, "", 10, 130, 40, 25)
' Um die Eingabe in einer Schleife zu haben, sodaß der Cursor
' wieder ins 1. Eingabefeld springt, wird hier
' der Trick mit einem unsichtbaren Button angewandt.
' Dort wird einfach der Focus wieder auf das erste
' Eingabefeld gelegt.
' Editfelder auf 10 Zeichen limitieren
SendMessage(Edit1&, $00C5, 10, 0)
SendMessage(Edit2&, $00C5, 10, 0)
SendMessage(Edit3&, $00C5, 10, 0)
Usermessages $10' Schließen-Kreuz abfragen
SetFocus(Edit1&)
ShowWindow(Btn1&, 0)' Button unsichtbar machen
WhileNot Ende&
WaitInput
If GetFocus(Btn1&)
' Hier könnten die Editfelder ausgelesen werden
' bzw. die Eingaben ausgewertet werden.
' Sollten die Editfelder für die nächste Eingabe
' leer sein, einfach mit SetText Edit1&, "" usw.
' löschen.
SetFocus(Edit1&)
EndIf
Case %UMessage = $10 : Ende& = 1
EndWhile
End
Mit dem Drucken sehen wir dann später. |
| | | Benutze XPROFAN X3 + FREEPROFAN Wir sind die XProfaner. Sie werden von uns assimiliert. Widerstand ist zwecklos! Wir werden alle ihre Funktionen und Algorithmen den unseren hinzufügen.
Was die Borg können, können wir schon lange. | 10.06.2017 ▲ |
| |
|
AntwortenThemenoptionen | 11.450 Betrachtungen |
ThemeninformationenDieses Thema hat 3 Teilnehmer: |