Deutsch
Forum

Suche Input mit Pixelgenauer x,y positionierung,beschränkung auf n Zeichen

 
- Seite 1 -



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.
 
01.06.2017  
 



 
- Seite 1 -



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.
 
01.06.2017  
 




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

 
XProfan X3
Windows XP SP2 XProfan X4
... und hier mal was ganz anderes als Profan ...
02.06.2017  
 




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...
 
XProfan X3
Windows XP SP2 XProfan X4
... und hier mal was ganz anderes als Profan ...
02.06.2017  
 




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.
 
02.06.2017  
 




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.
 
06.06.2017  
 




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.

2 kB
Hochgeladen:10.06.2017
Ladeanzahl74
Herunterladen
 
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.
 
10.06.2017  
 




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  
 



 
- Seite 2 -



Mindanao
Schon wieder da !
Habe Dein letztes Beispiel mal getestet. Eigentlich könnte ich es nutzen, wenn ich diese Eingabe-boxen auch mit beliebiger Fontgrösse nutzen könnte.
 
10.06.2017  
 




H.Brill
Kannst du ja für jedes einzelne Editfeld
bzw. Dialogelement machen :
hFont& = Create("Font","Arial",12,12,0,0,0)
SetFont Edit1&,hFont&

Und für DrawText nimmst du UseFont.

Must mal ausprobieren, welcher Font in welcher
Größe am besten für dich paßt. Es sind ja schon
etliche im Windowssystem vorinstalliert.
Bekommst du aber auch mit AddFonts raus.
 
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  
 




Antworten


Thementitel, max. 100 Zeichen.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Beitrag  Schrift  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Themenoptionen

11.415 Betrachtungen

Unbenanntvor 0 min.
iF31.10.2020
Langer08.10.2018
Walter Köhler26.09.2018
Magda02.06.2018
Mehr...

Themeninformationen

Dieses Thema hat 3 Teilnehmer:

Mindanao (6x)
H.Brill (6x)
Jörg Sellmeyer (2x)


Admins  |  AGB  |  Anwendungen  |  Autoren  |  Chat  |  Datenschutz  |  Download  |  Eingangshalle  |  Hilfe  |  Händlerportal  |  Impressum  |  Mart  |  Schnittstellen  |  SDK  |  Services  |  Spiele  |  Suche  |  Support

Ein Projekt aller XProfaner, die es gibt!


Mein XProfan
Private Nachrichten
Eigenes Ablageforum
Themen-Merkliste
Eigene Beiträge
Eigene Themen
Zwischenablage
Abmelden
 Deutsch English Français Español Italia
Übersetzungen

Datenschutz


Wir verwenden Cookies nur als Session-Cookies wegen der technischen Notwendigkeit und bei uns gibt es keine Cookies von Drittanbietern.

Wenn du hier auf unsere Webseite klickst oder navigierst, stimmst du unserer Erfassung von Informationen in unseren Cookies auf XProfan.Net zu.

Weitere Informationen zu unseren Cookies und dazu, wie du die Kontrolle darüber behältst, findest du in unserer nachfolgenden Datenschutzerklärung.


einverstandenDatenschutzerklärung
Ich möchte keinen Cookie