DCSPINBUTTON und dc_getrefresh()

Moderator: Moderatoren

Antworten
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21200
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 210 Mal
Danksagung erhalten: 67 Mal

DCSPINBUTTON und dc_getrefresh()

Beitrag von Manfred »

Hi,

es wird jetzt evtl. wieder kompliziert.

Ich versuche zunächst einmal das Problem kurz zu umreißen, vielleicht kommt dabei ja schon ein Lösungsansatz zum Vorschein. In einer Version in purem xbase++ habe ich einen XbpSpinButton, der mit der Maus, oder mit dem Cursor auf oder ab gezählt werden kann. Wenn das passiert, wird jedesmal, wenn sich der Wert des Spinbutton ändert eine Funktion aufgerufen, die mit dieser Zahl eine passende ID in einer anderen DB sucht. So weit so gut. Neben dem Spinbutton ist ein XbpStatic, was das gefundene Ergebnis (siehe etwas tiefer) am Bildschirm anzeigen soll.
Wenn der Satz gefunden wurde, dann wird er aus der DB in Speichervariablen geschrieben und über staticobjekt:var:setdata() in das Staticobjekt geschrieben und direkt angezeigt.

Das habe ich jetzt versucht mit express++ nachzubauen. Jetzt taucht aber folgendes Problem auf:

Ich kann den Spinbutton durchlaufen und es wird auch über Up und Down die Funktion aufgerufen, die in der anderen DB sucht. Ich kriege es aber nicht hin, das (in diesem Falle) DCGET zu aktualisieren und den gefundenen Wert am Bildschirm anzuzeigen. Ich habe es schon mit dc_getrefresh(getlist) versucht, aber dann wird sofort der Spinbutton wieder auf den Ursprungswert, vor dem Aufruf der Funktion, zurückgestellt.
Bevor ich jetzt hier etliches an Quellcode reinstelle, wollte ich nur mal nachfragen, ob es bei dieser Sache irgendwas gibt, was auf jeden Fall beachtet werden muß.
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!!
Benutzeravatar
Koverhage
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2470
Registriert: Fr, 23. Dez 2005 8:00
Wohnort: Aalen
Hat sich bedankt: 102 Mal
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: DCSPINBUTTON und dc_getrefresh()

Beitrag von Koverhage »

Manfred,
man muss doch eigentlich den Ursprungswert neu setzen (natürlich vor dc_getrefresh) dann sollte es funktionieren.
Gruß
Klaus
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21200
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 210 Mal
Danksagung erhalten: 67 Mal

Re: DCSPINBUTTON und dc_getrefresh()

Beitrag von Manfred »

Hi Klaus,

ich verstehe nicht was Du meinst.

Ich habe eine DCGET Variable und ein Object dazu. In der Funktion schreibe ich einen neuen Wert in die Variable. Jetzt müßte der neue Wert in dem Getfeld angezeigt werden und das geht normalerweise über setdata(). Hier aber nicht und ich kann einfach nicht nachvollziehen, welchen Fehler ich mache. Wenn ich aber mit dc_getrefresh(getlist) dran gehe, dann wird nichts geändert, im Gegenteil, das Spinfeld ändert nicht mal mehr seinen Wert, bzw. im Debugger kann man sehen, wie nach dem refresh der Ursprungswert wieder eingetragen wird.
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!!
Benutzeravatar
Koverhage
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2470
Registriert: Fr, 23. Dez 2005 8:00
Wohnort: Aalen
Hat sich bedankt: 102 Mal
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: DCSPINBUTTON und dc_getrefresh()

Beitrag von Koverhage »

Manfred,

kannst Du den entsprechenden Code-Schnipsel zeigen ?
Gruß
Klaus
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21200
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 210 Mal
Danksagung erhalten: 67 Mal

Re: DCSPINBUTTON und dc_getrefresh()

Beitrag von Manfred »

Hi,

ok, hier erstmal nur das Gerippe.
-------> schnipp

Code: Alles auswählen

         @ nOben,nLinks DCSAY "Staat:";
                       OBJECT oText;
                      SAYSIZE nSayWidth, nSayHeight
         @  0,nSayWidth DCSPINBUTTON oLand:idstaat;
                    DOWNSPIN {|| sucheStaat(oLand,oStaat)};
                       LIMITS 1,(oStaat:nArea)->(LastRec());
                         SIZE nSpinBreite;
                       OBJECT oLand:oIdStaat;
                     RELATIVE oText;
                      TABSTOP;
                       UPSPIN {|| sucheStaat(oLand,oStaat)}
         @ 0,nSpinBreite DCGET oStaat:bez;
                        OBJECT oStaat:oBez;
                      RELATIVE oLand:oIdstaat;
                          WHEN {||.F.}
********************************************************************************
FUNCTION sucheStaat(oLand,oStaat)

         oStaat:satzsuchen(Str(oLand:idstaat,8,0),,"id") // diese Funktion sucht und kopiert dann die Felder aus Db in die Member
         RETURN(.T.)                                                // variablen.
Ich überlege aber schon, ob ich die Spielerei nicht einfach über DCGET mache und dann mit Valid arbeite.
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!!
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9367
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 102 Mal
Danksagung erhalten: 361 Mal
Kontaktdaten:

