XbpSle und killInputFocus

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

Moderator: Moderatoren

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

XbpSle und killInputFocus

Beitrag von Lutz Rübe »

Moin, moin allerseits und frohe Ostern.

Ich habe mal wieder ein Verständnisproblem mit den xBase-Parts.

In meiner Funktion (Eingabe von Daten) werden zuerst anhand von (mindestens) einem XbpSle-Part Daten abgefragt. Anhand dieser Daten sollen in nachfolgenden Xbase-Parts Änderungen vorgenommen werden. Hier der Code des SLE's, anhand dessen das Array aTisch für die Verarbeitung in den nachfolgenden Parts aufgebaut werden soll:

Code: Alles auswählen

   oSLE_TiNr := XbpGet():new( drawingArea, , {o_Cols[2],o_Lines[2]}, {48,24}, { { XBP_PP_BGCLR, XBPSYSCLR_ENTRYFIELD } } )
   oSLE_TiNr:clipSiblings := .T.
   oSLE_TiNr:Picture := "@K 999"
   oSLE_TiNr:Datalink:= varBlock(@TiNr)
   oSLE_TiNr:postBlock        := { ||  TiNr <= MaxTi }
   oSLE_TiNr:preBlock         := { |o| MaxTi := Max_Tisch(ergSer),o:setData(),.t.}
   oSLE_TiNr:killinputfocus   := { ||  oCtrl:getData(),Basis_Browse_Array(aTisch), aTisch := Sel_Tisch(aTischLeer, ergSer, TiNr) }
   oSLE_TiNr:tabStop := .T.
   oSLE_TiNr:create()
Über killInputFocus soll das Array aTisch mit Daten gefüllt werden, die in den nachfolgenden SLE-Parts geändert und später wieder in der Dbf gespeichert werden sollen. Innerhalb der Funktion Sel_Tisch(aTisch, ergSer, TiNr) wird das Array korrekt aufgebaut. Aber wie bekomme ich jetzt das Array ausserhalb dieser Funktion, damit es in den folgenden Xbase-Parts korrekt (als Vorgabe) verarbeitet werden kann ?

:banghead: :banghead: :banghead:

Viele Grüße
Lutz
Benutzeravatar
Werner_Bayern
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 1855
Registriert: Sa, 30. Jan 2010 22:58
Wohnort: Niederbayern
Hat sich bedankt: 8 Mal
Danksagung erhalten: 21 Mal

Re: XbpSle und killInputFocus

Beitrag von Werner_Bayern »

Servus Lutz,

Dir auch frohe Ostern :)

Ich gehe davon aus, dass aTisch ein lokales Array ist? Damit brauchst Du im KillinputFocus nur mittels setData() die anderen XbpSLEs füttern.

Code: Alles auswählen

oSLE_TiNr:killinputfocus   := { ||  oCtrl:getData(),Basis_Browse_Array(aTisch), aTisch := Sel_Tisch(aTischLeer, ergSer, TiNr), eval({||oSLE_TIFrei1:setData(aTisch[1]), oSLE_TIFrei2:setData(aTisch[2])}) }
es grüßt

Werner

<when the music is over, turn off the lights!>
Benutzeravatar
Lutz Rübe
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 140
Registriert: Mi, 02. Aug 2006 18:13
Wohnort: 24536 Neumünster
Danksagung erhalten: 6 Mal
Kontaktdaten:

Re: XbpSle und killInputFocus

Beitrag von Lutz Rübe »

Hallo Werner,

Super ! :hello1: :hello1: :hello1:
Das klappt wunderbar, genau wie gewünscht.

Hast Du vielleicht noch einen Idee bzw. einen Tip zu diesem Punkt: Ich möchte Teile des Array nur als Information anzeigen, aber nicht editieren. Normalerweise übergebe ich die Werte über die :cargo-Instanz in einem Static-xBase-Part.

Als "unsaubere" Lösung empfände ich es, wenn ich die Variable in einem nicht editierbaren SLE übergeben würde..... Gibt es da eine elegantere Lösung ?

Danke nochmal mit dem Hinweis. Er hat das Hauptproblem gelöst.

