SLE-Part mit preblock

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

Moderator: Moderatoren

Benutzeravatar
Lutz Rübe
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 144
Registriert: Mi, 02. Aug 2006 18:13
Wohnort: 24536 Neumünster
Danksagung erhalten: 6 Mal
Kontaktdaten:

SLE-Part mit preblock

Beitrag von Lutz Rübe »

Moin alle zusammen,
ich habe für mein folgendes Problem noch keine Lösung gefunden. (siehe dazu auch den angehängten Screenshot):
ich habe eine Menge Sle-Parts, die ich benötige um Zahlen einzugeben. Über den :preblock und .non.editable bekomme ich auch Ergebnisse in die grauen Felder angezeigt. Jedoch muss ich diese Felder jeweils über Tabstop ansteuern.
Wie können mir diese Ergebnisse sofort und ohne Tabstop angezeigt werden ? Es sind Ergebnisfelder, die angezeigt werden sollen/müssen, aber die Ansteuerung über Tabstop/Maus ist zu zeitaufwendig.

Es handelt sich hier um eine Datenerfassungsmaske mit Ergebnisanzeige. Spätestens wenn ich auf "OK" klicke, sollen die Ergebnisse alle angezeigt werden (und wenn korrekt, in der Datenbank gespeichert werden).

Viele Grüße
Lutz
Dateianhänge
Listeneingabe 2020-07-14 151016.jpg
Listeneingabe 2020-07-14 151016.jpg (31.45 KiB) 10308 mal betrachtet
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: SLE-Part mit preblock

Beitrag von AUGE_OHR »

hi,

mir ist deine Maske nicht ganz klar.
in der oberen Reihe sind SLE wo du was eingeben kannst.

sollen die nicht editierbaren Werte "nach" Eingabe in die SLE 1,4,7 und 10 erfolgen :?:
wenn es "vorher" sein soll : woher kommen die Zahlen ? in welcher Beziehung stehen die zu 1,4,7 und 10 :?:

wie schon gesagt ist mir nicht ganz klar was du machen möchtest

---
"nachher" : o:killInputFocus := {| uNIL1, uNIL2, self | ... }
"vorher" : o:setInputFocus := {| uNIL1, uNIL2, self | ... }
gruss by OHR
Jimmy
georg
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2823
Registriert: Fr, 08. Feb 2008 21:29
Hat sich bedankt: 95 Mal
Danksagung erhalten: 13 Mal

Re: SLE-Part mit preblock

Beitrag von georg »

Guten Morgen, Lutz -


schau Dir mal den :keyBoard-Slot an. Wenn der ausgelöst wird, kannst Du z.B. über :editBuffer() den aktuellen Inhalt des SLE abfragen und an anderer Stelle ausgeben.
Liebe Grüsse aus der Eifel,

Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
Dieter
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 237
Registriert: Do, 14. Aug 2008 14:59
Wohnort: Straelen
Hat sich bedankt: 2 Mal
Danksagung erhalten: 3 Mal

Re: SLE-Part mit preblock

Beitrag von Dieter »

Hallo Lutz,
ich gehe davon aus, dass nachdem du alle deine Daten eingegeben hast, die gesperrten Sle-Felder berechnet werden sollen. Dazu hast du schon den GetData-Pushbutton vorgesehen. Ich würde diesen Pushbutton aber SetData nennen, da mit oSle:setData(nWert) alle gesperrten Sle-Felder befüllt werden müssen.
Hierzu solltest du den folgenden Codeblock für den Pushbutton programmieren:
oPbSetData:activate = {|| meineBerechnung(oSle1, oSle2,..., oSle11) }
In der Prozedure meineBerechnung kannst du dann oSleGesperrt1:setData(nWert1), oSleGesperrt2:setData(nWert2) usw. programmieren.
Viele Grüße

Dieter

Was man nicht versteht, besitzt man nicht.
Dieter
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 237
Registriert: Do, 14. Aug 2008 14:59
Wohnort: Straelen
Hat sich bedankt: 2 Mal
Danksagung erhalten: 3 Mal

Re: SLE-Part mit preblock

Beitrag von Dieter »

Hallo Lutz,

kleiner Nachtrag: Du musst alle deine Sle-Objekte, also auch die gesperrten in der Parameterliste aufführen!
Viele Grüße

Dieter

