Sie sind nicht angemeldet.

1

Dienstag, 2. Oktober 2018, 12:28

Instanzvariablen auslesen

Hallo Rainer, Jörg, Falk,

das Grafik-Objekt Arc hat ein Set von Instanzvariablen, die durch Messages gesetzt werden können. Ich möchte aber zusätzlich beim Anklicken eines solchen Objekts die aktuellen Werte auslesen können. ArcClass 'subclassen', um eine der Messages abzufangen und damit Zugriff auf das Objekt zu bekommen, klappt nicht. Gibt es andere Möglichkeiten? (Das Subclassen klappt, aber die Message geht dran vorbei.)

Gruß

Wilfried

2

Dienstag, 2. Oktober 2018, 13:57

Hallo Wilfried,

irgendwie bin ich gerade zu blöde, Deine Frage zu verstehen:
  1. Soll Dein Programm sofort und automatisch eine Nachricht bekommen, wenn bei diesem Arc eine der Instanzvariablen geändert wird?
  2. Oder soll Dein Programm die Instanzvariablen auslesen, wenn ein Arc mit der Maus angeklickt wird?

Im ersten Fall musst Du "subclassen" (und natürlich dann auch Deine Klasse anstelle des Arcs in die Grafik einbauen).

Im zweiten Fall, sollte es doch reichen, sich die Daten vom selektierten Arc zu holen, oder? GrGetGStringElement() und dann das "data" auswerten?!
GR_DRAW_ARC, (data: 14 bytes (ArcCloseType, 6 swords))
GR_DRAW_ARC_3POINT, (data: 14 bytes (ArcCloseType, 6 swords))
GR_DRAW_ARC_3POINT_TO, (data: 10 bytes (ArcCloseType, 4 swords))
GR_DRAW_REL_ARC_3POINT_TO, (data: 18 bytes (ArcCloseType, 4 WWFixed))
GR_FILL_ARC, (data: 14 bytes (ArcCloseType, 6 swords))
GR_FILL_ARC_3POINT, (data: 14 bytes (ArcCloseType, 6 swords))
GR_FILL_ARC_3POINT_TO (data: 10 bytes (ArcCloseType, 4 swords))
Oder wird das zu kompliziert, da im GString auch noch GR_APPLY_ROTATION, GR_APPLY_SCALE, GR_APPLY_TRANSLATION, GR_APPLY_TRANSFORM, GR_APPLY_TRANSLATION_DWORD, ... vorkommen?

Gruß
Jörg
d[ 0_O ]b

3

Dienstag, 2. Oktober 2018, 15:44

Mein Arc ist ja kein GString, sondern ein Objekt der ArcClass (aufgezogen mit dem Grafik-Tool in GeoDraw). Ich kann die Herkunft dieser Objekte nicht beeinflussen, daher funktioniert wohl auch der Subclassing-Weg nicht.

Übrigens zeigt Swat alle aktuellen Werte des Arc-Objects an, also müsste ich doch per Code herankommen.

4

Mittwoch, 3. Oktober 2018, 16:07

Lösung gefunden

Ich habe mich daran erinnert, dass ich mal mit Rainer ein ähnliches Problem besprochen hatte. Ich habe den damaligen 'dirty'-Ansatz aufgegriffen und Folgendes geschrieben:

ArcInstance *pobjekt;
double startwinkel,endwinkel;
MemHandle memBlock;

memBlock = OptrToHandle(objekt);
ObjLockObjBlock(memBlock);
pobjekt = ObjDerefVis(objekt);
startwinkel = WWFixedToFloatingpointnumber(pobjekt->AI_startAngle);
endwinkel = WWFixedToFloatingpointnumber(pobjekt->AI_endAngle);
@send AnfangsWinkel::MSG_GEN_VALUE_SET_VALUE(MakeWWFixed(startwinkel),0);
@send EndWinkel::MSG_GEN_VALUE_SET_VALUE(MakeWWFixed(endwinkel),0);
MemUnlock(memBlock);


Und siehe da, es funktioniert!

5

Donnerstag, 4. Oktober 2018, 11:13

Wunderbar! :)
d[ 0_O ]b

Zur Zeit ist neben Ihnen 1 Benutzer in diesem Thema unterwegs:

1 Besucher

Ähnliche Themen

Thema bewerten