Fehlerhafte Function und Mausabfrage bei Onscreen Eingabe

Previous topic - Next topic

xverbatim

Hallo,

ich stehe irgendwie auf dem Schlauch und finde keine Lösung ;-(

Vielleicht hat ja jemand ein Tipp ?

Ich schreibe gerade an einer OnScreen Eingabe nur für Zahlen; klappt soweit auch gut, das Problem in unterem Code ist nur,
das die untere Zeile unter //Lösung also -->zahleingabe$=zahleingabe$+name$ nicht ausgeführt wird; die muß aber hierher, weil nur hier die If-Abfrage durchlaufen wird, wenn die Maustaste losgelassen wird...geht aber nicht ;-(


unter Zeile Fehler wird sie zwar ausgeführt, aber die Eingabe wird nicht gestoppt, dass heißt, wenn die Maustaste nicht losgelassen wird, wiederholt sich ständig die
angeklickte Taste, soll aber nur einmal ausgeführt werden...
ohje, ich hoffe, ihr versteht wie ich das meine ?

Jemand ein Durchblick ???

Gruß+Danke
Thomas


Code (glbasic) Select

// ------------------------------------------------------------- //
// ---  DRAW_KEY  ---
// ------------------------------------------------------------- //
FUNCTION draw_key: name$, x, y
// Diese Variablen sind als LOCAL definiert:
// name$, x, y
    LOCAL gedrueckt
    PRINT mx,90,90
   
ALPHAMODE -1

// überprüfe die breite+höhe der taste NORMALZUSTAND

IF mx>x AND mx<x+32 AND my>y AND my<y+32 AND b1=1 AND gedrueckt=0
gedrueckt=1

  DRAWSPRITE 4,x,y  // zeichne die taste und gebe ihr
  PRINT name$,50,50 // einen namen

//FEHLER  ----> ################ HIER IST DAS PROBLEM, DIE VARIABLE WIEDERHOLT SICH STÄNDIG EINGABE z.B. 1 zeigt 1111111111
zahleingabe$=zahleingabe$+name$

GOTO beende

ENDIF

// überprüfe die breite+höhe der taste Taste Over
IF mx>x AND mx<x+32 AND my>y AND my<y+32 AND b1=1 AND gedrueckt=1
gedrueckt=0
DRAWSPRITE 3,x,y

//LÖSUNG HIER GEHT ABER NICHT ???***************** HIER MÜßTE DIE VARIABLE EIGENTLICH ÜBERGEBEN WERDEN ??? ###############
zahleingabe$=zahleingabe$+name$

GOTO beende

ENDIF

DRAWSPRITE 3,x,y

beende:

PRINT name$,x+5,y+5

ENDFUNCTION // DRAW_KEY




S.O.P.M.

Naja... name$ wird an zahleingabe$ nicht übergeben, sondern immer wieder angehängt, soweit ich das sehe. Wenn ich richtig verstehe, was erreicht werden soll, dann solltest Du zahleingabe$=name$ schreiben.
Notebook PC Samsung E372 Core i5 @ 2,6 GHz; 4 GB RAM; Win 7 Home Premium

xverbatim

Quote from: S.O.P.M. on 2008-Nov-09
Naja... name$ wird an zahleingabe$ nicht übergeben, sondern immer wieder angehängt, soweit ich das sehe. Wenn ich richtig verstehe, was erreicht werden soll, dann solltest Du zahleingabe$=name$ schreiben.

hi,

erstmal danke...

naja, name$ ist immer die angeklickte taste und jede angeklickte taste steht dann in
zahleingabe$(einzelne zahlen 0-9 werden angeklickt und die komplette zahle steht dann in zahleingabe$) ist schon richtig so...aber zahleingabe bleibt leer, wenn ich das in der abfrage bei

IF mx>x AND mx<x+32 AND my>y AND my<y+32 AND b1=1 AND gedrueckt=1
setze ?


*** ICH BLICK NICHT DURCH ***



S.O.P.M.

Du scheinst die Funktion draw_key für jede einzelne Taste aufzurufen, womit die Variable gedrueckt natürlich jedes mal wieder 0 ist, was hintereinander weg zu einem positiven Ergebnis der ersten Abfrage führt - Folge: dieses ständige Wiederholen der Variable. Mach mal gedrueckt STATIC.
Notebook PC Samsung E372 Core i5 @ 2,6 GHz; 4 GB RAM; Win 7 Home Premium

Schranz0r

I <3 DGArray's :D

PC:
AMD Ryzen 7 3800X 16@4.5GHz, 16GB Corsair Vengeance LPX DDR4-3200 RAM, ASUS Dual GeForce RTX™ 3060 OC Edition 12GB GDDR6, Windows 11 Pro 64Bit, MSi Tomahawk B350 Mainboard

xverbatim

Hallo nochmal,


static hatte mich leider auch nicht zum erfolg gebracht, ich habe nochmal den kompletten code überarbeitet, jetzt habe ich ein anderes problem ;-(

bb$=draw_key (zahl,zahl*32,210)

hier wird mir in bb$ die angeklickte Zahl (von 0-9) ausgegeben das problem ist nur, das ich keine 0 zurückgeben kann, bzw. die 0 steht ja dafür, das KEINE
TASTE angeklickt wurde...??? BIG PROBLEM NR.1 ich brauche auch eine Taste mit 0 ??? und nu ???

hat jemand evtl. eine Idee ?

oder evtl. einen code für die onscreen eingabe von zahlen :-) *man kann ja mal fragen*

Gruß Thomas



Code (glbasic) Select


// --------------------------------- //
// Project: keyboard
// Start: Saturday, November 08, 2008
// IDE Version: 5.360

GLOBAL zahlen$,zahl$,gedrueckt,mx,my,b1,b2

LOADSPRITE "key1.bmp",3
LOADSPRITE "key2.bmp",4
LOADSPRITE "hand.bmp",5
LOADFONT "smalfont.png",1
SETFONT 1
LOADFONT "smalfont2.png",2
LOADBMP "bild.bmp"

spring:

MOUSESTATE mx, my, b1 ,b2

  GOSUB erstelle_tasten
 
PRINT "X",mx,my

SHOWSCREEN
GOTO spring



SUB erstelle_tasten:

FOR zahl=0 TO 9

  bb$=draw_key (zahl,zahl*32,210)

IF bb$<>0 
 
   t$=t$+bb$
 
ENDIF

NEXT

PRINT t$,24,74


RETURN
ENDSUB




// ------------------------------------------------------------- //
// ---  DRAW_KEY  ---
// ------------------------------------------------------------- //
FUNCTION draw_key: name$, x, y


ALPHAMODE -1

// überprüfe die breite+höhe der taste NORMALZUSTAND



IF gedrueckt=1 AND b1=0

gedrueckt=0


   
ENDIF







IF mx>x AND mx<x+32 AND my>y AND my<y+32 AND b1=1 AND gedrueckt=0

gedrueckt=1
DRAWSPRITE 4,x,y  // zeichne die taste und gebe ihr
  PRINT name$,x+5,y+5
bb$=name$


RETURN bb$
GOTO beende
ENDIF


DRAWSPRITE 3,x,y
beende:


PRINT name$,x+5,y+5


ENDFUNCTION // DRAW_KEY





S.O.P.M.

Schreibe die Funktion doch so um, dass bb$="" ist, wenn keine Taste gedrückt wurde, dann ist das Problem schon gelöst.

Einen fertigen Code dafür könnte ich Dir zwar machen, allerdings sehe ich dabei die Gefahr, dass Du ihn nur übernimmst, ohne ihn zu verstehen und das ist nicht gut ;)
Notebook PC Samsung E372 Core i5 @ 2,6 GHz; 4 GB RAM; Win 7 Home Premium