Was man nicht versteht, besitzt man nicht.
Benutzeravatar
Lutz Rübe
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 144
Registriert: Mi, 02. Aug 2006 18:13
Wohnort: 24536 Neumünster
Danksagung erhalten: 6 Mal
Kontaktdaten:

Re: SLE-Part mit preblock

Beitrag von Lutz Rübe »

Moin, moin,
erst mal Danke für euren Input und Ideen. Ich werde sie ausprobieren und dann auch versuchen umzusetzen.

@Auge_Ohr: Die gesperrten SLE-Felder sind alle mit einer PreBlock-Berechnung belegt. So z.B. ergibt sich die 450 in der zweiten Zeile auf der Differenz von SLE2 (=11) und SLE3 (=2) multipliziert mit 50, die 250 ergeben sich aus der Differenz von SLE 5 und SLE 6 ebenfalls multipliziert mit 50. Die dritte Zeile errechnet sich etwas komplizierter: (SLE6+SLE9+SLE12) * 30 = 210, (SLE3+SLE9+SLE12)* 30 = 150. Das SLE 13 ist die Summe der SLE's 2,3,5,6,8,9,11 und 12.
Die letzte Zeile ist die Summe der darüber liegenden Felder: 370 + 450 + 210 = 1030, 223 + 250 + 150 = 623.

Soviel zur Logik hinter den Zahlen.

Ideal wäre es, wenn nach der Eingabe bei SLE2 und SLE3 gleich das Ergebnis ( in diesem Fall 450) zu sehen wäre. Ebenfalls das Ergebnis des SLE 13.
ein schönes WE noch.
Lutz
Dieter
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 237
Registriert: Do, 14. Aug 2008 14:59
Wohnort: Straelen
Hat sich bedankt: 2 Mal
Danksagung erhalten: 3 Mal

Re: SLE-Part mit preblock

Beitrag von Dieter »

Hallo Lutz,

die SetInputFocus-Codeblöcke wirken erst, wenn der User in das Sle klickt oder mit der Tab- oder Enter-Taste dort hin will. Dieses Verhalten jedoch bemängelst du aber!
Zitat:
Jedoch muss ich diese Felder jeweils über Tabstop ansteuern.
Wie können mir diese Ergebnisse sofort und ohne Tabstop angezeigt werden ? Es sind Ergebnisfelder, die angezeigt werden sollen/müssen, aber die Ansteuerung über Tabstop/Maus ist zu zeitaufwendig.
Deshalb mein Vorschlag mit einer zentralen Procedure, die durch einen Pushbutton ausgelöst wird. Wenn du die Referenzen auf alle deine SLEs hast, sind die Berechnungen doch sehr einfach. Vergeß also die Pre-Block-Berechnung!
Viele Grüße

Dieter

Was man nicht versteht, besitzt man nicht.
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15689
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: SLE-Part mit preblock

Beitrag von brandelh »

die SetInputFocus-Codeblöcke wirken erst, wenn der User in das Sle klickt oder mit der
Tab- oder Enter-Taste dort hin will. Dieses Verhalten jedoch bemängelst du aber!
die Aussage ist nicht ganz richtig, wenn der Inputfocus ausgelöst wird, IST man schon im SLE drin.
Eine echte "vorher" Prüfung ist nicht möglich, da jeder mit der Maus springen kann wie er will.
Man kann dann zwar in ein anderes Feld mit SetInputFocus() zwingen, aber so hat man auch sehr schnell eine Endlosschleife !

Ich nutze einen Button "Weiter" oder "Speichern", der dann prüft ob alle Infos da und valide sind, wenn nicht Meldung.
Gruß
Hubert
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14641
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 87 Mal
Kontaktdaten:

Re: SLE-Part mit preblock

Beitrag von Jan »

Ich hab das schon so gemacht das ich den SetInputFocus fest belegt habe mit dem Sprung in ein definiertes oder variables Element, z. B. das auf das letzte verlassene gültige SLE folgende SLE. Dann kann man zwar das "verbotene" SLE anspringen mit Maus, aber ist da auch schneller wieder raus als man drin ist. Hat also gar keine Chance, da irgend etwas drin einzugeben oder so.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15689
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: SLE-Part mit preblock

Beitrag von brandelh »

wenn du dann dort eine Plausi drin hast, dann ist die Endlosschleife perfekt.

