Sie sind nicht angemeldet.

1

Freitag, 6. April 2018, 17:53

Speicherinhalte mit Swat verändern

Ich würde gern mal ein GenValue-Objekt in einem Controller zur Laufzeit manipulieren. Konkret: Im Controller zu Hilfslinien in GeoDraw gibt es ein Value-Objekt, dass keine neg. Werte annimmt. Also müsste man zur Laufzeit die Instanzvariable GVLI_minimum beeinflussen. Swat zeigt mir das Objekt an, sagt aber nicht, an welcher Adresse diese Instanzvariable liegt. Wenn ich die hätte, könnte ich doch mit Assign den Inhalt ändern.

Rainer, Falk oder Jörg, habt ihr so etwas schon mal gemacht?

2

Freitag, 6. April 2018, 20:19

Hallo!
Ich habe so etwas noch nicht gemacht.
Grüße
Jörg
d[ 0_O ]b

3

Samstag, 7. April 2018, 19:50

Ich würde den offiziellen Weg gehen und dem GenValue zur Laufzeit eine Message senden.
Msg_gen_value_set_minimum oder so. Wenn der Controller das GenValue selbst erzeugt hat findest du den optr bestimmt mit msg_gen_find_child oder ähnliches.
Mit swat habe ich das auch noch nicht gemacht . Aber ganz bestimmt musst du nicht die Adresse benutzen. Die Syntax kenne ich auch nicht.
Vielleicht etwas in der Art :
assign ^l5624:0036->GVLI_mimium, wert
Wobei er ja ein WWFixed haben will.

Rainer
Es gibt 10 Arten von Menschen - die einen wissen was binär ist, die anderen nicht.

4

Sonntag, 8. April 2018, 18:47

Swat sagt: Can't assign to a union or structure, yet. Wird noch dran gearbeitet;-)

Die andere Idee war besser: Mit MSG_GEN_FIND_CHILD_AT_POSITION(2) hol ich mir den optr und mit MSG_GEN_VALUE_SET_MINIMUM(MakeWWFixed(-1000)) setze ich den gewünschten Wert. Das klappt:-). Jetzt muss ich nur noch sehen, wo ich die Messages losschicke. Eigentlich wollte ich das gleich zu Beginn machen, wenn das UI an das Dokument 'attached' wird. Dort bleiben die Messages aber ohne Wirkung. Jetzt hab ich sie erst mal in der Methode zu MSG_VIS_DRAW.

Danke!

5

Sonntag, 8. April 2018, 22:31

Hallo Wilfried,
Jetzt muss ich nur noch sehen, wo ich die Messages losschicke.
Vielleicht leitest du den Controller ab und schickst die Message in MSG_GEN_CONTROL_GENERATE_UI des Controllers? Aber nach dem @callsuper.
Jetzt hab ich sie erst mal in der Methode zu MSG_VIS_DRAW.
Der des Controllers? Auch ne gute Idee ;-) MSG_GEN_CONTROL_GENERATE_UI ist aber glaube ich der korrekte Platz.

Anmerkung: Die Crux bei dieser Vorgehensweise ist, dass spätere Systemversionen (Controller geändert) das GenValue nicht mehr als Child Nr 2 haben müssen. Da hab ich aber auch keine Idee dazu.

Gruß
Rainer
Es gibt 10 Arten von Menschen - die einen wissen was binär ist, die anderen nicht.

6

Montag, 9. April 2018, 12:33

Ein guter Tipp:-)

Anmerkung: Die Crux bei dieser Vorgehensweise ist, dass spätere Systemversionen (Controller geändert) das GenValue nicht mehr als Child Nr 2 haben müssen. Da hab ich aber auch keine Idee dazu.

Du bist ja ein Pessimist und ein Opti,ist zugleich;-). Ich hab das jetzt so gelöst:

@callsuper();

anzahl=@call self::MSG_GEN_COUNT_CHILDREN();
while (i<anzahl && gefunden==FALSE)
{
GuideValueOptr=@call self::MSG_GEN_FIND_CHILD_AT_POSITION(i);
objKlasse = @call GuideValueOptr::MSG_META_GET_CLASS();
if (objKlasse==(ClassStruct *) &GenValueClass)
{
@call GuideValueOptr::MSG_GEN_VALUE_SET_MINIMUM(MakeWWFixed(-32000));
gefunden=TRUE;
}
else
i++;
}

7

Montag, 9. April 2018, 22:25

Cool. :thumbup:

Ich hatte mal mit FIND_OBJ_OF_CLASS oder so rumexperimentiert, aber leider erfolglos. Daher der Pessi-Anteil ;-)

Gruß
Rainer
Es gibt 10 Arten von Menschen - die einen wissen was binär ist, die anderen nicht.

Ähnliche Themen

Thema bewerten