Hi,
ich habe in meinem Programm immer eine Abfrage, ob sich ein XbpSle geändert hat. Ist das der Fall, wird vor dem Beenden gefragt ob gesichert werden soll.
Jetzt habe ich eine Druckerauswahl, aus der das Ergebnis des gewählten Druckers in ein SLE geschrieben und direkt am Bildschirm im SLE angezeigt wird. Das klappt auch, aber leider scheint das nur über Setdata() zu gehen und dann gilt es nicht mehr als Änderung und somit greift die Abfrage nicht mehr.
Welche Möglichkeiten habe ich denn noch einen Wert in ein SLE zu übernehmen, was dann ein changed angibt, welches ich dann wieder in meiner Routine abfragen kann?
In den Editbuffer kann man ja nicht schreiben!?
XbpSle ohne setdata() aktualisieren [ERLEDIGT]
Moderator: Moderatoren
- Manfred
- Foren-Administrator
- Beiträge: 21186
- Registriert: Di, 29. Nov 2005 16:58
- Wohnort: Kreis Wesel
- Hat sich bedankt: 210 Mal
- Danksagung erhalten: 67 Mal
XbpSle ohne setdata() aktualisieren [ERLEDIGT]
Zuletzt geändert von Manfred am Do, 30. Jul 2009 13:06, insgesamt 1-mal geändert.
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!!
- AUGE_OHR
- Marvin
- Beiträge: 12906
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 45 Mal
Re: XbpSle ohne setdata() aktualisieren
nun ja ... laut Hilfe passiert es ja "automatisch"Manfred hat geschrieben:Hi,
Welche Möglichkeiten habe ich denn noch einen Wert in ein SLE zu übernehmen, was dann ein changed angibt, welches ich dann wieder in meiner Routine abfragen kann?
Wenn du also aus deinem Browse einen "Wert" auswählst solltest duDie Instanzvariable:changed wird automatisch auf .F. (falsch) gesetzt, wenn die Methode :setData() oder :undo() ausgeführt wird.
erst feststellen ob es sich um den selben "Wert" wie im :Editbuffer
handelt bevor du ihn zurück schreibst und ggf. einen "Flag" setzten wie
lWertVomBrowse := .T. und das bei deinem :changed berücksichtigen.
... Anmerkung :datalink :
Ich persönlich mag es gar nicht wenn "irgendwas" auf meine Daten
zugreifen will. In einem "normalen" :datalink geht man aber gewöhnlich
gleich auf die FELDer ...
Man kann aber auch Variabeln im :datalink verwenden und somit seine
(von Cl*pper) gewohnten STORE / REPLACE Funktionen benutzen. Dies
kann auch sehr hilfreich sein wenn man z.b. ein GET Maske nach GUI
"übersetzt".
Um jetz nun nicht "hunderte" von Vriabeln zu verwenden werden diese
als Elemente eines STATIC Array angelgt und mit #xtranslate "übersetzt".
Code: Alles auswählen
#xtranslate mKDBEZEICH => Stack\[SP,1]
#xtranslate mKDNAME => Stack\[SP,2]
...
#xtranslate mLFHANDY => Stack\[SP,47]
STATIC Stack := {}
STATIC SP := 0
PROCEDURE KDINITPUB
AADD( Stack, ARRAY( 47 ) )
SP ++
KLEER()
RETURN
PROCEDURE KDEXITPUB
// hier nur 1-Dim !!!
Stack := ASIZE( Stack, -- SP )
RETURN
STATIC PROCEDURE KIN
LOCAL getList := {}
...
@ 04, 20 GET mKDBEZEICH PICTURE '!XXXXXXXXXXXXXXX' VALID (
@ 05, 20 GET mKDNAME PICTURE '!XXXXXXXXXXXXXXXXXXXXXXXX' VALID (
Code: Alles auswählen
oXbp1 := SLEPic():new( oDlg:drawingArea, , ... )
oXbp1:editable := F_ONOFF
oXbp1:bufferLength := 16
oXbp1:Picture := "!XXXXXXXXXXXXXXX"
oXbp1:tabStop := .T.
oXbp1:dataLink := VARBLOCK(@mKDBEZEICHN)
oXbp1:preBlock := {|| .T. }
oXbp1:postBlock := {|o| isValid(o,mKDBEZEICHN) }
oXbp1:create():setData()
AAdd ( aEditControls, oXbp1 )
oXbp2 := SLEPic:new( oDlg:drawingArea, , ... )
oXbp2:editable := F_ONOFF
oXbp2:bufferLength := 25
oXbp2:Picture := "!XXXXXXXXXXXXXXXXXXXXXXXX"
oXbp2:tabStop := .T.
oXbp2:dataLink := VARBLOCK(@mKDNAME )
oXbp2:preBlock := {|| .T. }
oXbp2:postBlock := {|o| isValid( o,mKDNAME ) }
oXbp2:create():setData()
AAdd ( aEditControls, oXbp2 )
isValid(oObj,Value) noch geprüft werden muss von welchem SLE Object
ich nun komme während bei einem GET das VALID ja immer auf die
betreffende Zeile "wirkt".
Zu beachten ist das ich hier PROCEDURE für die *PUB benutze und der
Code "so" nur "SDI" fähig ist. Wenn man nun daraus FUNCTION macht
kann man bei der INITPUB die "Dimension" per SP "ausgeben".
Man muss dann aber auch in EXITPUB wiederrum die SP "Dimension"
per ASCAN() suchen und per ADEL() auf NIL setzten und darf den Stack
nur dann ASIZE()n wenn das letzte Element = NIL ist um das ganze MDI
fähig zu machen.
... man muss also unter GUI nicht immer deren Methoden wie :editbuffer
oder :changed benutzen wenn man unter Cl*pper schon eine Lösung hat.
gruss by OHR
Jimmy
Jimmy
- Manfred
- Foren-Administrator
- Beiträge: 21186
- Registriert: Di, 29. Nov 2005 16:58
- Wohnort: Kreis Wesel
- Hat sich bedankt: 210 Mal
- Danksagung erhalten: 67 Mal
Hi Jimmy,
das Problem hat sich geklärt. :changed(.T.) hat nicht geklappt, obwohl es bei SpinButtons klappt. Und :changed := .T: klappte unter SlePic nicht. Also muß ich ein wenig umdenken..
das Problem hat sich geklärt. :changed(.T.) hat nicht geklappt, obwohl es bei SpinButtons klappt. Und :changed := .T: klappte unter SlePic nicht. Also muß ich ein wenig umdenken..
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!!