xverbatim

Quote from: S.O.P.M. on 2008-Nov-10
Schreibe die Funktion doch so um, dass bb$="" ist, wenn keine Taste gedrückt wurde, dann ist das Problem schon gelöst.

Einen fertigen Code dafür könnte ich Dir zwar machen, allerdings sehe ich dabei die Gefahr, dass Du ihn nur übernimmst, ohne ihn zu verstehen und das ist nicht gut ;)

hi nochmal,

so einfach ist das leider nicht, ich habe das gefühl, das bb$="" und bb$=0 irgendwie das gleiche ist oder irre ich mich?
ich bekomme es einfach nicht hin, dass ich die taste "0" übergeben kann ?

Wo kann ich noch ansetzen ?

Gruß+Danke im Vorfeld
Thomas



Code (glbasic) Select

// --------------------------------- //
// Project: keyboard
// Start: Saturday, November 08, 2008
// IDE Version: 5.360

GLOBAL zahlen$,zahl$,gedrueckt,mx,my,b1,b2



LOADSPRITE "key1.bmp",3
LOADSPRITE "key2.bmp",4
LOADSPRITE "hand.bmp",5
LOADFONT "smalfont.png",1
SETFONT 1
LOADFONT "smalfont2.png",2
LOADBMP "bild.bmp"