Gruß
Lutz
Dominik Krebs
UDF-Programmierer
UDF-Programmierer
Beiträge: 77
Registriert: Mo, 15. Apr 2019 16:19
Hat sich bedankt: 1 Mal

Re: XbpSle und killInputFocus

Beitrag von Dominik Krebs »

Hallo,
Ist die XbpGet Klasse eine eigene? Die sagt mir nämlich gar nichts? 😮
Gruß Dominik
Benutzeravatar
Lutz Rübe
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 140
Registriert: Mi, 02. Aug 2006 18:13
Wohnort: 24536 Neumünster
Danksagung erhalten: 6 Mal
Kontaktdaten:

Re: XbpSle und killInputFocus

Beitrag von Lutz Rübe »

Hallo Dominik,
die XbpGet-Klasse ist abgeleitet vom XbpSle und unter "SOURCE\Samples\Solution" als fertig abgeleitet Klasse zu finden.

Ich versuche immer gerne die unter den Samples angebotenen Lösungen zu nutzen und zu implementieren.

Gruß
Lutz
Benutzeravatar
Werner_Bayern
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 1855
Registriert: Sa, 30. Jan 2010 22:58
Wohnort: Niederbayern
Hat sich bedankt: 8 Mal
Danksagung erhalten: 21 Mal

Re: XbpSle und killInputFocus

Beitrag von Werner_Bayern »

Bitte. 8)
Lutz Rübe hat geschrieben: Mo, 05. Apr 2021 16:58 Hast Du vielleicht noch einen Idee bzw. einen Tip zu diesem Punkt: Ich möchte Teile des Array nur als Information anzeigen, aber nicht editieren. Normalerweise übergebe ich die Werte über die :cargo-Instanz in einem Static-xBase-Part.
Vermutlich verstehe ich Dich falsch, aber dafür gibt's doch das XbpStatic und :setCaption()? Oder XbpFormattedLabel() aus dem Xbppack2.
es grüßt

Werner

<when the music is over, turn off the lights!>
Benutzeravatar
Lutz Rübe
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 140
Registriert: Mi, 02. Aug 2006 18:13
Wohnort: 24536 Neumünster
Danksagung erhalten: 6 Mal
Kontaktdaten:

Re: XbpSle und killInputFocus

Beitrag von Lutz Rübe »

Hallo Werner,

sorry, mein Fehler: ich habe statt :caption() :cargo() geschrieben. Das hat sicherlich zur Verwirrung geführt.

Ja, ich möchte einem XbpStatic-Part über :caption einen Anzeigewert zuweisen. Der anzuzeigende Wert wurde aber über die killInputFocus-Funktion im Objekt oSLE_TINr ermittelt und in die Variable aTisch eingefügt. Hier die Umsetzung wie sie mit Deinem Hinweis für SLE's umgesetzt wird und erfolgreich funktioniert:

Code: Alles auswählen

   oSLE_TiNr:killinputfocus   := { ||  oCtrl:getData(), aTiVis := Sel_Tisch(aTischLeer, ergSer, TiNr, aTiVis),eval({|| ;
         oSLE_STNR_1:setData(aTisch[2,1]),;
         oSLE_STNR_2:setData(aTisch[2,2]),;
         oSLE_STNR_3:setData(aTisch[2,3]),;
         oSLE_STNR_4:setData(aTisch[2,4]),;
         oCombo_Name_1:setData(AllTrim(aTisch[5,1])),;
         oCombo_Name_2:setData(AllTrim(aTisch[5,2])),;
         oCombo_Name_3:setData(AllTrim(aTisch[5,3])),;
         oCombo_Name_4:setData(AllTrim(aTisch[5,4])),;
         o_1_GPkte:setData(aTisch[15,1]),;
         o_2_GPkte:setData(aTisch[15,2]),;
         o_3_GPkte:setData(aTisch[15,3]),;
         o_4_GPkte:setData(aTisch[15,4]);
         }) }
Das Array aTisch enthält aber auch Werte (in der Funktion Sel_Tisch() ermittelt), die per XbpStatic angezeigt werden sollen:

Code: Alles auswählen

   oStat_Status_1 := XbpStatic():new( drawingArea, , {o_Cols[2]+40,o_Lines[5]}, {36,24}, { { XBP_PP_BGCLR, -255 }, { XBP_PP_COMPOUNDNAME,   } } )
   oStat_Status_1:caption := AllTrim(aTisch[3,1])+AllTrim(aTisch[4,1])
   oStat_Status_1:clipSiblings := .T.
   oStat_Status_1:options := XBPSTATIC_TEXT_VCENTER+XBPSTATIC_TEXT_CENTER
   oStat_Status_1:create()
Brauche ich dafür auch einen Codeblock ? Wenn ja, wie sieht dieser aus ? Das Arbeiten mit Codeblöcken ist mein Schwachpunkt...


Gruß
Lutz
Benutzeravatar
Werner_Bayern
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 1855
Registriert: Sa, 30. Jan 2010 22:58
Wohnort: Niederbayern
Hat sich bedankt: 8 Mal
Danksagung erhalten: 21 Mal

Re: XbpSle und killInputFocus

Beitrag von Werner_Bayern »

Servus Lutz,

Code: Alles auswählen

oStat_Status_1:setCaption("was immer Du willst!")
es grüßt

Werner

<when the music is over, turn off the lights!>
Dominik Krebs
UDF-Programmierer
UDF-Programmierer
Beiträge: 77
Registriert: Mo, 15. Apr 2019 16:19
Hat sich bedankt: 1 Mal

Re: XbpSle und killInputFocus

Beitrag von Dominik Krebs »

Hallo Lutz,
Danke für die Info. Schaue ich mir doch glatt mal an!
Gruß Dominik
Benutzeravatar
Lutz Rübe
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 140
Registriert: Mi, 02. Aug 2006 18:13
Wohnort: 24536 Neumünster
Danksagung erhalten: 6 Mal
Kontaktdaten:

Re: XbpSle und killInputFocus

Beitrag von Lutz Rübe »

Hallo Werner,
ich sehe schon, ich habe mich mal wieder total mißverständlich ausgedrückt. :banghead: :banghead:

Ich versuche es einmal anders zu erklären:

Ich habe folgende 3 xBase-Parts:

Part 1: Hier wird ein Parameter abgefragt (z. B. eine Kundennummer). Anhand dieses Parameters werden alle Datensätze, die den Kriterien in einer DBF gesucht und bestimmte Werte werden in ein 2 dimensionales Array eingefügt (killInputFocus). Teile dieses Arrays sollen in einem SLE-Part angezeigt werden und editierbar sein, andere Teile in einem Static-Part nur angezeigt werden.

Part 2: in diesem Objekt (SLE), Combobox etc.) wird über DataLink ein Wert aus dem Array angezeigt und ist editierbar.

Part3: in diesem Objekt (XbpStatic) sollen Werte des Arrays über die Funktion :caption angezeigt werden.

Part 1 und Part 2 funktionieren dank Deiner Hilfe einwandfrei. Nur wenn ich beim Static-Part unter :caption := Array[x,y] angebe, wird mir der Inhalt des Arras[x,y] nicht angezeigt. Was mache ich hier falsch ?

Ich hoffe, dass ich mich jetzt deutlicher ausgedrückt habe.

Viele Grüße
Lutz
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 15686
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 27 Mal
Danksagung erhalten: 25 Mal
Kontaktdaten:

Re: XbpSle und killInputFocus

Beitrag von Martin Altmann »

Lutz,
wenn du die Caption ändern willst, nachdem das Static erzeugt wurde, musst du SetCaption() dafür nehmen (wie Werner in seinem Source-Schnipsel). Ansonsten müsstest du nach dem ändern der Caption noch ein Configure() für das Static absetzen.

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
Lutz Rübe
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 140
Registriert: Mi, 02. Aug 2006 18:13
Wohnort: 24536 Neumünster
Danksagung erhalten: 6 Mal
Kontaktdaten:

Re: XbpSle und killInputFocus

Beitrag von Lutz Rübe »

Oh da bitte ich vielmals um Entschuldigung. Das 'set' von setcaption habe ich doch glatt überlesen.

Vielen Dank an alle Mitwirkenden.
Damit kann dann dieser threat geschlossen werden.

Einen schönen Tag noch
Lutz
Antworten