Wenn ein SLE nicht angesprungen werden soll, dann muss man die disablen oder readonly setzten.
Gruß
Hubert
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15689
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: SLE-Part mit preblock

Beitrag von brandelh »

Lutz Rübe hat geschrieben: Di, 14. Jul 2020 15:33 Moin alle zusammen,
ich habe für mein folgendes Problem noch keine Lösung gefunden. (siehe dazu auch den angehängten Screenshot):
ich habe eine Menge Sle-Parts, die ich benötige um Zahlen einzugeben.
...
Es handelt sich hier um eine Datenerfassungsmaske mit Ergebnisanzeige.
Spätestens wenn ich auf "OK" klicke, sollen die Ergebnisse alle angezeigt
werden (und wenn korrekt, in der Datenbank gespeichert werden).
sowas habe ich auch, grundsätzlich könnte man im Keyboard slot eine "Berechnungs/Anzeigefunktion" aufrufen,
muss man halt aufpassen, dass es nicht zu lange dauert.
Auf einen Button ist kein Problem, da kannst ja auf alle SLE zugreifen und anzeigen etc. ....
Gruß
Hubert
Benutzeravatar
Lutz Rübe
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 144
Registriert: Mi, 02. Aug 2006 18:13
Wohnort: 24536 Neumünster
Danksagung erhalten: 6 Mal
Kontaktdaten:

Re: SLE-Part mit preblock

Beitrag von Lutz Rübe »

Hallo Jan und Hubert,
habe ich das richtig verstanden, dass ich mit :keyboard in einem nicht editierbaren, non-tabstop SLE eine Berechnung durchführen kann, die auf der Eingabe von anderen SLE's basiert ?

Habt ihr da mal ein kleines Beispiel ?

Besten Dank im voraus.
Lutz
Dieter
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 237
Registriert: Do, 14. Aug 2008 14:59
Wohnort: Straelen
Hat sich bedankt: 2 Mal
Danksagung erhalten: 3 Mal

Re: SLE-Part mit preblock

Beitrag von Dieter »

Ja Hubert,
wenn ich in ein Sle klicke, dann bin ich also noch nicht drin! Du bist heute aber obergenau! :lol:
Du hast natürlich in gewisser Weise Recht. Es ist vergleichbar mit einem Sprung ins Wasser. Man ist nicht sofort im Wasser, sondern fliegt ersteinmal durch die Luft. :wink:
Ich nutze einen Button "Weiter" oder "Speichern", der dann prüft ob alle Infos da und valide sind, wenn nicht Meldung.
Meine Postings zum Thema empfehlen genau diesen Pushbutton.

@Lutz
Ich habe dir doch schon den Lösungsweg über den Pushbutton vorskizziert. Nehme den Variablenname von deinen Pushbutton, der die Caption "GetData" hat und verknüpfe diesen mit dem activate-Codeblock, der deine zentrale Berechnungsprozedur aufruft. Alle Einzelberechnungen, die du bisher in den SLE-Preblock-Codeblöcken verarbeitet hast, setzt du in die o.g. Berechnungsprozedur ein.
Viele Grüße

Dieter

Was man nicht versteht, besitzt man nicht.
Benutzeravatar
Lutz Rübe
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 144
Registriert: Mi, 02. Aug 2006 18:13
Wohnort: 24536 Neumünster
Danksagung erhalten: 6 Mal
Kontaktdaten:

Re: SLE-Part mit preblock

Beitrag von Lutz Rübe »

Hallo Dieter,
ich hab's jetzt verstanden :banghead: :banghead: :banghead: und an einem SLE nachvollzogen. Jetzt muss ich das ganze nur noch für alle "Rechenfelder" umsetzen. Ich hatte nur die Hoffnung, dass die Kalkulation schon durchgeführt wird sobald ich das SLE über Tab zum nächsten SLE verlassen habe, so dass ich bereits während der Eingabe die Ergebnisse/Zwischenergebnisse sehen kann. Jetzt werde ich das so umsetzen, dass ich alle EIngaben vornehme und nach der letzten Eingabe mit Tab/Enter auf den SetData-Button springe und dann die Berechnungen/Prüfungen durchführe.
Da ich viele "Rechenfelder" habe, muss ich mir da noch eine rationelle Lösung einfallen lassen. Danke für eure Hilfe