spring:

  MOUSESTATE mx, my, b1 ,b2

GOSUB erstelle_tasten
 
//DRAWSPRITE 5, mx    ,my //ZEIGER FÜR DIE MOUSE

PRINT "X",mx,my

SHOWSCREEN

GOTO spring


SUB erstelle_tasten:

FOR zahl=0 TO 9

bb$=draw_key (zahl,zahl*32,210)

// wenn Taste angeklickt, dann speichere diese immer in t$--------->>>>>   GEHT NUR 1-9     ;-(

IF bb$<>0

   t$=t$+bb$

ENDIF

NEXT

PRINT t$,24,74

RETURN
ENDSUB




// ------------------------------------------------------------- //
// ---  DRAW_KEY  ---
// ------------------------------------------------------------- //

FUNCTION draw_key: name$, x, y

ALPHAMODE -1

//Wenn Mausetaste schonmal auf der angklickten Taste war und Maustaste wieder losgelassen, ist VAR gedrueckt=0

IF gedrueckt=1 AND b1=0

gedrueckt=0

ENDIF

//Überprüfe die Tasten Breite/Höhe , wenn Taste gedrückt --> VAR gedrueckt=1

IF mx>x AND mx<x+32 AND my>y AND my<y+32 AND b1=1 AND gedrueckt=0

gedrueckt=1
  DRAWSPRITE 4,x,y  // zeichne die taste und gebe ihr
  PRINT name$,x+5,y+5
bb$=name$


RETURN bb$
GOTO beende
ENDIF


DRAWSPRITE 3,x,y

beende:

//Gebe die Tasten aus 0,1,2,3,4,5,6,7,8,9

PRINT name$,x+5,y+5

IF b1=0

bb$=""
RETURN bb$

ENDIF

ENDFUNCTION // DRAW_KEY






S.O.P.M.

Quote...ich habe das gefühl, das bb$="" und bb$=0 irgendwie das gleiche ist oder irre ich mich?
Ist gleich. Ich bin von bb$="0" ausgegangen und das wäre nicht gleich mit bb$=""

Also... was soll ich sagen - ich fürchte, so wird das nichts. Ich blicke in Deinem Code nur schwer durch. Ein Problem ist mir schnell aufgefallen: Du übergibst der draw_key Funktion die Variable zahl, die danach in einen String umgewandelt wird. Daher hast Du bei 0 natürlich immer einen Leerstring, was die Abfrage dieser Taste unmöglich macht.

Eigentlich würde ich ja das Zeichnen der Tasten und die Abfrage, ob eine dieser angeklickt worden ist, voneinander trennen. Kombiniert geht es auch aber dann anders. Ich versuche mal kurz zu beschreiben, wie ich es machen würde. Wie gehabt, machst du Deine Schleife FOR zahl = 0 to 9, stellst die Taste dar (das Sprite und dann mit PRINT die Zahl darauf) und dann kommt die Abfrage - alles in dieser Schleife! Jetzt fragst Du aber die Variable gedrueckt ab und da Du in der Schleife bist, bekommst Du durch zahl immer die aktuelle Zahl dazu. So sollte es dann problemlos für jede Zahl funktionieren.
Notebook PC Samsung E372 Core i5 @ 2,6 GHz; 4 GB RAM; Win 7 Home Premium