Re: DCSPINBUTTON und dc_getrefresh()

Beitrag von Tom »

Hallo, Manfred.

Ich habe auch meine Probleme mit DCSPINBUTTONS gehabt und bin zu der Lösung gekommen, dass man im CALLBACK-Slot (der i.e. dem DATALINK anderer Objekte entspricht) folgendes machen muss:

Code: Alles auswählen

@ 0,0 DCSPINBUTTON nJahr SIZE 15,1 LIMITS 1990,2010 OBJECT oSpinButton ;
         CALLBACK {||nJahr:=oSpinButton:EditBuffer(),DC_GetRefresh(GetList)}
Dann funktionieren auch abhängige Refreshs.
Herzlich,
Tom
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21200
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 210 Mal
Danksagung erhalten: 67 Mal

Re: DCSPINBUTTON und dc_getrefresh()

Beitrag von Manfred »

Hi Tom,

danke erstmal. Aber irgendwas ist falsch in meinem Code. Es klappt trotzdem nicht. Aber egal, ich habe es jetzt auf DCGET umgebaut und das ist eh besser zu bedienen, da es an die alte Version anlehnt. DCSPINBUTTON war eigentlich nur "nice to have it", bzw. Schickimicki. Wenn ich mal wieder viel zeit habe, dann werde ich mich nochmals an die Sache ranmachen. Oder wenn ich mehr KoffHoff habe.
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!!
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15697
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 66 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: DCSPINBUTTON und dc_getrefresh()

Beitrag von brandelh »

Hi,

wobei ich die "Spinbuttons" eher für unnötig halte ;-)

wenn ich ein Jahr von 1900 bis 2010 damit eingeben will dann gute Nacht ;-) per Tastatur ist man auf jeden Fall schneller :D
Gruß
Hubert
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21200
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 210 Mal
Danksagung erhalten: 67 Mal

Re: DCSPINBUTTON und dc_getrefresh()

Beitrag von Manfred »

Hi Hubert,

Du hast vollkommen recht. Ich hatte es eingebaut und Spass gehabt wie sonstwas. Dann habe ich mir das in der Praxis beim Kunden angesehen und gemerkt, dass es absoluter Schwachsinn ist. Ich fand es toll, mit den Cursortasten rauf und runter zu zählen, aber der User wollte reintippen und das klappte nicht so wie gewünscht. Deshalb kam mir dieses Problem auch jetzt wie gerufen alles nochmals zu überdenken. Das mit dem DCGET ist auch viel besser m.E.
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!!
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9367
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 102 Mal
Danksagung erhalten: 361 Mal
Kontaktdaten:

Re: DCSPINBUTTON und dc_getrefresh()

Beitrag von Tom »

Ob sich ein Spinbutton lohnt, hängt wirklich davon ab, wie weit entfernt ein zu wählender Wert vom Default ist. Wenn man eine jährliche Umsatzstatistik anbietet, wird der Benutzer zumeist das aktuelle oder vergangene Jahr auswerten wollen, und wenn man dann als Default das vergangene Jahr anbietet, ist die "Arbeit", einen Spinbutton zu verändern, tatsächlich geringer als diejenige, eine Zahl in ein Get zu tippen. Hier ist es dann auch okay, dass jemand acht Mal eine Schaltfläche betätigen muss, wenn er für 2001 auswerten will.

@Manfred: Ich verstehe zwar nicht ganz, was Dein Code bewerkstelligen soll, aber das, was Du in den "UPSPIN"-Codeblock geschrieben hast, gehört m.E. - um das, was ich angemerkt habe, ergänzt - in den CALLBACK-Slot.
Herzlich,
Tom
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9367
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 102 Mal
Danksagung erhalten: 361 Mal
Kontaktdaten:

Re: DCSPINBUTTON und dc_getrefresh()

Beitrag von Tom »

Code: Alles auswählen

CALLBACK {||oLand:idstaat := oSpinButton:EditBuffer(), sucheStaat(oLand,oStaat), DC_GetRefresh(GetList)}
"UPSPIN" raus!

Was auch noch nicht funktionieren muss, weil ich "sucheStaat()" nicht kenne und deshalb nicht antizipieren kann, was dort mit oLand:idstaat passieren soll.
Herzlich,
Tom
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21200
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 210 Mal
Danksagung erhalten: 67 Mal

Re: DCSPINBUTTON und dc_getrefresh()

Beitrag von Manfred »

Hi Tom,

ich lasse den Thread noch als "unerledigt". Wenn ich mit express++ weiter bin, dann werde ich mich damit nochmals beschäftigen. Ich denke mal, es liegt ein Konzeptfehler meinerseits vor. Den finde ich aber jetzt noch nicht. Wie erwähnt, ich habe es auf DCGET umgestellt und das geht wesentlich schöner und schneller.

OOps, ich sehe gerade, das Du noch was nachgesetzt hast. Aber so habe ich es auch gemacht, es klappte trotzdem nicht. Die Erleuchtung das es so unpraktisch war, hilft mir im Moment viel weiter.
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!!
Antworten