Viele Grüße
Lutz
Dieter
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 237
Registriert: Do, 14. Aug 2008 14:59
Wohnort: Straelen
Hat sich bedankt: 2 Mal
Danksagung erhalten: 3 Mal

Re: SLE-Part mit preblock

Beitrag von Dieter »

Hallo Lutz,
das freut mich aber sehr. =D> Ich war schon am verzweifeln, ob man mich hier überhaupt versteht. #-o
Viele Grüße

Dieter

Was man nicht versteht, besitzt man nicht.
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16502
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Re: SLE-Part mit preblock

Beitrag von Martin Altmann »

Hallo Lutz,
Lutz Rübe hat geschrieben: Mo, 20. Jul 2020 16:16 Ich hatte nur die Hoffnung, dass die Kalkulation schon durchgeführt wird sobald ich das SLE über Tab zum nächsten SLE verlassen habe, so dass ich bereits während der Eingabe die Ergebnisse/Zwischenergebnisse sehen kann.
klar geht das - dafür gibt es den :killInputFocus-Slot. Der feuert, wenn das SLE verlassen wird. Hat auch jedes XbpSle.
Wenn Du also in den Sle 1-12 die entsprechenden Slots mit Deiner jeweiligen Berechnungsfunktion belegst, kannst Du das erreichen. Musst halt jeweils prüfen, dass die Sle 1-3 bzw. 4-6 bzw. 7-9 bezw. 10-12 auch Werte enthalten, dann kannst Du rechnen und die jeweils :disableten SLEs füllen.

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.
Dieter
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 237
Registriert: Do, 14. Aug 2008 14:59
Wohnort: Straelen
Hat sich bedankt: 2 Mal
Danksagung erhalten: 3 Mal

Re: SLE-Part mit preblock

Beitrag von Dieter »

Hallo Martin,
hier muss ich wiedersprechen! Der killInputFocus-Codeblock kann das nicht leisten, da er ansonsten die Referenzen von allen anderen Sle haben müsste und auch nicht sicherstellen kann dass alle Eingabe-Sle vollständig mit Daten versorgt sind. Alle Eingabe-Sle müssten dann verschiedenden KillInputFocus-Codeblöcke haben. Alles viel zu aufwendig! Eine zentrale Procedure löst das Problem viel einfacher.
Viele Grüße

Dieter

Was man nicht versteht, besitzt man nicht.
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16502
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Re: SLE-Part mit preblock

Beitrag von Martin Altmann »

Nö. Alles eine Frage der Parameter!
Du könntest als Parameterliste die drei SLE mitgeben, die relevant sind. Also:

Code: Alles auswählen

::Sle1:killinputfocus:= { || Berechne( ::Sle1:EditBuffer(), ::Sle2:EditBuffer(), ::Sle3:EditBuffer(), 1) }
::Sle2:killinputfocus:= { || Berechne( ::Sle1:EditBuffer(), ::Sle2:EditBuffer(), ::Sle3:EditBuffer(), 1) }
::Sle3:killinputfocus:= { || Berechne( ::Sle1:EditBuffer(), ::Sle2:EditBuffer(), ::Sle3:EditBuffer(), 1) }
::Sle4:killinputfocus:= { || Berechne( ::Sle4:EditBuffer(), ::Sle5:EditBuffer(), ::Sle6:EditBuffer(), 2) }
...
In der Funktion Berechne weißt Du anhand des 4. Parameters, welche :disableten Felder zu füllen sind.
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.
Dieter
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 237
Registriert: Do, 14. Aug 2008 14:59
Wohnort: Straelen
Hat sich bedankt: 2 Mal
Danksagung erhalten: 3 Mal

Re: SLE-Part mit preblock

Beitrag von Dieter »

Hallo Martin,

das kann doch wohl nicht dein Ernst sein? Wie willst du den enormen Schreib- Programmieraufwand und das Arbeiten mit Private-Variablen rechtfertigen? Du brauchst ja auch die Referenzen der zu berechnenden Felder. Eine 1, 2 oder 3 als vierter Parameter reicht nicht. Das ist ganz schlechter Programmierstil, der schnell zu Spagetti-Code führt. Die Codeblöcke werden unnötig bei jeder Dateneingabe ausgeführt und errechnen unsinnige Ergebnisse. Da nehme ich doch lieber die von Hubert und von mir vorgeschlagene zentrale Procedure, die direkt nach vollständiger Eingabe aller Daten ausgeführt wird. Hierbei ist nur ein Codeblock erforderlich. Dieser muss allerdings alle SLE-Referenzen mitbekommen.
Viele Grüße

