Get Masken und springender Cursor

Alle Fragen um die Programmierung, die sich sonst nicht kategorisieren lassen. Von Makro bis Codeblock, von IF bis ENDIF

Moderator: Moderatoren

Antworten
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21200
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 210 Mal
Danksagung erhalten: 67 Mal

Get Masken und springender Cursor

Beitrag von Manfred »

Hi,

bei unserem letzten Treffen der XUG OS, hatte ich ein Phänomen gezeigt, das der Cursor im Textmodus innerhalb der Get Maske springt wie doll.

Es läuft so ab:

Es gibt mehrere Get Felder, in die Werte zum Suchen eingetragen werden können. Sobald eins der Get Felder mit einem Wert belegt ist und verlassen wird, werden die weiteren Get Felder abgefragt, ob irgendeines der Serie mit einem Wert belegt ist. Wenn ja, darf kein weiteres GET Felder der Serie mehr aktiviert werden. Das heißt, jedes GET Feld wird mit einer WHEN Abfrage vorher überprüft. Das Ergebnis ist, das bei langsamerern Rechnern, der Cursor bei dieser Aktion mehrfach über den Bildschirm springt, bevor er im Promptmenue landet. Anfangs dachte ich es wären die When Abfragen, bei jedem GET Feld. Auf der Devcon hatte ich dieses Andreas Herdt gezeigt. Nachdem ich ihm den Code davon zugeschickt hatte, gab er vorab schon mal den Tipp, ich sollte mir meine erweiterte SEND Funktion des GetReaders ansehen, die ich eingebaut habe. Er vermutet adhoc, das diese es wohl verursacht.

Code: Alles auswählen

IF GetPreValidate(oGet)
          oGet:setFocus()
          DO WHILE oGet:exitState == GE_NOEXIT
             DO WHILE oGet:exitState == GE_NOEXIT // das muß drinbleiben, weil sonst eine Endlosschleife
                nKey := INKEY(0)                                // bzw. Cursorzucken am Bildschirm angezeigt wird
                GetApplyKey(oGet,nKey)

             ENDDO
             IF ! GetPostValidate(oGet)                        // das muß drinbleiben, weil sonst das GET Feld
                oGet:exitState := GE_NOEXIT               // jedesmal gelöscht wird
             ENDIF
          ENDDO
          oGet:killFocus()
       ENDIF
Das ist das Teil. Ich bin ganz ehrlich ich habe mir das irgendwo zusammengeklaubt. Hat jemand evtl. so aus der Hüfte geschossen eine Idee, woran es liegen könnte?

Es sieht so aus:

Code: Alles auswählen

@ x,y GET ::var PICTURE "!!!!";
                      WHEN funktion();
                      VALID funktion();
                      SEND reader := {|o| Funktionoben(o,"Text am unteren Bildschirmrand")}
Genügt das um etwas dazu sagen zu können?
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16517
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Beitrag von Martin Altmann »

Hallo Manfred,
ganz ehrlich? Vergiss es - Du stellst doch sowieso gerade um nach GUI, oder? Warum willst Du dann Dich damit noch belasten?
Ansonsten: Rufe Deine Funktionoben in dem Codeblock doch nur dann auf, wenn Du nicht beim Prüfen die einzelnen Gets durchläufst...
Wenn Du also prüfst, setzt Du eine Variable auf .t. (z.B. lPruefe) und der Aufruf in Deinem SEND änderst Du entsprechend ab in

Code: Alles auswählen

SEND reader := {|o| iif( .not. lPruefe, Funktionoben(o,"Text am unteren Bildschirmrand"), ) }
Viele Grüße,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21200
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 210 Mal
Danksagung erhalten: 67 Mal

Beitrag von Manfred »

Hi Martin,

ganz ehrlich? Du hast Recht. Aaaaber. Jetzt wo ich den Tipp bekommen habe möchte ich natürlich auch wissen, warum es so ist. Außerdem denke auch an meinen Threadvorschlag. Es gibt sicherlich noch einige, die im Textmodus arbeiten und die evtl. diese Möglichkeit mit dem Hinweis für jedes Get Feld evtl. genauso gesucht haben. Ich finde diese Lösung nämlich echt toll.
Aber jetzt fällt es mir wie Schuppen von den Haaren: Ich denke einmal dass ich jetzt auch weiß, woran es damals unter Clipper gelegen hat. Hm, interessant.
Vielleicht gibt es wirklich eine relativ einfache Lösung dafür!?

