Seite 1 von 1

XbpBrowse reagiert nicht mehr

Verfasst: Do, 20. Sep 2018 20:54
von georg
Hallo,


eines meiner Projekte bearbeitet Rezepte für eine Kantine. Bei einem Rezept wird die Struktur ("Rezeptbaum") zur Bearbeitung in ein Array geladen und mittels XbpBrowse() angezeigt. Klickt der Anwender auf eine Zeile, wird diese in Bearbeitungselemente unterhalb des Browse übernommen, dort kann sie verändert (oder gelöscht) werden und überschreibt dann das entsprechende Array-Element.

Das Ganze läuft in einem Thread ab, und was codemässig unter 1.95 einwandfrei lief, "bockt" unter der 2.0. Der ganze Browse-Bereich mit Daten reagiert nicht. Der Browse wird wie üblich erzeugt:

Code: Alles auswählen

	oBro := XbpBrowse():new(oGB, oGB, aPosIn, aSizeIn)
	oBro:tabStop := .T.
	oBro:skipBlock       := {|nSkip, oBro| DoArraySkip(nSkip)}
	oBro:GoBottomBlock   := {|| nArRecno := Len(aData)}
	oBro:GoTopBlock      := {|| nArRecno := 1}
	oBro:PosBlock        := {|| nArRecno}
	oBro:PhyPosBlock     := {|| Len(aData)}
	oBro:LastPosBlock    := {|| Len(aData)}
	oBro:FirstPosBlock   := {|| 1}
	oBro:CursorMode      := XBPBRW_CURSOR_ROW
	oBro:itemMarked      := {|aPos, uNIL, self| EditSetData(aEntries, .F., cRezept)}
	oBro:useVisualStyle  := .F.
	oBro:create()
Ich kann (im Browse) klicken, wohin ich will, der Event :itemMarked wird nicht ausgelöst, zumindest wird die Funktion EditSetData() nicht aufgerufen. Der Event-Loop ist plain vanilla, d.h. ohne Besonderheiten. Aktuell stehe ich da vor einem Rätsel.

Der Programmcode wurde komplett neu compiliert und gelinkt.

Re: XbpBrowse reagiert nicht mehr

Verfasst: Do, 20. Sep 2018 21:01
von georg
Nachtrag: ich habe mal

Code: Alles auswählen

oBro:itemSelected      := {|aPos, uNIL, self| EditSetData(aEntries, .F., cRezept)}
zusätzlich definiert, und nun kann ich - mittels Doppelklick - die betreffende Browse-Zeile zum Editieren heranziehen. Warum geht das mit :itemMarked nicht?

Re: XbpBrowse reagiert nicht mehr

Verfasst: Do, 20. Sep 2018 22:29
von AUGE_OHR
hi,

ein o:itemMarked sagt lediglich das die linke Taste im Browse gedrückt wurde ... aber damit ist der Satz nicht "selektiert".
nun gibt es bei XbpBrowse() kein o:markMode und damit ist o:itemMarked im Prinzip überflüssig.

Re: XbpBrowse reagiert nicht mehr

Verfasst: Fr, 21. Sep 2018 5:34
von Jan
Jimmy,

das bezweifle ich massiv. Ich selber habe Programme geschrieben, die den :itemMarked nutzen um z. B. Zusatzinfos zum gerade markierten Satz an anderer Stelle anzuzeigen, oder einen zweiten Browse zu synchronisieren.

Jan

Re: XbpBrowse reagiert nicht mehr

Verfasst: Fr, 21. Sep 2018 5:37
von Jan
Georg,

mich wundert, daß das früher funktioniert hat und heute nicht mehr. Alaska hatte in der 2.0-Beta viel daran geschraubt die Kompatibilität von XbpBrowse zu den Vorversionen herzustellen - am Anfang war das eine Katastrophe.

Was ist, wenn Du das statt dessen über den :stableBlock machst? Hab ich stellenweise jedenfalls so geregelt.

Jan

Re: XbpBrowse reagiert nicht mehr

Verfasst: Fr, 21. Sep 2018 6:46
von Tom
Wenn man ein Browse mit anderen Controls synchronisieren will, ist ItemMarked alles andere als überflüssig. Für mich ist es essentiell.

Re: XbpBrowse reagiert nicht mehr

Verfasst: Fr, 21. Sep 2018 7:54
von georg
Guten Morgen,