Dieter

Was man nicht versteht, besitzt man nicht.
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16502
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Re: SLE-Part mit preblock

Beitrag von Martin Altmann »

Erstens:
Wieso sollen sie "unsinnig bei jeder Eingabe" aufgerufen werden? Das willst Du doch genau so! Sobald ein Wert in eines der Felder eingegeben (oder ein bereits eingegebener Wert geändert!!) wird, soll doch deine Berechnung erfolgen!
Wieso Spaghetticode? Du wirst mir doch nicht erzählen, dass Du noch mehr Fenster hast, in denen Du die selbe Formel verwenden willst? Du kannst auch drei verschiedene Funktionen für die Berechnung nehmen, dann brauchst Du den vierten Parameter natürlich nicht!
Im Fall des killinputfocus brauchst Du jedenfalls nicht erst noch etwas anklicken, um die Berechnung auszulösen. Du musst nur das Feld verlassen (also den eingegeben Wert bestätigen mit Tab oder Enter).

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
Jan
Marvin
Marvin
Beiträge: 14641
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 87 Mal
Kontaktdaten:

Re: SLE-Part mit preblock

Beitrag von Jan »

Dieter,

Du irritierst mich. Mit Deiner Aussage inhaltlich und in der Wortwahl.

Was ist besser? Slots belegen mit Funktionen und Parametern? Oder alle Referenzen zu sammeln und zentral zu verwalten? Nein, mußt Du nicht beantworten, das ist eine rhetorische Frage. Ich möchte damit einfach nur darauf hinweisen das es vermutlich nicht DIE richtige oder falsche Lösung gibt. Die Diskussion dürfte mehr philosophisch und Bauchgefühl und persönliche Gewohnheit sein. Aber genau deswegen finde ich auch Deine Wortwahl etwas unglücklich.

Ich persönlich gehe übrigens eher Martins Weg. Was nicht heißt das ich Deinen falsch finde. Er ist halt nur anders als meine Gewohnheiten.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
ramses
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2513
Registriert: Mi, 28. Jul 2010 17:16
Hat sich bedankt: 12 Mal
Danksagung erhalten: 77 Mal

Re: SLE-Part mit preblock

Beitrag von ramses »

Dieter
Dieser muss allerdings alle SLE-Referenzen mitbekommen.
Da irrst du dich.

du brauchst weder deine vielen ::sle1, ::sle2 ..... Variablen sondern lediglich das Parentobjekt.
Mit der oParent:childlist()[ nIndex ] hast du jederzeit vollen Zugriff auf jedes SLE (Objekt) in deinem Parent.
Valar Morghulis

Gruss Carlo
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15689
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: SLE-Part mit preblock

Beitrag von brandelh »

Dieter hat geschrieben: Mo, 20. Jul 2020 15:58 Ja Hubert,
wenn ich in ein Sle klicke, dann bin ich also noch nicht drin! Du bist heute aber obergenau! :lol:
Da hast du mich aber völlig falsch verstanden !
1. geht es mir nicht darum den Oberlehrer zu geben ;-)
2. möchte ich auf genau den Unterschied vom GET System hinweisen, weshalb eine PRE ... Verarbeitung nicht funktionieren kann.

Mit GET konnte man entscheiden, ob das nächste Feld angesprungen wurde oder nicht.
Bei einem SLE ... hier die Definition aus der Hilfe:

The xbeP_SetInputFocus event is generated after the Xbase Part has received input focus (first the input focus is set, then the event is generated).

wird der Event von SetInputFocus erzeugt, nachdem man im SLE ist, daher kann dieser nicht verwendet werden um den Sprung in dieses zu verhindern.
Man ist schon drin, wenn man dann gleich raus springt, ist das was anderes und wird eine eventuelle Plausi auslösen.
Vom Ergebnis sind wir uns aber doch einige ... wenn ich deine Antworten ansehe.

Zum Thema, wenn man über den Keyboard Slot was steuern will, muss man den von allen möglichen SLE auf der Seite (richtig: alle Eingabe SLE der Seite) hinterlegen.
Natürlich sollte man so nichts ändern, sondern nur die Berechnung anstoßen und die Anzeige.

