Seite 1 von 1

DCGROUP und Inhalt formatieren [ERLEDIGT]

Verfasst: Fr, 21. Jun 2019 8:30
von Manfred
Hi,
ich baue ein DCGROUP und darin gibt es Texte und Felder für die Eingabe. Zur Zeit der Erzeugung weiß ich aber noch nicht genau, wo DCGROUP zu stehen kommt und wie groß es wird.
ich erzeuge es zunächst erstmal so:

Code: Alles auswählen

@ 0,0 DCGROUP oRahmen
dann erzeuge ich die Inhalte

Code: Alles auswählen

@ 10,10 DCSAY "Feld1:"
          OBJECT oText;
          PARENT oRahmen
Also rufe ich nach der Erzeugung in DCREAD GUI über Eval eine Funktion auf, die die endgültige Position und Größe einstellt. das klappt gut, aber leider sind die Inhalte ganz woanders und müßte dann auch nochmal händisch korrigiert werden. Sie verschwinden ganz an den unteren rand und werden von unten nach oben positioniert. Kann man das anders lösen?

Re: DCGROUP und Inhalt formatieren

Verfasst: Fr, 21. Jun 2019 9:23
von Tom
Was macht diese Funktion? Arbeitet sie mit :SetPos()? Das bezieht sich ja immer auf das Pixel-Koordinatensystem, das unten links beginnt, während Rogers Notation eine Zeilen-/Spaltennotation (20 Pixel x 7 Pixel*) ist, die ihren Ursprung links oben hat.
Aber. Jedes DC*-Objekt kennt eine Methode :DCSetPos(), und die kann mit den Zeilen-/Spaltendaten angesprochen werden! oText:DCSetPos({1,1}) positioniert also nicht an Pixel 1,1 links unten, sondern an Pixel 20 x 7 links oben.

(*Standardeinstellung, kann aber auch über eine Get-Set-Funktion verändert werden.)

Re: DCGROUP und Inhalt formatieren

Verfasst: Fr, 21. Jun 2019 9:25
von Tom
Hast Du eigentlich schon mal mit der DESIGN-Option von DCREAD GUI herumgespielt?

Re: DCGROUP und Inhalt formatieren

Verfasst: Fr, 21. Jun 2019 9:28
von Manfred
Hi Tom,
zur ersten Antwort:
ich setze nur mit setpos() und setsize() die DCGROUP Maße/Position neu. Den Inhalt berühre ich zu dem Zeitpunkt gar nicht. Meinst Du DEN Status mit DCSetPos()?
zur zweiten Antwort:
nein, sagt mir auch (mal wieder) nichts. Muß ich mal durchlesen.

Re: DCGROUP und Inhalt formatieren

Verfasst: Fr, 21. Jun 2019 9:53
von Tom
Sind die Objekte in der Group auch wirklich über die PARENT-Klausel mit dem Gruppenobjekt verbunden? Dann müsste ein SetPos (oder DCSetPos) auf die Gruppe auch die Inhalte mitbewegen.

Es gibt in DCGETOPTIONS die DESIGN-Option, die man zusammen mit der SOURCECODE-Option verwenden muss:

Code: Alles auswählen

DCGET OPTIONS .... DESIGN HOTKEY xbeK_F11 SOURCECODE "c:\Apps\MyApp.PRG"
In diesem Fall könntest Du, während der fragliche Dialog angezeigt wird, F11 betätigen, danach lassen sich die Objekte dann verschieben und skalieren. Abermaliges F11 speichert die Änderungen im Quellcode.

Re: DCGROUP und Inhalt formatieren

Verfasst: Fr, 21. Jun 2019 10:05
von Manfred
ja, sind mit dem Parent verbunden. Siehe oben im Beispielcode.
Der andere Vorschlag dürfte aber Probleme bereiten, weil alles relativ gebaut ist. Es hängt also im besonderen Maße von der Position der Vorgängerobjekte ab, der Auflösung und der Skalierung. Und so wie ich Dich verstehe, würde ich die Werte dann fix speichern.
Ich habe das jetzt erstmal anders gelöst und die Gruppe früher erstellt direkt hinter dem Vorobjekt. Ist zwar nicht das was ich will/wollte, aber mein Problem wird dadurch gelöst.

Re: DCGROUP und Inhalt formatieren

Verfasst: So, 23. Jun 2019 11:18
von Manfred
Hi Tom,
Danke :DcSetSize() war das Zauberwort. Das genügte allein um es so zu haben wie gewünscht. Mit :dcSetpos() muß man man etwas tricksen, weil die Methode wohl anders rechnet und deshalb den Startpunkt anders setzt, als :setpos(). Aber so komme ich klar. Wäre ich nur nie drauf gestossen, weil es dazu nichts in der Doku gibt. Zumindest habe ich nichts dazu gefunden.