danke erst einmal für das Feedback.

@Jan - wie genau meinst Du das "statt dessen über den :stableBlock machst?" Nach meinem Verständnis reden wir über die Verarbeitung eines Events, und das wird im Event-Loop verarbeitet, während ich das Ausführen des :stableBlock an anderen Stellen habe.

Ich habe das Ganze noch einmal unter der 1.9 (auf einem anderen Rechner) compiliert, und es läuft.

Interessant ist, dass beim ersten Aufruf (also beim :forceStable()) das xbeBRW_ItemMarked als oXbp das XbpBrowse()-Objekt erhält. Dagegen wird danach jeder Klick auf eine Zeile mit einem Objekt der Klasse XbpCellGroup() in den EventLoop geschickt. Dieses Verhalten ist sowohl unter 1.9 als auch unter 2.0 identisch.

Nicht identisch ist das Folgeverhalten, dass nämlich :itemMarked nicht in die Funktion EditSetData() weitergeleitet wird.

Re: XbpBrowse reagiert nicht mehr

Verfasst: Fr, 21. Sep 2018 8:03
von Jan
Georg,

an einer Stelle in meinen Projekten habe ich die Anzeige von Detaildaten zu dem aktuell markierten Browse-Satz per :stableBlock statt :itemMarked geregelt. Ich habe keine Ahnung mehr warum. Aber das funktioniert halt. Bei mir geht es ausschließlich um die Anzeige von zusätzlichen Daten in XbpStatic. In anderen Fällen kann das per :stableBlock Probleme bereiten. War auch nur so ein Gedanke gewesen als alternative Herangehensweise. Denn ansich muß das auch mit :itemMarked klappen. Hatte ja auch Tom bestätigt.

Ich frage mich immer noch wo da der Unterschied zwischen 1.9 und 2.0 liegen könnte. Es gibt da welche im XbpBrowse, aber meines Wissens nicht in diesem Bereich.

Jan

Re: XbpBrowse reagiert nicht mehr

Verfasst: Fr, 21. Sep 2018 8:09
von Wolfgang Ciriack
Vielleicht mal den ::navigationMode auf XBPBRW_NAVIGATION_1XCOMPATIBLE setzen ?

Re: XbpBrowse reagiert nicht mehr

Verfasst: Fr, 21. Sep 2018 8:56
von georg
Hallo,


@Jan: danke für die Info. Klingt interessant, aber ich versuche erst einmal, ohne grossen "Umbau" das unter 2.0 ans Laufen zu bekommen.

@Wolfgang: kein schlechter Hinweis, das hat funktioniert. Es hat aber einen kleinen Nebeneffekt, das XbpBrowse() "flackert" jetzt, sieht also so aus, als würde es permanent neu aufgebaut. Ich muss da noch mal etwas tiefer in die Steuerung einsteigen.

Re: XbpBrowse reagiert nicht mehr

Verfasst: Fr, 21. Sep 2018 15:29
von Werner_Bayern
Servus Georg,

bei der 2.0er musst nach einer Satzzeigerbewegung ausserhalb des Browses ein

Code: Alles auswählen

oBrowse:rowPhyPos := recno()
einfügen. Hat jetzt aber wohl nicht unbedingt mit Deinem Problem zu tun?

Code: Alles auswählen

forceStable()
hat sich in der 2.0er auch geändert. Dort gibt die Methode self zurück, unter 1.9 war es .t. oder .f.

Re: XbpBrowse reagiert nicht mehr

Verfasst: Fr, 21. Sep 2018 16:53
von georg
Hallo, Werner -


den Rückgabewert von forceStable() habe ich schon recht früh zu Beginn der Umstellung gemerkt, der war recht lautstark :roll:

Die Änderung von rowPhyPos schaue ich mir mal an. Die Probleme betreffen alle nur Browses, die Arrays anzeigen, also Daten gehen ohne Probleme.

Re: XbpBrowse reagiert nicht mehr

Verfasst: Fr, 21. Sep 2018 18:55
von AUGE_OHR
Jan hat geschrieben: Fr, 21. Sep 2018 8:03 ... zu dem aktuell markierten Browse-Satz per :stableBlock statt :itemMarked geregelt.
genau das ist was ich sagte :!:

erst wenn ein Browse "stable" ist "darf" ich den Callback Slot o:itemSelected aktiveren :!: