Sie sind nicht angemeldet.

Lieber Besucher, herzlich willkommen bei: GEOS-InfoBase-Forum. Falls dies Ihr erster Besuch auf dieser Seite ist, lesen Sie sich bitte die Hilfe durch. Dort wird Ihnen die Bedienung dieser Seite näher erläutert. Darüber hinaus sollten Sie sich registrieren, um alle Funktionen dieser Seite nutzen zu können. Benutzen Sie das Registrierungsformular, um sich zu registrieren oder informieren Sie sich ausführlich über den Registrierungsvorgang. Falls Sie sich bereits zu einem früheren Zeitpunkt registriert haben, können Sie sich hier anmelden.

1

Sonntag, 26. März 2023, 13:06

Seltsame Fehlermeldung

Hallo,

gestern habe ich mal wieder an einem komplexen Programm für den Unterrichtseinsatz gebastelt und bekam plötzlich beim Start des Programms folgende Fehlermeldung: „ObjListLinkObjectsToTree: Visible setzen geht für Vis-Objekte nicht“. Diese Meldung stammt noch aus der Zeit, als R-BASIC begann, mit Objekten zu arbeiten und sollte mich nur auf einen blöden Programmierfehler aufmerksam machen.
Nach einiger Zeit Suche kam ich darauf, dass der Fehler diesmal damit zutun hat, wie R-BASIC die Objekte auf die verschiedenen Objektblöcke verteilt. Falls nämlich R-BASIC eine Tree von Vis-Objekten (VisObj, VisText, VisContent und LargeText die per Child/Parent miteinander verbunden sind) auf verschiedene Objektblöcke verteilt, kommt es zu diesem Fehler. Damit kommt offensichtlicher der Linker, der beim Programmstart die Child/Parent-Verbindungen wiederherstellt, nicht klar. Das muss ich damals übersehen haben oder ich habe einfach vergessen, es für Vis-Objekte zu implementieren. Für Nicht-Vis-Objekte (Groups, Buttons usw.) existiert dieses Problem nicht.

Abhilfe schafft der Befehl ForceNewObjBlock. Er bewirkt, dass die folgenden Objekte in einen neuen Objektblock geschrieben werden. Man muss ihn vor dem problematischen Vis-Objekt-Tree platzieren. Direkt davor muss nicht sein, ich habe ihn vor das zugehörige Primary gesetzt.
Damit kann man quasi die SDK-Version nachbilden, wo man die Objekte manuell in die passenden Objektblöcke platziert. Konzeptionell ist es sowieso eine gute Idee, Objekte, die funktionell zusammengehören, z.B. im gleichen Dialog zu sehen sind, in den gleichen Objektblock zu packen.

Für den sehr seltenen Fall, dass man extrem viele im UI-Code definierte Vis-Objekte im gleichen Tree hat und R-BASIC sie deshalb trotzdem selbständig auf verschiedene Objektblöcke verteilt, muss man selber Hand anlegen. Man muss den Tree mit mehreren ForceNewObjBlock geschickt splitten, die Objekte im UI-Code nicht via Children-Anweisung über die Objektblock-Grenzen hinaus verbinden, sondern das manuell beim Programmstart nachholen. Im SDK (z.B. bei R-BASIC) muss man auch so vorgehen, wenn man die Objekt-Deklarationen auf mehrere Dateien verteilt.

Letzte Bemerkung: Die VisContent-Methoden CreateVisObj und DestroyVisObj handeln die die Objektblöcke ebenfalls selbständig, sollten aber das oben beschriebene Problem nicht haben, weil sie nur zur Laufzeit eingesetzt werden können. Entsprechende Tests, was passiert, wenn man mehrere Objektblöcke braucht, habe ich damals vorgenommen :-)

Viele Grüße
Rainer
»Rainer« hat folgendes Bild angehängt:
  • VisObjBug.GIF
Es gibt 10 Arten von Menschen - die einen wissen was binär ist, die anderen nicht.

Thema bewerten