PushButton
Moderator: Moderatoren
- Manfred
- Foren-Administrator
- Beiträge: 21189
- Registriert: Di, 29. Nov 2005 16:58
- Wohnort: Kreis Wesel
- Hat sich bedankt: 210 Mal
- Danksagung erhalten: 67 Mal
PushButton
Hi,
im Moment brummt mir der Kopf.
Bevor ich jetzt unendlich viel Zeit verheize, eine Frage:
Ich lade die gesamten Felder einer DB in Speichervariablen, bearbeite sie und speichere sie dann wieder zurück in die DB. So weit, so gut.
Jetzt habe ich mein neues Steckenpferd entdeckt, die GUI.
Also versuche ich es jetzt auf dem Weg. Ich habe SLE Spinbutton und Comboboxen gebaut. Alles möchte ich jetzt über Pushbutton regeln, komme aber nicht weiter. Ich möchte z.B. bei dem Button vorwärts einen Skip durch die DB machen und dann die Daten wieder in die Varias einlesen und sie dann am Bildschirm anzeigen lassen. Die Beispiele arbeiten immer direkt mit den Feldern und erfordern einen Exclusivezugriff.
Bevor jetzt hier die große Diskussion los geht, möchte ich zuerst einmal wissen, ob das überhaupt so geht, wie ich es vorhabe? Ich habe im Moment keinen Plan, wie ich das bauen muß, damit es so klappt, wie es im Textmodus klappt -> Skip, Felder einlesen, anzeigen.
Stell ich mich wieder blöd an?
im Moment brummt mir der Kopf.
Bevor ich jetzt unendlich viel Zeit verheize, eine Frage:
Ich lade die gesamten Felder einer DB in Speichervariablen, bearbeite sie und speichere sie dann wieder zurück in die DB. So weit, so gut.
Jetzt habe ich mein neues Steckenpferd entdeckt, die GUI.
Also versuche ich es jetzt auf dem Weg. Ich habe SLE Spinbutton und Comboboxen gebaut. Alles möchte ich jetzt über Pushbutton regeln, komme aber nicht weiter. Ich möchte z.B. bei dem Button vorwärts einen Skip durch die DB machen und dann die Daten wieder in die Varias einlesen und sie dann am Bildschirm anzeigen lassen. Die Beispiele arbeiten immer direkt mit den Feldern und erfordern einen Exclusivezugriff.
Bevor jetzt hier die große Diskussion los geht, möchte ich zuerst einmal wissen, ob das überhaupt so geht, wie ich es vorhabe? Ich habe im Moment keinen Plan, wie ich das bauen muß, damit es so klappt, wie es im Textmodus klappt -> Skip, Felder einlesen, anzeigen.
Stell ich mich wieder blöd an?
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!!
- Jan
- Marvin
- Beiträge: 14653
- Registriert: Fr, 23. Sep 2005 18:23
- Wohnort: 49328 Melle
- Hat sich bedankt: 21 Mal
- Danksagung erhalten: 88 Mal
- Kontaktdaten:
Manfred,
wenn ich Dich richtig verstehe möchtest Du wissen, wie Du mit dem Druck auf einen PushButton eine Aktion ausführst?
Das ist eigentlich relativ einfach: oButton:activate := {|| funktion1, funktion2,...}. Wobei Funktion1, 2 und... beliebige Funktionen sind, eigene oder eingebaute.
Das könnte also bei so aussehen:
oButton:activate := {|| MeinFunc()}. Und in MeinFunc() schreibst Du das rein, was da passieren soll. Ist jedenfalls übersichtlicher wenn Du mehrere Sachen machen möchtest. Einfach nur ein Skippen geht besser so: oButton:activate := {|| DBSkip()}
Jan
wenn ich Dich richtig verstehe möchtest Du wissen, wie Du mit dem Druck auf einen PushButton eine Aktion ausführst?
Das ist eigentlich relativ einfach: oButton:activate := {|| funktion1, funktion2,...}. Wobei Funktion1, 2 und... beliebige Funktionen sind, eigene oder eingebaute.
Das könnte also bei so aussehen:
oButton:activate := {|| MeinFunc()}. Und in MeinFunc() schreibst Du das rein, was da passieren soll. Ist jedenfalls übersichtlicher wenn Du mehrere Sachen machen möchtest. Einfach nur ein Skippen geht besser so: oButton:activate := {|| DBSkip()}
Jan
- Martin Altmann
- Foren-Administrator
- Beiträge: 16511
- Registriert: Fr, 23. Sep 2005 4:58
- Wohnort: Berlin
- Hat sich bedankt: 111 Mal
- Danksagung erhalten: 48 Mal
- Kontaktdaten:
Hallo Manfred,
dafür gibt es die internen Funktionen gather() und scatter(), denen Du ein Array mit Deinen Xbase++-Parts übergibst! Erstere schreibt in die Datenbank und letztere liest aus der Datenbank.
Siehe dazu auch das Beispiel zu gather() in der Doku:
Viele Grüße,
Martin
dafür gibt es die internen Funktionen gather() und scatter(), denen Du ein Array mit Deinen Xbase++-Parts übergibst! Erstere schreibt in die Datenbank und letztere liest aus der Datenbank.
Siehe dazu auch das Beispiel zu gather() in der Doku:
Code: Alles auswählen
oXbp1 := XbpStatic():new( drawingArea, , {12,48}, {300,96} )
oXbp1:caption := "Customer"
oXbp1:type := XBPSTATIC_TYPE_GROUPBOX
oXbp1:create()
oXbp := XbpStatic():new( oXbp1, , {12,48}, {72,24} )
oXbp:caption := "Lastname:"
oXbp:options := XBPSTATIC_TEXT_VCENTER+XBPSTATIC_TEXT_RIGHT
oXbp:create()
oXbp := XbpSLE():new( oXbp1, , {96,48}, {192,24} )
oXbp:bufferLength := 20
oXbp:tabStop := .T.
oXbp:dataLink := {|x| IIf( PCount()==0, ;
Trim( CUSTOMER->LASTNAME ), ;
CUSTOMER->LASTNAME := x ) }
oXbp:create():setData()
AAdd( ::aEditControls, oXbp )
oXbp := XbpPushButton():new( drawingArea, , {12,12}, {72,24} )
oXbp:caption := "Vor"
oXbp:create()
oXbp:activate := {|| Gather( ::aEditControls ), ;
CUSTOMER->( DbSkip( 1) ), ;
Scatter( ::aEditControls ) }
Martin
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.
- Manfred
- Foren-Administrator
- Beiträge: 21189
- Registriert: Di, 29. Nov 2005 16:58
- Wohnort: Kreis Wesel
- Hat sich bedankt: 210 Mal
- Danksagung erhalten: 67 Mal
Hi Jan,
ich bin ein bisschen blöd. Kann ich "beliebig" viele Funcs hintereinander mit Komma getrennt eingeben? Ich habe das beispiel mit gather und Scatter gefunden, blicke aber nicht wirklich da durch, sondern lebe nur von Vermutungen.
Ich komme nicht drauf, wie ich alle Felder wieder angezeigt bekomme. Muß ich die alle einzeln aufrufen (über eben eine Func), oder gibt es da einen Refresh Befehl, oder wie darf ich das verstehen?
Die Felder sind ja in einem Parent. Muß man damit irgendwas machen?
Frage über Fragen.
ich bin ein bisschen blöd. Kann ich "beliebig" viele Funcs hintereinander mit Komma getrennt eingeben? Ich habe das beispiel mit gather und Scatter gefunden, blicke aber nicht wirklich da durch, sondern lebe nur von Vermutungen.
Ich komme nicht drauf, wie ich alle Felder wieder angezeigt bekomme. Muß ich die alle einzeln aufrufen (über eben eine Func), oder gibt es da einen Refresh Befehl, oder wie darf ich das verstehen?
Die Felder sind ja in einem Parent. Muß man damit irgendwas machen?
Frage über Fragen.
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: 21189
- Registriert: Di, 29. Nov 2005 16:58
- Wohnort: Kreis Wesel
- Hat sich bedankt: 210 Mal
- Danksagung erhalten: 67 Mal
Hier mal der Code
Code: Alles auswählen
METHOD ankaufpreisparameter:maskeGui()
LOCAL nEvent, mp1, mp2
LOCAL nPBAbstand := 20
LOCAL nPBAnfang := 35
LOCAL nAbzugHoehe
LOCAL nDlgBreite := 900
LOCAL nDlgHoehe := 470
LOCAL nGruppeBreite := nDlgBreite - 10
LOCAL nGruppeHoehe := nDlgHoehe - 10
LOCAL nTextbreite
LOCAL nPBBreite
LOCAL oXbp
::oAKPDlg := XbpDialog():new(SetAppWindow(),,,{nDlgBreite,nDlgHoehe},,.F.)
::oAKPDlg:titlebar := .F.
::oAKPDlg:create()
CenterControl(::oAKPDlg)
::oAKPDlg:show() // nachdem es positioniert wurde
::oButtonGroup := XbpStatic():new(::oAKPDlg,,{0,0},{nGruppeBreite,50})
::oButtonGroup:type := XBPSTATIC_TYPE_GROUPBOX
::oButtonGroup:create()
nPbBreite := 70
::oPbNeu := XbpPushButton():new(::oButtonGroup,,{nPBAnfang,5},{nPBBreite,20})
::oPbNeu:caption := "~Neu"
::oPBNeu:tabStop := .T.
::oPbNeu:create()
nPBAnfang += nPBBreite + nPBAbstand
::oPbSuchen := XbpPushButton():new(::oButtonGroup,,{nPBAnfang,5},{nPBBreite,20})
::oPbSuchen:caption := "~Suchen"
::oPBSuchen:tabStop := .T.
::oPbSuchen:create()
::oPbSuchen:activate := {|| ::oSle1:disable()}
nPBAnfang += nPBBreite + nPBAbstand
::oPbEdit := XbpPushButton():new(::oButtonGroup,,{nPBAnfang,5},{nPBBreite,20})
::oPbEdit:caption := "Ä~ndern"
::oPBEdit:tabStop := .T.
::oPbEdit:create()
nPBAnfang += nPBBreite + nPBAbstand
::oPbTop := XbpPushButton():new(::oButtonGroup,,{nPBAnfang,5},{nPBBreite,20})
::oPbTop:caption := "<<"
::oPBTop:tabStop := .T.
::oPbTop:create()
nPBAnfang += nPBBreite + nPBAbstand
::oPbvw := XbpPushButton():new(::oButtonGroup,,{nPBAnfang,5},{nPBBreite,20})
::oPbvw:caption := "<"
::oPBvw:tabStop := .T.
::oPbvw:create()
nPBAnfang += nPBBreite + nPBAbstand
::oPbrw := XbpPushButton():new(::oButtonGroup,,{nPBAnfang,5},{nPBBreite,20})
::oPbrw:caption := ">"
::oPBrw:tabStop := .T.
::oPbrw:create()
nPBAnfang += nPBBreite + nPBAbstand
::oPbBottom := XbpPushButton():new(::oButtonGroup,,{nPBAnfang,5},{nPBBreite,20})
::oPbBottom:caption := ">>"
::oPBBottom:tabStop := .T.
::oPbBottom:create()
nPBAnfang += nPBBreite + nPBAbstand
::oPbSave := XbpPushButton():new(::oButtonGroup,,{nPBAnfang,5},{nPBBreite,20})
::oPbSave:caption := "S~peichern"
::oPBSave:tabStop := .T.
::oPbSave:create()
nPBAnfang += nPBBreite + nPBAbstand
::oPbEnde := XbpPushButton():new(::oButtonGroup,,{nPBAnfang,5},{nPBBreite,20})
::oPbEnde:caption := "~Ende"
::oPBEnde:tabStop := .T.
::oPbEnde:create()
::oGruppe := XbpStatic():new(::oAKPDlg,,{1,1},{nGruppeBreite,nGruppeHoehe})
::oGruppe:caption := "Parametereingabe für Ankaufpreisermittlung über das System"
::oGruppe:type := XBPSTATIC_TYPE_GROUPBOX
::oGruppe:create()
nTextbreite := 200
nAbzughoehe := 50
::oStatic := XbpStatic():new(::oGruppe,,{5,nGruppeHoehe-nAbzugHoehe},{nTextbreite,20})
::oStatic:caption := "Bezeichnung des Parameters:"
::oStatic:options := XBPSTATIC_TEXT_CENTER+XBPSTATIC_TEXT_VCENTER
::oStatic:create()
::oSle1 := XbpSLE():new(::oGruppe,,{nTextbreite+5,nGruppeHoehe-nAbzugHoehe,},{650,20})
::oSle1:bufferlength := 80
::oSle1:tabStop := .T.
::oSle1:dataLink := {|x| IIF(x==NIL , ::bez, ::bez := x)}
::oSle1:create():setData()
nTextbreite := nDlgBreite-20
nAbzugHoehe += 30
::oBlock := XbpStatic():new(::oGruppe,,{5,nGruppeHoehe-nAbzugHoehe},{nTextbreite,25})
::oBlock:options := XBPSTATIC_TEXT_RIGHT+XBPSTATIC_TEXT_VCENTER
::oBlock:type := 1+13
::oBlock:create()
::oStatic := XbpStatic():new(::oGruppe,,{5,nGruppeHoehe-nAbzugHoehe},{nTextbreite,25})
::oStatic:caption := "Es werden zuerst die vergangenen Tage seit der Veröffentlichung des Titels geprüft:"
::oStatic:options := XBPSTATIC_TEXT_CENTER+XBPSTATIC_TEXT_VCENTER
::oStatic:create()
nTextBreite := 700
nAbzugHoehe += 30
::oStatic := XbpStatic():new(::oGruppe,,{5,nGruppeHoehe-nAbzugHoehe},{nTextbreite,20})
::oStatic:caption := "Wenn das Veröffentlichungsdatum des VO 1) weniger, oder 2) mehr als diese Tage zurückliegt:"
::oStatic:options := XBPSTATIC_TEXT_RIGHT+XBPSTATIC_TEXT_VCENTER
::oStatic:create()
::oSB1 := XbpSpinButton():new(::oGruppe,,{nTextbreite+5,nGruppeHoehe-nAbzugHoehe},{40,20})
::oSB1:tabStop := .T.
::oSb1:setNumLimits( 1, 999 )
::oSB1:dataLink := {|x| IIF(x==NIL , ::tagevoe, ::tagevoe := x)}
::oSB1:create()
::oSB1:setData()
nAbzugHoehe += 20
::oStatic := XbpStatic():new(::oGruppe,,{5,nGruppeHoehe-nAbzugHoehe},{nTextbreite,20})
::oStatic:caption := "Dann wird bei 1) vom VKGBR/HAP ein Prozentsatz geboten, von:"
::oStatic:options := XBPSTATIC_TEXT_RIGHT+XBPSTATIC_TEXT_VCENTER
::oStatic:create()
::oSB2 := XbpSpinButton():new(::oGruppe,,{nTextbreite+5,nGruppeHoehe-nAbzugHoehe},{40,20})
::oSB2:tabStop := .T.
::oSb2:setNumLimits( 1, 99 )
::oSB2:dataLink := {|x| IIF(x==NIL , ::prozent1,::prozent1 := x)}
::oSB2:create()
::oSB2:setData()
nAbzugHoehe += 20
::oStatic := XbpStatic():new(::oGruppe,,{5,nGruppeHoehe-nAbzugHoehe},{nTextbreite,20})
::oStatic:caption := "oder wird bei 2) vom VKGBR/HAP ein Prozentsatz geboten, von:"
::oStatic:options := XBPSTATIC_TEXT_RIGHT+XBPSTATIC_TEXT_VCENTER
::oStatic:create()
::oSb3 := XbpSpinButton():new(::oGruppe,,{nTextbreite+5,nGruppeHoehe-nAbzugHoehe},{40,20})
::oSb3:tabStop := .T.
::oSb3:setNumLimits( 1, 99 )
::oSb3:dataLink := {|x| IIF(x==NIL , ::prozent2,::prozent2 := x)}
::oSb3:create()
::oSb3:setData()
nAbzugHoehe += 30
nTExtBreite := nDlgBreite-20
::oBlock := XbpStatic():new(::oGruppe,,{5,nGruppeHoehe-nAbzugHoehe},{nTextbreite,25})
::oBlock:options := XBPSTATIC_TEXT_RIGHT+XBPSTATIC_TEXT_VCENTER
::oBlock:type := 1+13
::oBlock:create()
::oStatic := XbpStatic():new(::oGruppe,,{5,nGruppeHoehe-nAbzugHoehe},{nTextbreite,25})
::oStatic:caption := "Als nächstes wird der aktuelle Bestand geprüft:"
::oStatic:options := XBPSTATIC_TEXT_CENTER+XBPSTATIC_TEXT_VCENTER
::oStatic:create()
nAbzugHoehe += 30
nTExtBreite := 700
::oStatic := XbpStatic():new(::oGruppe,,{5,nGruppeHoehe-nAbzugHoehe},{nTextbreite,20})
::oStatic:caption := "Wenn der VO-Bestand 3) bei einer maximalen Stückzahl liegt von:"
::oStatic:options := XBPSTATIC_TEXT_RIGHT+XBPSTATIC_TEXT_VCENTER
::oStatic:create()
::oSB4 := XbpSpinButton():new(::oGruppe,,{nTextbreite+5,nGruppeHoehe-nAbzugHoehe},{40,20})
::oSB4:clipSiblings := .T.
::oSB4:tabStop := .T.
::oSb4:setNumLimits( 1, 999 )
::oSB4:dataLink := {|x| IIF(x==NIL , ::bestand3, ::bestand3 := x)}
::oSB4:create()
::oSB4:setData()
nAbzugHoehe += 20
::oStatic := XbpStatic():new(::oGruppe,,{5,nGruppeHoehe-nAbzugHoehe},{nTextbreite,20})
::oStatic:caption := "Dann wird entweder von 1) oder von 2) ein Prozentsatz geboten von:"
::oStatic:options := XBPSTATIC_TEXT_RIGHT+XBPSTATIC_TEXT_VCENTER
::oStatic:create()
::oSb5 := XbpSpinButton():new(::oGruppe,,{nTextbreite+5,nGruppeHoehe-nAbzugHoehe},{40,20})
::oSb5:tabStop := .T.
::oSb5:setNumLimits( 1, 99 )
::oSb5:dataLink := {|x| IIF(x==NIL , ::prozent3,::prozent3 := x)}
::oSb5:create()
::oSb5:setData()
nAbzugHoehe += 20
::oStatic := XbpStatic():new(::oGruppe,,{5,nGruppeHoehe-nAbzugHoehe},{nTextbreite,20})
::oStatic:caption := "4) Wenn der VO-Bestand höher liegt als bei 3), dann wird von 3) ein Prozentsatz geboten von:"
::oStatic:options := XBPSTATIC_TEXT_RIGHT+XBPSTATIC_TEXT_VCENTER
::oStatic:create()
::oSb6 := XbpSpinButton():new(::oGruppe,,{nTextbreite+5,nGruppeHoehe-nAbzugHoehe},{40,20})
::oSb6:tabStop := .T.
::oSb6:setNumLimits( 1, 99 )
::oSb6:dataLink := {|x| IIF(x==NIL , ::prozent4,::prozent4 := x)}
::oSb6:create()
::oSb6:setData()
nAbzugHoehe += 20
::oStatic := XbpStatic():new(::oGruppe,,{5,nGruppeHoehe-nAbzugHoehe},{nTextbreite,20})
::oStatic:caption := "Dieser Prozentsatz 4) wird dann bei jedem weiteren VO-Gebot von dem vorherigen VO-Gebot solange"
::oStatic:options := XBPSTATIC_TEXT_RIGHT+XBPSTATIC_TEXT_VCENTER
::oStatic:create()
nAbzugHoehe += 20
::oStatic := XbpStatic():new(::oGruppe,,{5,nGruppeHoehe-nAbzugHoehe},{nTextbreite,20})
::oStatic:caption := "folgend abgezogen, bis ein Mindestbetrag in CENT erreicht ist, in Höhe von:"
::oStatic:options := XBPSTATIC_TEXT_RIGHT+XBPSTATIC_TEXT_VCENTER
::oStatic:create()
::oSB7 := XbpSpinButton():new(::oGruppe,,{nTextbreite+5,nGruppeHoehe-nAbzugHoehe},{40,20})
::oSB7:tabStop := .T.
::oSb7:setNumLimits( 1, 99 )
::oSB7:dataLink := {|x| IIF(x==NIL , ::mingebot, ::mingebot := x)}
::oSB7:create()
::oSB7:setData()
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: 21189
- Registriert: Di, 29. Nov 2005 16:58
- Wohnort: Kreis Wesel
- Hat sich bedankt: 210 Mal
- Danksagung erhalten: 67 Mal
Hier der Rest
Das teil als solches klappt, alles initialisiert, mit init usw. usw. Ich komme in die Felder rein, wenn ich sie mit der Maus anwähle. Die Pushbuttons kriege ich aber nicht mit der Maus, oder mit den Hotkeys angesprochen.
Code: Alles auswählen
nAbzugHoehe += 20
::oStatic := XbpStatic():new(::oGruppe,,{5,nGruppeHoehe-nAbzugHoehe},{nTextbreite,20})
::oStatic:caption := "Höhe des Rundungsbetrages nach dem Komma in CENT eingeben:"
::oStatic:options := XBPSTATIC_TEXT_RIGHT+XBPSTATIC_TEXT_VCENTER
::oStatic:create()
::oSB8 := XbpSpinButton():new(::oGruppe,,{nTextbreite+5,nGruppeHoehe-nAbzugHoehe},{40,20})
::oSB8:tabStop := .T.
::oSb8:setNumLimits( 10, 50 )
::oSB8:dataLink := {|x| IIF(x==NIL , ::rundenauf, ::rundenauf := x)}
::oSB8:create()
::oSB8:setData()
nAbzugHoehe += 30
::oStatic := XbpStatic():new(::oGruppe,,{5,nGruppeHoehe-nAbzugHoehe},{nTextbreite,20})
::oStatic:caption := "System, für das dieser Parameter gelten soll:"
::oStatic:options := XBPSTATIC_TEXT_RIGHT+XBPSTATIC_TEXT_VCENTER
::oStatic:create()
::oComboBox := XbpComboBox():new(::oGruppe,,{nTextbreite+5,nGruppeHoehe-nAbzugHoehe},{100,20})
::oComboBox:markMode := XBPLISTBOX_MM_SINGLE
::oComboBox:create()
nAbzugHoehe += 30
::oStatic := XbpStatic():new(::oGruppe,,{5,nGruppeHoehe-nAbzugHoehe},{nTextbreite,20})
::oStatic:caption := "Genre, für die dieser Systemparameter gelten soll:"
::oStatic:options := XBPSTATIC_TEXT_RIGHT+XBPSTATIC_TEXT_VCENTER
::oStatic:create()
nAbzugHoehe += 30
::oStatic := XbpStatic():new(::oGruppe,,{5,nGruppeHoehe-nAbzugHoehe},{nTextbreite,20})
::oStatic:caption := "Soll dieser Parameter deaktiviert werden?:"
::oStatic:options := XBPSTATIC_TEXT_RIGHT+XBPSTATIC_TEXT_VCENTER
::oStatic:create()
::oChkBox := XbpCheckBox():new(::oGruppe,,{nTextbreite+5,nGruppeHoehe-nAbzugHoehe},{20,20})
::oChkBox:dataLink := {|x| IIF(x==NIL , ::gesperrt, ::gesperrt := x)}
::oChkBox:create()
::oChkBox:setData()
nEvent := 0
DO WHILE .T.
nEvent := AppEvent( @mp1, @mp2, @oXbp)
oXbp:HandleEvent( nEvent, mp1, mp2 )
ENDDO .T.
altd()
::oAkPDlg:destroy()
RETURN self
Zuletzt geändert von Manfred am Mi, 31. Mai 2006 20:32, 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!!
- Martin Altmann
- Foren-Administrator
- Beiträge: 16511
- Registriert: Fr, 23. Sep 2005 4:58
- Wohnort: Berlin
- Hat sich bedankt: 111 Mal
- Danksagung erhalten: 48 Mal
- Kontaktdaten:
Hallo Manfred,
Schau Dir in dem Beispiel den Knopf "Vor" an: Er schreibt die Eingaben in den aktuellen Satz, geht auf den nächsten Satz und liest die Daten in die Editierfelder ein.
Viele Grüße,
Martin
im Prinzip musst Du einfach nur alle Deine Xbase++-Parts, die Daten aus Deiner Datenbank enthalten in das Array schreiben. Wann immer Du die Daten aus Deinem Array in die Datenbank schreiben willst, nimmst Du dafür die Funktion gather(). Wann immer Du Deine Editierfelder mit den Daten aus Deiner Datenbank füllen willst, nimmst Du dafür die Funktion scatter().Manfred hat geschrieben:Ich komme nicht drauf, wie ich alle Felder wieder angezeigt bekomme. Muß ich die alle einzeln aufrufen (über eben eine Func), oder gibt es da einen Refresh Befehl, oder wie darf ich das verstehen?
Schau Dir in dem Beispiel den Knopf "Vor" an: Er schreibt die Eingaben in den aktuellen Satz, geht auf den nächsten Satz und liest die Daten in die Editierfelder ein.
Viele Grüße,
Martin
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.
- Manfred
- Foren-Administrator
- Beiträge: 21189
- Registriert: Di, 29. Nov 2005 16:58
- Wohnort: Kreis Wesel
- Hat sich bedankt: 210 Mal
- Danksagung erhalten: 67 Mal
Hi martin,
das hatte ich schon mal probiert, aber wie kriege ich die Daten wieder auf den Bildschirm?
das hatte ich schon mal probiert, aber wie kriege ich die Daten wieder auf den Bildschirm?
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: 21189
- Registriert: Di, 29. Nov 2005 16:58
- Wohnort: Kreis Wesel
- Hat sich bedankt: 210 Mal
- Danksagung erhalten: 67 Mal
Werden die ganzen Sle und Spinbutton und Combobox Objekte in das Array geschrieben?
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!!
- Martin Altmann
- Foren-Administrator
- Beiträge: 16511
- Registriert: Fr, 23. Sep 2005 4:58
- Wohnort: Berlin
- Hat sich bedankt: 111 Mal
- Danksagung erhalten: 48 Mal
- Kontaktdaten:
Hallo Manfred,
definiere Dir eine Klassenvariable (Bsp.: aEditControls).
In Deiner Methode maskeGUI() initialisierst Du sie am Anfang:Nach jeder einzelnen Zeile mit einem :SetData() fügst Du das entsprechende Objekt Deinem Array hinzu:
Für Deine Knöpfe zum Blättern nutzt Du den o.g. Code.
Wichtig! Du gehst momentan in Deinen Datalinks auf Variablen - Du musst aber in dem Fall direkt auf die Felder in der Datenbank gehen (s. a. in dem von mir geposteten Beispiel)!!!
Viele Grüße,
Martin
definiere Dir eine Klassenvariable (Bsp.: aEditControls).
In Deiner Methode maskeGUI() initialisierst Du sie am Anfang:
Code: Alles auswählen
::aEditControls := {}
Code: Alles auswählen
aadd( ::aEditControls, ::oSle1 )
aadd( ::aEditControls, ::oSB1 )
Wichtig! Du gehst momentan in Deinen Datalinks auf Variablen - Du musst aber in dem Fall direkt auf die Felder in der Datenbank gehen (s. a. in dem von mir geposteten Beispiel)!!!
Viele Grüße,
Martin
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.
- Manfred
- Foren-Administrator
- Beiträge: 21189
- Registriert: Di, 29. Nov 2005 16:58
- Wohnort: Kreis Wesel
- Hat sich bedankt: 210 Mal
- Danksagung erhalten: 67 Mal
Hi Martin,
Stimmt, ich gehe auf die Variablen. Geht das nicht so? oder verstehe ich das jetzt falsch?
Das habe ich schon so gemacht, hatte aber eine fehlermeldung danach und dann war ich mir nicht mehr sicher.Martin Altmann hat geschrieben:Hallo Manfred,
definiere Dir eine Klassenvariable (Bsp.: aEditControls).
In Deiner Methode maskeGUI() initialisierst Du sie am Anfang:Nach jeder einzelnen Zeile mit einem :SetData() fügst Du das entsprechende Objekt Deinem Array hinzu:Code: Alles auswählen
::aEditControls := {}
Für Deine Knöpfe zum Blättern nutzt Du den o.g. Code.Code: Alles auswählen
aadd( ::aEditControls, ::oSle1 ) aadd( ::aEditControls, ::oSB1 )
Wichtig! Du gehst momentan in Deinen Datalinks auf Variablen - Du musst aber in dem Fall direkt auf die Felder in der Datenbank gehen (s. a. in dem von mir geposteten Beispiel)!!!
Viele Grüße,
Martin
Stimmt, ich gehe auf die Variablen. Geht das nicht so? oder verstehe ich das jetzt falsch?
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!!
- Martin Altmann
- Foren-Administrator
- Beiträge: 16511
- Registriert: Fr, 23. Sep 2005 4:58
- Wohnort: Berlin
- Hat sich bedankt: 111 Mal
- Danksagung erhalten: 48 Mal
- Kontaktdaten:
Hallo Manfred,
Viele Grüße,
Martin
mit der Funktion scatter()! Wenn das nicht hilft, musst Du danach einfach ein ::invalidateRect() aufrufen, dann wird die Anzeige aktualisiert. Dies ist aber bei Eingabefeldern eigentlich nicht nötig!!Manfred hat geschrieben:das hatte ich schon mal probiert, aber wie kriege ich die Daten wieder auf den Bildschirm?
Ja - siehe mein Beispiel. Natürlich nur die, die auch einen Datalink in die Datenbank haben!Manfred hat geschrieben:Werden die ganzen Sle und Spinbutton und Combobox Objekte in das Array geschrieben?
Viele Grüße,
Martin
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.
- Martin Altmann
- Foren-Administrator
- Beiträge: 16511
- Registriert: Fr, 23. Sep 2005 4:58
- Wohnort: Berlin
- Hat sich bedankt: 111 Mal
- Danksagung erhalten: 48 Mal
- Kontaktdaten:
Hallo Manfred,
Was macht gather() in Deinem Fall? Es liest den Inhalt der Editierfelder in Deine Variablen!
Was macht scatter() in Deinem Fall? Es liest den Inhalt der Variablen in Deine Editierfelder!
Es gibt also keinerlei Abgleich zwischen der Datenbank und den Variablen!
Du musst also selber dafür sorgen, dass Deine Variablen aktuell sind und damit im Prinzip gather() und scatter() selber programmieren!
Mach es Dir einfach und gehe in Deinen :datalinks direkt auf die Felder!
Viele Grüße,
Martin
das geht im Prinzip schon, nur hat das nicht das Ergebnis, das Du Dir wünscht!!Manfred hat geschrieben:Stimmt, ich gehe auf die Variablen. Geht das nicht so? oder verstehe ich das jetzt falsch?
Was macht gather() in Deinem Fall? Es liest den Inhalt der Editierfelder in Deine Variablen!
Was macht scatter() in Deinem Fall? Es liest den Inhalt der Variablen in Deine Editierfelder!
Es gibt also keinerlei Abgleich zwischen der Datenbank und den Variablen!
Du musst also selber dafür sorgen, dass Deine Variablen aktuell sind und damit im Prinzip gather() und scatter() selber programmieren!
Mach es Dir einfach und gehe in Deinen :datalinks direkt auf die Felder!
Viele Grüße,
Martin
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.
- Manfred
- Foren-Administrator
- Beiträge: 21189
- Registriert: Di, 29. Nov 2005 16:58
- Wohnort: Kreis Wesel
- Hat sich bedankt: 210 Mal
- Danksagung erhalten: 67 Mal
Hi Martin,
ich glaube wir kommen der Sache näher....
ich glaube wir kommen der Sache näher....
Die Editierfelder sind doch meine Variablen.. Muß ich bei gather dann nicht die Methode einsetzen, die die Felder der DB in die Variablen liest?Martin Altmann hat geschrieben:Hallo Manfred,das geht im Prinzip schon, nur hat das nicht das Ergebnis, das Du Dir wünscht!!Manfred hat geschrieben:Stimmt, ich gehe auf die Variablen. Geht das nicht so? oder verstehe ich das jetzt falsch?
Was macht gather() in Deinem Fall? Es liest den Inhalt der Editierfelder in Deine Variablen!
also hier müßte dann das Schreiben in die DB aus den Variablen rein?Was macht scatter() in Deinem Fall? Es liest den Inhalt der Variablen in Deine Editierfelder!
Es gibt also keinerlei Abgleich zwischen der Datenbank und den Variablen!
Du musst also selber dafür sorgen, dass Deine Variablen aktuell sind und damit im Prinzip gather() und scatter() selber programmieren!
Mach es Dir einfach und gehe in Deinen :datalinks direkt auf die Felder!
Viele Grüße,
Martin
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!!
- Martin Altmann
- Foren-Administrator
- Beiträge: 16511
- Registriert: Fr, 23. Sep 2005 4:58
- Wohnort: Berlin
- Hat sich bedankt: 111 Mal
- Danksagung erhalten: 48 Mal
- Kontaktdaten:
Hallo Manfred,
die Funktionen scatter() und gather() kümmern sich um alles!!
Bedenke: Du übergibst ihnen ja das Array mit den Objekten als Parameter! In den Funktionen werden dann die :datalink-Methoden der einzelnen Objekte (=Arrayelemente) ausgeführt - entweder schreibender- oder lesenderweise!
Viele Grüße,
Martin
die Funktionen scatter() und gather() kümmern sich um alles!!
Bedenke: Du übergibst ihnen ja das Array mit den Objekten als Parameter! In den Funktionen werden dann die :datalink-Methoden der einzelnen Objekte (=Arrayelemente) ausgeführt - entweder schreibender- oder lesenderweise!
Viele Grüße,
Martin
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.
- Manfred
- Foren-Administrator
- Beiträge: 21189
- Registriert: Di, 29. Nov 2005 16:58
- Wohnort: Kreis Wesel
- Hat sich bedankt: 210 Mal
- Danksagung erhalten: 67 Mal
verstehe ich nicht
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: 21189
- Registriert: Di, 29. Nov 2005 16:58
- Wohnort: Kreis Wesel
- Hat sich bedankt: 210 Mal
- Danksagung erhalten: 67 Mal
Ich habe das hier gemacht, das klappte nicht
die Methode ::readREcord(self) wurde aufgerufen, das konnte ich sehen im Debugger, aber es tat sich danach nichts am Bildschirm.
und das klappt auch nicht
Ich habe natürlich alle Objekte in aEditControls geschrieben.
Ich bin gefrustet. Was mache ich falsch?
Code: Alles auswählen
::oPbTop:activate := {|| (::nArea)->(DBGOTOP()), Gather(::readRecord(self)), ::oAKPDlg:invalidateRect() }
und das klappt auch nicht
Code: Alles auswählen
::oPbTop:activate := {|| (::nArea)->(DBSKIP()), Gather( aEditControls ), ::oAKPDlg:invalidateRect() }
Ich bin gefrustet. Was mache ich falsch?
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!!
- Martin Altmann
- Foren-Administrator
- Beiträge: 16511
- Registriert: Fr, 23. Sep 2005 4:58
- Wohnort: Berlin
- Hat sich bedankt: 111 Mal
- Danksagung erhalten: 48 Mal
- Kontaktdaten:
Keine Sorge, probiere es einfach aus - es klappt!!
Statt:
schreibst Du halt:
(vorausgesetzt Dein Alias() heißt dbffile und das feld in der Datenbank heißt bez)
Analog bei allen anderen :datalink-Methoden.
Und bei den Knöpfen zum Blättern nicht die activate-Methode vergessen!! Z.B.:
Viele Grüße,
Martin
Statt:
Code: Alles auswählen
::oSle1:dataLink := {|x| IIF(x==NIL , ::bez, ::bez := x)}
Code: Alles auswählen
::oSle1:dataLink := {|x| IIF(x==NIL , dbffile->bez, dbffile->bez := x)}
Analog bei allen anderen :datalink-Methoden.
Und bei den Knöpfen zum Blättern nicht die activate-Methode vergessen!! Z.B.:
Code: Alles auswählen
::oPbrw:activate := {|| Gather( ::aEditControls ), ;
dbffile->( DbSkip( 1) ), ;
Scatter( ::aEditControls ) }
Martin
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.
- brandelh
- Foren-Moderator
- Beiträge: 15696
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 66 Mal
- Danksagung erhalten: 33 Mal
- Kontaktdaten:
Hallo Manfred,
grundsätzlich erhält ein oSle:setData(cDaten) so seine Daten, während man mit oSle:getData() den Inhalt auslesen kann. Falls ein codeblock in datalink hinterlegt ist wird der auch ausgeführt. Im Prinzip entspricht das dem bisherigen SAY deiner nicht GUI Anwendung.
Martins scatter/gather Beispiel lädt die SLE automatisch, wenn diese sauber definiert wurden (da gibt es ein Beispiel unter datalink ...). Der direkte Weg entspricht eher dem bisherigen Clipperverhalten, da hast du auch immer eine Anzeige nach der Satzbewegung durchlaufen müssen.
grundsätzlich erhält ein oSle:setData(cDaten) so seine Daten, während man mit oSle:getData() den Inhalt auslesen kann. Falls ein codeblock in datalink hinterlegt ist wird der auch ausgeführt. Im Prinzip entspricht das dem bisherigen SAY deiner nicht GUI Anwendung.
Martins scatter/gather Beispiel lädt die SLE automatisch, wenn diese sauber definiert wurden (da gibt es ein Beispiel unter datalink ...). Der direkte Weg entspricht eher dem bisherigen Clipperverhalten, da hast du auch immer eine Anzeige nach der Satzbewegung durchlaufen müssen.
Gruß
Hubert
Hubert
- Martin Altmann
- Foren-Administrator
- Beiträge: 16511
- Registriert: Fr, 23. Sep 2005 4:58
- Wohnort: Berlin
- Hat sich bedankt: 111 Mal
- Danksagung erhalten: 48 Mal
- Kontaktdaten:
Hallo Manfred,
Du musst vor der Bewegung des Satzzeigers ein gather() machen (und nicht Deine selbstgestrickte Funktion als Parameter übergeben, sondern das Array mit den Objekten!!!) und nach der Bewegung des Satzzeigers ein scatter()!!
Bedenke: Erst wegschreiben, dann bewegen, dann neu einlesen!!
Viele Grüße,
Martin
einigesManfred hat geschrieben:Ich bin gefrustet. Was mache ich falsch?
Du musst vor der Bewegung des Satzzeigers ein gather() machen (und nicht Deine selbstgestrickte Funktion als Parameter übergeben, sondern das Array mit den Objekten!!!) und nach der Bewegung des Satzzeigers ein scatter()!!
Bedenke: Erst wegschreiben, dann bewegen, dann neu einlesen!!
Viele Grüße,
Martin
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.
- Manfred
- Foren-Administrator
- Beiträge: 21189
- Registriert: Di, 29. Nov 2005 16:58
- Wohnort: Kreis Wesel
- Hat sich bedankt: 210 Mal
- Danksagung erhalten: 67 Mal
Martin,
ich verstehe das nicht. Kann ich nicht Skippen, dann Varia einlesen aus DB und dann anzeigen machen?
ich verstehe das nicht. Kann ich nicht Skippen, dann Varia einlesen aus DB und dann anzeigen machen?
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!!
- Martin Altmann
- Foren-Administrator
- Beiträge: 16511
- Registriert: Fr, 23. Sep 2005 4:58
- Wohnort: Berlin
- Hat sich bedankt: 111 Mal
- Danksagung erhalten: 48 Mal
- Kontaktdaten:
Klar kannst Du das!
Nur willst Du doch sicherlich vor dem Skippen erstmal die Änderungen in die Datenbank zurückschreiben!
Und ausserdem hattest Du nach dem Skippen gather() aufgerufen! Gather liest aber nicht aus der Datenbank - das macht scatter()!
Gather schreibt in die Datenbank!
Viele Grüße,
Martin
Nur willst Du doch sicherlich vor dem Skippen erstmal die Änderungen in die Datenbank zurückschreiben!
Und ausserdem hattest Du nach dem Skippen gather() aufgerufen! Gather liest aber nicht aus der Datenbank - das macht scatter()!
Gather schreibt in die Datenbank!
Viele Grüße,
Martin
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.
- Manfred
- Foren-Administrator
- Beiträge: 21189
- Registriert: Di, 29. Nov 2005 16:58
- Wohnort: Kreis Wesel
- Hat sich bedankt: 210 Mal
- Danksagung erhalten: 67 Mal
Aaah, jetzt verstehe ich unser Missverständnis.
Ich möchte nus Skippen und lesen und Anzeigen.Mehr nicht. Schreiben oder so, würde anders laufen.
Also, ich gehe mal davon aus, die Funktionen werden der Reihe nach abgearbeitet.
Skippen werde ich gleich nochmals kurz testet, Auslesen macht das Programm, jetzt muß ich nur noch irgendwie den Unsinn am Bildschirm angezeigt bekommen.
Ich möchte nus Skippen und lesen und Anzeigen.Mehr nicht. Schreiben oder so, würde anders laufen.
Also, ich gehe mal davon aus, die Funktionen werden der Reihe nach abgearbeitet.
Skippen werde ich gleich nochmals kurz testet, Auslesen macht das Programm, jetzt muß ich nur noch irgendwie den Unsinn am Bildschirm angezeigt bekommen.
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!!
- Martin Altmann
- Foren-Administrator
- Beiträge: 16511
- Registriert: Fr, 23. Sep 2005 4:58
- Wohnort: Berlin
- Hat sich bedankt: 111 Mal
- Danksagung erhalten: 48 Mal
- Kontaktdaten:
OK!
Dann musst Du nach dem Skip() ein Scatter() machen!
Und Du solltest Deine :datalink-Methoden ändern:
Und Du solltest Deine Xbase++-Parts nicht editierbar machen!!
Also z.B.:
Viele Grüße,
Martin
Dann musst Du nach dem Skip() ein Scatter() machen!
Und Du solltest Deine :datalink-Methoden ändern:
Code: Alles auswählen
::oSle1:dataLink := {|| dbffile->bez }
Also z.B.:
Code: Alles auswählen
::oSle1:editable := .f.
Martin
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.
- brandelh
- Foren-Moderator
- Beiträge: 15696
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 66 Mal
- Danksagung erhalten: 33 Mal
- Kontaktdaten:
:invalidateRect() ist unnötig, wenn du nur den Inhalt von SLE etc. änderst. Diese geben selbst die Bereiche an, in denen die Anzeige erscheinen soll.Manfred hat geschrieben:Ich habe das hier gemacht, das klappte nichtCode: Alles auswählen
::oPbTop:activate := {|| (::nArea)->(DBGOTOP()), Gather(::readRecord(self)), ::oAKPDlg:invalidateRect() }
Sonst wirst du unnötiges Flackern erhalten. (alles löschen und neu aufbauen)
Gruß
Hubert
Hubert