Changed klappt nicht? [ERLEDIGT]
Moderator: Moderatoren
- Manfred
- Foren-Administrator
- Beiträge: 21165
- Registriert: Di, 29. Nov 2005 16:58
- Wohnort: Kreis Wesel
- Hat sich bedankt: 206 Mal
- Danksagung erhalten: 67 Mal
Changed klappt nicht? [ERLEDIGT]
Hi,
Roger macht ja aus den DCGET keine SLE, sondern Gets. Diese haben aber auch ein :changed. Ich verstehe aber immer noch nicht, warum das nicht klappt. Ich schreibe alle Objekte in ein Array und schicke das dann zwischendurch in eine Prüfung, ob eines davon :changed wurde. Egal was passiert, es steht immer ein .F. dort drin. Ich kann es nicht fassen, wo denke ich hier falsch. Das muß doch klappen!?
Roger macht ja aus den DCGET keine SLE, sondern Gets. Diese haben aber auch ein :changed. Ich verstehe aber immer noch nicht, warum das nicht klappt. Ich schreibe alle Objekte in ein Array und schicke das dann zwischendurch in eine Prüfung, ob eines davon :changed wurde. Egal was passiert, es steht immer ein .F. dort drin. Ich kann es nicht fassen, wo denke ich hier falsch. Das muß doch klappen!?
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!!
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!!
- Tom
- Der Entwickler von "Deep Thought"
- Beiträge: 9345
- Registriert: Do, 22. Sep 2005 23:11
- Wohnort: Berlin
- Hat sich bedankt: 100 Mal
- Danksagung erhalten: 359 Mal
- Kontaktdaten:
Re: Changed klappt nicht?
Hallo, Manfred.
Changed wirkt nur in dem Moment, in dem der EditBuffer vom Inhalt der referenzierten Variablen abweicht. Das ist nur zwischen einem GetData, der Bearbeitung und einem anschließenden SetData der Fall. Sobald also der Inhalt in die referenzierte Variable durchgeschrieben wurde, ist Changed wieder auf ".F.". Wenn Du also wissen willst, ob eine Variable in Bezug auf ihren Ursprungswert geändert wurde, solltest Du Dich mit DC_GetOrigUpdated() befassen. Oder die Klasse DC_XbpGet (z.B. über die "subclass"-Klausel) dahingehend ergänzen, dass in einer zusätzlichen iVar der Wert der Variablen in dem Moment gespeichert wird, in dem das erste SetData() ausgeführt wird. Genau das macht Roger übrigens auch.
Wie kommst Du denn auf die Idee? Aus einem DCGET wird ein DC_XbpGet, das von XbpSle abgeleitet ist. Die iVar Changed kennt auch ein normales XbpGet. Einfach mal in die Doku gucken.Roger macht ja aus den DCGET keine SLE, sondern Gets.
Changed wirkt nur in dem Moment, in dem der EditBuffer vom Inhalt der referenzierten Variablen abweicht. Das ist nur zwischen einem GetData, der Bearbeitung und einem anschließenden SetData der Fall. Sobald also der Inhalt in die referenzierte Variable durchgeschrieben wurde, ist Changed wieder auf ".F.". Wenn Du also wissen willst, ob eine Variable in Bezug auf ihren Ursprungswert geändert wurde, solltest Du Dich mit DC_GetOrigUpdated() befassen. Oder die Klasse DC_XbpGet (z.B. über die "subclass"-Klausel) dahingehend ergänzen, dass in einer zusätzlichen iVar der Wert der Variablen in dem Moment gespeichert wird, in dem das erste SetData() ausgeführt wird. Genau das macht Roger übrigens auch.
Herzlich,
Tom
Tom
- Manfred
- Foren-Administrator
- Beiträge: 21165
- Registriert: Di, 29. Nov 2005 16:58
- Wohnort: Kreis Wesel
- Hat sich bedankt: 206 Mal
- Danksagung erhalten: 67 Mal
Re: Changed klappt nicht?
Sorry,
ich meinte DC_XbpGet. So verwirrt bin ich schon bei der Sache. Das steht zumindest in dem Array, wenn ich ein Element aufrufe und dann die Partsart angezeigt wird. Dann habe ich mich vertan. Das war zumindest eine grobe Erklärung für mich, warum das Problem besteht. War es dann wohl nicht.
Aber trotzdem verstehe ich das nicht. Ich dachte, sobald ich ein "SLE" ändere, wird changed gesetzt, ohne das was weiteres passiert. Das ist doch Kappes.
Ich mache das so.
Ich dachte das wäre so zu machen. Und dann, bei Abbruch, oder was weiß ich kurz abfragen, ob sich was geändert hat und dann entsprechend reagieren. Das geht doch im MDIDemo Beispiel genauso. Dadurch bin ich doch erstmal darauf gekommen.
ich meinte DC_XbpGet. So verwirrt bin ich schon bei der Sache. Das steht zumindest in dem Array, wenn ich ein Element aufrufe und dann die Partsart angezeigt wird. Dann habe ich mich vertan. Das war zumindest eine grobe Erklärung für mich, warum das Problem besteht. War es dann wohl nicht.
Aber trotzdem verstehe ich das nicht. Ich dachte, sobald ich ein "SLE" ändere, wird changed gesetzt, ohne das was weiteres passiert. Das ist doch Kappes.
Ich mache das so.
Code: Alles auswählen
@ DCGUI_ROW,DCGUI_COL DCGET oParaAk:bez;
EVAL {|o| o:usevisualstyle := oSysPara:oWsPara:VisualStyl,oParaAk:addEditControl(o) };
MESSAGE "Bezeichnung für den Parameter" INTO oSysPara:oMessageBox;
OBJECT oParaAk:oBez;
PARENT oRahmenAkBez;
PICTURE "@K !" + Repl("X",29);
SIZE 250,nSayHoehe;
TABSTOP;
TOOLTIP "Bezeichnung für den Parameter eingeben"
*******************************************
METHOD datenbank:addEditControl( oXbp )
IF AScan( ::aEditControls, oXbp ) == 0
AAdd( ::aEditControls, oXbp )
ENDIF
RETURN self
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!!
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!!
- brandelh
- Foren-Moderator
- Beiträge: 15688
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 65 Mal
- Danksagung erhalten: 33 Mal
- Kontaktdaten:
Re: Changed klappt nicht?
Hallo Manfred,
mit dem DC... habe ich ja nichts am Hut, aber bei dem zu Grunde liegenden XbpSLE und
den anderen Controls die ich kenne verhält es sich so, dass :changed := .f.
gesetzt wird, sobald dem SLE ein neuer Wert zugewiesen wird (:SetData()).
Ich denke auch beim Speichern (GetData() - über Datalink, bin mir hier aber nicht sicher).
Eine EINGABE durch z.B. das KEYBOARD setzt :changed := .t. ... soweit so gut, aber ...
Wenn du z.B. einem leeren XbpSLE einen "Vorgabewert" zuweist ...
änderst du zwar den Inhalt des SLE im Vergleich zur DBF, aber das XbpSLE steht auf :changed == .f. !
Seit der 1.90 kann man diese Variable aber per Hand setzen sobald es nötig ist:
Solange man immer den kompletten Satz speichert, spielt changed ja auch keine Rolle (früher habe
ich es deshalb erst gar nicht abgefragt, da ich ja oft Vorgabewerte gesetzt habe), aber wenn man
nur die changed Variablen speichert ist es sehr wichtig auch alle manuellen Änderungen des Controls
auf changed zu setzen.
Ob das dein Problem betrifft weiß ich nicht
mit dem DC... habe ich ja nichts am Hut, aber bei dem zu Grunde liegenden XbpSLE und
den anderen Controls die ich kenne verhält es sich so, dass :changed := .f.
gesetzt wird, sobald dem SLE ein neuer Wert zugewiesen wird (:SetData()).
Ich denke auch beim Speichern (GetData() - über Datalink, bin mir hier aber nicht sicher).
Eine EINGABE durch z.B. das KEYBOARD setzt :changed := .t. ... soweit so gut, aber ...
Wenn du z.B. einem leeren XbpSLE einen "Vorgabewert" zuweist ...
Code: Alles auswählen
if emty(oName:editBuffer())
oName:setData("Vorgabe")
...
Seit der 1.90 kann man diese Variable aber per Hand setzen sobald es nötig ist:
Code: Alles auswählen
if emty(oName:editBuffer())
oName:setData("Vorgabe")
oName:changed := .t.
...
ich es deshalb erst gar nicht abgefragt, da ich ja oft Vorgabewerte gesetzt habe), aber wenn man
nur die changed Variablen speichert ist es sehr wichtig auch alle manuellen Änderungen des Controls
auf changed zu setzen.
Ob das dein Problem betrifft weiß ich nicht
Gruß
Hubert
Hubert
- Manfred
- Foren-Administrator
- Beiträge: 21165
- Registriert: Di, 29. Nov 2005 16:58
- Wohnort: Kreis Wesel
- Hat sich bedankt: 206 Mal
- Danksagung erhalten: 67 Mal
Re: Changed klappt nicht?
Hi Hubert,
ich muß das mal wieder alles Schritt für Schritt durchgehen. Vielleicht bin ich auch auf dem falschen Dampfer. Die Funktion, die Tom weiter oben angeführt hat, hatte ich irgendwie nicht registriert und erst nach dem Abschalten der EDV gestern Abend verinnerlicht.
ich muß das mal wieder alles Schritt für Schritt durchgehen. Vielleicht bin ich auch auf dem falschen Dampfer. Die Funktion, die Tom weiter oben angeführt hat, hatte ich irgendwie nicht registriert und erst nach dem Abschalten der EDV gestern Abend verinnerlicht.
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!!
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!!
- Markus Walter
- Programmier-Gott
- Beiträge: 1018
- Registriert: Di, 24. Jan 2006 10:22
- Wohnort: Saarland
Re: Changed klappt nicht?
Hallo Manfred,
ich habe festgestellt, dass die changed-Verwaltung von Roger bei Fensterwechseln (umschalten in andere Anwendung und zurück) nicht so reagiert, wie man das erwarten würde, wenn man das changed von alten "get" kennt und habe mir deshalb in einer Ableitung (subclass) ein eigenes changed programmiert. Da vergleiche ich ::OrginalBuffer mit ::get:buffer
ich habe festgestellt, dass die changed-Verwaltung von Roger bei Fensterwechseln (umschalten in andere Anwendung und zurück) nicht so reagiert, wie man das erwarten würde, wenn man das changed von alten "get" kennt und habe mir deshalb in einer Ableitung (subclass) ein eigenes changed programmiert. Da vergleiche ich ::OrginalBuffer mit ::get:buffer
Gruß
Markus
Mitglied der XUG Saarland-Pfalz
Markus
Mitglied der XUG Saarland-Pfalz
- Manfred
- Foren-Administrator
- Beiträge: 21165
- Registriert: Di, 29. Nov 2005 16:58
- Wohnort: Kreis Wesel
- Hat sich bedankt: 206 Mal
- Danksagung erhalten: 67 Mal
Re: Changed klappt nicht?
Hi Markus,
mit dem GETbuffer, oder wieso steht das get vor? Das war nämlich auch meine Idee, Buffer mit UndoBuffer zu vergleichen, aber da stand beidesmal das gleiche drin. Deshalb habe ich es gleich wieder gelassen. Ich werde es aber mit der DC-Funktion probieren. bin nur noch nicht dazu gekommen.
mit dem GETbuffer, oder wieso steht das get vor? Das war nämlich auch meine Idee, Buffer mit UndoBuffer zu vergleichen, aber da stand beidesmal das gleiche drin. Deshalb habe ich es gleich wieder gelassen. Ich werde es aber mit der DC-Funktion probieren. bin nur noch nicht dazu gekommen.
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!!
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!!
- Manfred
- Foren-Administrator
- Beiträge: 21165
- Registriert: Di, 29. Nov 2005 16:58
- Wohnort: Kreis Wesel
- Hat sich bedankt: 206 Mal
- Danksagung erhalten: 67 Mal
Re: Changed klappt nicht?
Hi Tom,
im Moment scheint dieses Funktion genau das Mittel der Wahl zu sein. Sie macht das, was ich haben wollte. Danke für den Hinweis. Wobei es mich immer wieder ein wenig nervt, dass solche Funktionen nirgends beschrieben sind, man also gar nicht weiß, das es sowas gibt, bzw. erkennen könnte, das man sie gebrauchen kann. das ist mir jetzt schon ein paar Mal passiert mit express++. Naja, irgend woher muß Du es ja gewußt haben.
im Moment scheint dieses Funktion genau das Mittel der Wahl zu sein. Sie macht das, was ich haben wollte. Danke für den Hinweis. Wobei es mich immer wieder ein wenig nervt, dass solche Funktionen nirgends beschrieben sind, man also gar nicht weiß, das es sowas gibt, bzw. erkennen könnte, das man sie gebrauchen kann. das ist mir jetzt schon ein paar Mal passiert mit express++. Naja, irgend woher muß Du es ja gewußt haben.
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!!
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!!