:lbdblclick [ERLEDIGT]

Moderator: Moderatoren

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

:lbdblclick [ERLEDIGT]

Beitrag von Manfred »

Ich habe im Moment ein Phänomen, das ich nicht wirklich nachvollziehen kann:

Code: Alles auswählen

DCBROWSECOL DATA {|| IF(! (oSekunden2Routen:nArea)->(Eof()), IF( (oSekunden2Routen:nArea)->gesperrt,"Ja","Nein"),NIL) };
                     EVAL {|x|x:dataArea:lbDblClick := {|a,b,o| IF(oBrowseBez:colPos=2,;
                                                                  (oSekunden2Routen:felderlesen(),;
                                                                  oSekunden2Routen:gesperrt := ! (oSekunden2Routen:nArea)->gesperrt,;
                                                                  oSekunden2Routen:felderschreiben(oSekunden2Routen),;
                                                                  dc_getrefresh(getlist) ),NIL);
                                                       };
                          };
Es passiert immer wieder, dass der Doppelklick nur einen Sprung in die Zeile darunter bewirkt, ohne den Status zu ändern von Ja auf Nein, oder umgekehrt. Zuerst dachte ich meine Maus wäre kaputt, aber jetzt nachdem der Kunde auch andauernd das Problem hat, frage ich mich, kann das an dem Codeblock lbDblClick liegen, oder wo müßte ich mal anfangen zu suchen?

Also direkt vorne weg, die Maus wurde schon gewechselt, das Mauspad wurde genommen, in anderen Programmen parallel wurde getestet. Daran liegt es also nicht.
Zuletzt geändert von Manfred am Mi, 21. Jul 2010 14:25, 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!!
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
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: :lbdblclick

Beitrag von Tom »

DC_GetRefresh(GetList) refreshed Browses meistens nicht. Setz mal davor ein oBrowseBez:RefreshCurrent(). Wenn Du in der App außerdem irgendwo DC_GetWhenOnBrowseItemMarked(.T.) gesetzt hast, kannst Du das DC_GetRefresh() auch ganz weglassen, weil dann mit jedem Refresh eines Browses alle WHEN-Abhängigkeiten automatisch aktualisiert werden.
Herzlich,
Tom
Benutzeravatar
Manfred
Foren-Administrator
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: :lbdblclick

Beitrag von Manfred »

Danke Tom,

das scheint es gewesen zu sein. refreshCurrent() hat erstmal das gegeben, was ich wollte.
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: 9345
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 100 Mal
Danksagung erhalten: 359 Mal
Kontaktdaten:

Re: :lbdblclick [ERLEDIGT]

Beitrag von Tom »

Freut mich. :)

Wie gesagt, man sollte sich nicht darauf verlassen, dass DC_GetRefresh(GetList) auch für die Aktualisierung aller Browses sorgt. Eher sogar nicht - aus gutem Grund (weil Browses zuweilen ihrerseits wieder Objektabhängigkeiten haben usw.). Deshalb sind :RefreshAll() und :RefreshCurrent() in solchen Momenten die Methoden der Wahl. Mit der o.g. Get-/Set-Funktion erreichst Du, dass andere Objekte, deren WHEN-/EDITPROTECT-Klauseln abhängig von der aktuellen Browse-Zeile sind, immer automatisch aktualisiert werden:

Code: Alles auswählen

@ 1,1 DCBROWSE oBrowse DATA aMeineDaten ...
DCBROWSECOL ELEMENT 1..

@ 10,1 DCPUSHBUTTON CAPTION 'Ändern' ... WHEN {||aMeineDaten[DC_BrowseCol(oBrowse),2] = "ja"}
Wenn hier die Daten geändert werden und anschließend :RefreshCurrent() oder :RefreshAll() erfolgt, ändert sich auch die Verfügbarkeit des Buttons. Aber, wie gesagt: Nur, wenn DC_GetWhenOnBrowseItemMarked(.T.) irgendwo vorher gesetzt wurde.
Herzlich,
Tom
Benutzeravatar
Manfred
Foren-Administrator
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: :lbdblclick [ERLEDIGT]

Beitrag von Manfred »

:thumbright:

wieder was dazu gelernt.
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
Manfred
Foren-Administrator
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: :lbdblclick [ERLEDIGT]

Beitrag von Manfred »

Das Problem ist immer noch nicht aus der Welt. Mal klappt es, und dann muß man wieder mehrmals doppelklicken.
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: 15689
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: :lbdblclick [ERLEDIGT]

Beitrag von brandelh »

das Konstrukt sieht ja richtig komplex aus, wenn du das in eine Funktion packen würdest und nur diese aufrufst, wäre das debuggen leichter ;-)
Gruß
Hubert
Benutzeravatar
Manfred
Foren-Administrator
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: :lbdblclick [ERLEDIGT]

Beitrag von Manfred »

ja, hatte ich auch schon drüber nachgedacht, aber das ist ja ab und an mein Problem. Wenn ich es einfacher zu machen glaube, dann...... :badgrin:
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: 9345
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 100 Mal
Danksagung erhalten: 359 Mal
Kontaktdaten:

Re: :lbdblclick [ERLEDIGT]

Beitrag von Tom »

Ist doch überhaupt nicht so komplex. Wenn die Spaltenposition im Browse 2 ist, was ich originell finde, denn das LbDblClick hängt ja direkt an einer Spalte (es wird also sowieso nur beim Doppelklick genau in dieser Spalte aktiviert), soll der Doppelklick die Sperre, das Felderlesen, das Felderschreiben und die Entsperrung auslösen. Anschließend erfolgt ein Refresh. Das müsste eigentlich immer funktionieren. Hilfreich wäre möglicherweise, in den Codeblock noch etwas Debugcode zu hängen. Möglicherweise machen die aufgerufenen Funktionen nicht immer das, was sie tun sollen - und das Problem liegt also ganz woanders.
Herzlich,
Tom
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: :lbdblclick [ERLEDIGT]

Beitrag von AUGE_OHR »

@Manfred : was für ein "Cursor" wird da verwendet : ROW oder CELL :?:

überhaupt stelle ich mir die Frage wieso du auf o:DataArea:lbDblClick kommst statt "normal" o:DataArea:ItemSelected was dir ja auch Parameter (aRowCol) ausgibt

Code: Alles auswählen

:itemSelected := {| aRowCol, uNIL, self | ... }
--

Hubert sagte ja du sollst den Code in eine Function auslagern und "einfach" gestalten.
solche "verschachtelten" Konstruktion noch "nach Jahren" zu durchschauen ist einfach schwer.
gruss by OHR
Jimmy
Antworten