PS: Außerdem bin ich gerade dabei alles über GUI zu lösen, aber noch weiß ich nicht ob ich schon so gut bin, dass ich alle meine Probleme auch gelöst bekomme. Noch habe ich keine Idee, wie ich die ganzen gekoppelten SLE Felder so baue, dass ich damit zufrieden bin. Es kann durchaus sein, das ich ein paar einzelne EXE aus dem Paket unter VIO noch laufen lassen muß....
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12909
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 46 Mal

Re: Get Masken und springender Cursor

Beitrag von AUGE_OHR »

hi,
Manfred hat geschrieben: Es gibt mehrere Get Felder, in die Werte zum Suchen eingetragen werden können. Sobald eins der Get Felder mit einem Wert belegt ist und verlassen wird, werden die weiteren Get Felder abgefragt, ob irgendeines der Serie mit einem Wert belegt ist. Wenn ja, darf kein weiteres GET Felder der Serie mehr aktiviert werden.
hm ... also wenn 1 GET x VALID(.NOT. EMPTY(x)) -> Action
Manfred hat geschrieben: Das heißt, jedes GET Feld wird mit einer WHEN Abfrage vorher überprüft
warum ? sobald 1 GET VALID ist nimmst du deine auszuführende Function
die mit CLEAR GETS abgeschlossen wird. Damit geht er dann "runter" bis
hinter das READ.
Manfred hat geschrieben:

Code: Alles auswählen

@ x,y GET ::var PICTURE "!!!!";
                      WHEN funktion();
                      VALID funktion();
                      SEND reader := {|o| Funktionoben(o,"Text am unteren Bildschirmrand")}
Da du ja "nur 1" GET haben will würde ich das WHEN weglassen und alles
über das VALID (IF(.NOT. EMPTY(x),myFunc,.T.)) realisieren und dort
dann auch das CLEAR GETS einbauen.

Frage : Warum darf der User nicht mehrere GET mit "Teilen" füllen ?
... ab v1.9x gibt es Ordwildseek() ... :)

gruss by OHR
Jimmy
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21200
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 210 Mal
Danksagung erhalten: 67 Mal

Beitrag von Manfred »

Moin,

Ich habe die Sache mit dem SEND entfernt und das Problem besteht immer noch. Das scheint es also nicht gewesen zu sein....
Die GET Felder werden jeweils für Erfassung und Suchen/Ändern genutzt. In Kombination ergeben die 4 Suchfelder überhaupt nichts, deshalb frage ich jedesmal ab, ob das vorhergehende leer ist oder nicht.
Das mit dem CLEAR GETS wirkt nur wenn ein Feld belegt wurde, wenn ich die Suchfelder durchgehe, dann springt der Cursor trotzdem, weil ja noch andere Felder dazwischen liegen, die nicht aktiviert werden dürfen bei der Suche, somit wirkt in dem Falle auch kein CLEAR GETS, weil es ja erst nach einer erlaubten Feldeingabe gesetzt wird.

Hm, was mag da wohl passieren?
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16517
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Beitrag von Martin Altmann »

Manfred,
ich hatte das selbe "Problem" damals, nachdem ich mein Clipperprogramm als CRT compiliert hatte.
Hat mich aber nicht gestört, da ich nach GUI gegangen bin.

Viele Grüße,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21200
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 210 Mal
Danksagung erhalten: 67 Mal

Beitrag von Manfred »

Martin,

Du bist ein schlimmer Finger...... :lol:
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Benutzeravatar
urbi
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 142
Registriert: So, 26. Mär 2006 18:47
Wohnort: 76185 Karlsruhe
Kontaktdaten:

Beitrag von urbi »

Hallo Manfred,

kann den schlimmen Finger nur Zustimmen

beim Umstieg von Clipper nach xBase habe ich mich anfangs auch an
CRT versucht, bin dann aber sehr schnell an Grenzen gestossen.

das umschreiben nach GUI ist mit natürlich Arbeit und eventuell schlimmen fingern verbunden, war aber die beste Investition für
Wissen und Produkt.

Gruss
Rainer
urbi
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21200
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 210 Mal
Danksagung erhalten: 67 Mal

Beitrag von Manfred »

Hi Rainer,

sicherlich habt ihr beide Recht. Ich amüsiere mich nur darüber, mit welcher Hartnäckigkeit Martin mich zu GUI hinschiebt. :D
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Benutzeravatar
urbi
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 142
Registriert: So, 26. Mär 2006 18:47
Wohnort: 76185 Karlsruhe
Kontaktdaten:

Beitrag von urbi »

Hi Manfred,

hör auf Martin und denk an Gorby,

wer zu späht kommt ... :cry:


Gruss
Rainer
urbi
Antworten