oSLE:keyBoard := {| nKeyCode, uNIL, oSLE | berechne( oSLE, oWin ) }

Wenn die Taste im SLE verarbeitet werden konnte, wird die schon darin angezeigt, bevor man in berechne() ankommt.
In Berechne kann man abfragen welches SLE aktiv war oder - einfach über einen Parameter) auf das Fenster übergeben, und auf alle.
Ich habe meist eine Fenstermethode verwendet, da diese direkt Zugriff auf das Fenster hat.

Diese Berechnungen finden dann statt, solange du noch beim Tippen bist.
wenn das zu oft ist, kannst du entweder wie von Martin beschrieben vorgehen, oder einen "Berechnen" oder "Eingabe testen" Button nutzen, der alle Eingaben prüft.
Wie geschrieben, wenn man eine Methode nutzt, kann man einfach auf alles zugreifen.

Wann man einem SLE mehr beibringen will, muss man es ableiten, wie ich es bei meinen numerischen / Datum etc. SLE gemacht habe:

:arrow: Wissensbasis :arrow: viewtopic.php?f=16&t=499#p4734

Hier hat man dann die Möglichkeit Tasten vor der Verarbeitung zu manipulieren.
Gruß
Hubert
Benutzeravatar
Lutz Rübe
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 144
Registriert: Mi, 02. Aug 2006 18:13
Wohnort: 24536 Neumünster
Danksagung erhalten: 6 Mal
Kontaktdaten:

Re: SLE-Part mit preblock

Beitrag von Lutz Rübe »

ups, :roll: :roll:
da habe ich aber mit meiner Fragestellung eine ganz schön heftige Diskussion angefangen, was gar nicht meine Absicht war.

Aber trotzdem danke an alle Kommentatoren, denn so habe ich die Funktionsweise und Zusammenhänge bei den SLEs besser verstanden.

:hello1: :hello1:

viele Grüße
Lutz
Dieter
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 237
Registriert: Do, 14. Aug 2008 14:59
Wohnort: Straelen
Hat sich bedankt: 2 Mal
Danksagung erhalten: 3 Mal

Re: SLE-Part mit preblock

Beitrag von Dieter »

Hallo Carlo,

du hast Recht, dass man mit Hilfe von oParent:childlist()[Index] die vielen Parameter nicht in den Codeblöcken zu übergeben braucht. Ich selbst nutze diese Technik in meinen Labelklassen, um alle Xbase-Parts auf einem mainLabel automatisch zu resizen. Die Klasse verwaltet dann aber auch den Index der Childlist. Und das ist gerade der Knackpunkt, warum man diese Technik beim normalen Programmieren nicht anwenden sollte. Wenn das Programm auch nur um ein zusätzliches SLE mittendrin erweitert werden soll, dann muss der ganze Programmcode korrigiert und neu getestet werden.

@Martin
Wieso sollen sie "unsinnig bei jeder Eingabe" aufgerufen werden? Das willst Du doch genau so! Sobald ein Wert in eines der Felder eingegeben (oder ein bereits eingegebener Wert geändert!!) wird, soll doch deine Berechnung erfolgen!
Bei 12 Eingabefeldern gibt es erst nach der 12. Eingabe ein vollständiges Ergebnis. Also sind 11 Berechnungen, die durch deine Codeblöcke ausgelöst werden, sinnlos. Wenn du meine Ausführungen richtig gelesen hättest, möchte ich erst, dass nach vollständiger Eingabe, mit einer Procedure alle 13 Ausgabefelder (gesperrte SLE-Felder) berechnet werden.
Wenn ich die Wahl als Programmierer habe, mit einem statt mit zwölf verschiedenen Codeblöcken zu arbeiten und ich gleichzeitig den Programmnutzer nicht mit 11 unvollständigen Ergebnissen nerven möchte, dann kann ich nur Vorteile für die Methode mit einem Codeblock erkennen.

@Jan
Wenn meine Wortwahl etwas unglücklich und irritierend gewesen sein sollte, bitte ich das zu entschuldigen. Das Problem von Lutz war zu diesem Zeitpunkt schon gelöst und das erneute Posting von Martin zu diesem Thema hat mich sogar ein bisschen geärgert, weil es entweder nur mit Private-Variablen oder mit Childlist-Tricks funktionieren würde.
Viele Grüße

Dieter

Was man nicht versteht, besitzt man nicht.
Antworten