Steuerung der Textanmerkungsgröße und -platzierung: Hilfe benötigtAlle,
Ich muss mehrere Textanmerkungen in ein Diagramm einfügen.
Es handelt sich um Einzeiler, aber unterschiedlicher Länge. Deshalb muss ich die Option „Feste Größe(0)“ verwenden, um die Beschriftungslänge an den Text anzupassen.
Wenn ich das mache, wird aber auch die vertikale Größe angepasst und der Text viel zu hoch positioniert, was mich aus irgendeinem Grund sehr stört (Grafik links). Wenn ich „Feste Größe (1)“ einstelle, kann ich die Größe der Beschriftung direkt steuern und die Textplatzierung sieht gut aus (Grafik rechts). Allerdings habe ich Texte unterschiedlicher Länge. Entweder ist die Beschriftung zu lang, oder wenn der Text die Beschriftungsgröße überschreitet, springt die Beschriftung auf das Verhalten von „Feste Größe (0)“ zurück, was sehr unschön aussieht.


Hat jemand eine Idee, wie man die Textposition innerhalb eines Labels anpassen und gleichzeitig die feste Größe (0) verwenden kann?
<< Die vertikale Ausrichtung ("unten") funktioniert nicht.
Hier ist der Code:
Names Default To Here( 1 );
Open( "$SAMPLE_DATA/Big Class.jmp" );
biv = bivariate( y( :weight ), x( :height ) );
rbiv = biv << report;
taHeight = 20;
ta1 = rbiv << Add Text Annotation();
ta2 = rbiv << Add Text Annotation();
ta1 << Text( "We need to discuss this at the next meeting." );
ta1 << Text Box( {70, 80, 350, 80+taHeight} );
ta2 << Text( "We need to discuss this at the next " );
ta2 << Text Box( {70, 120, 350, 120+taHeight} );
{ta1, ta2} << Background Color( "Light Yellow" ) << Text Color( "red" )/*<
<SET wrap=""></SET>
<BR /> <BR />
<LINGO-LABS id="lingo-labs-913210" slang="en-US" mode="CREATE">
<LINGO-LABEL>Automatisierung und Skripterstellung</LINGO-LABEL>
</LINGO-LABS>
Betreff: Steuerung der Textanmerkungsgröße und -platzierung: Hilfe benötigtIch bin mir nicht sicher, ob man das bei Textanmerkungen steuern kann, es sei denn, man berechnet die Größe des Textfelds selbst.
Könnten Sie vielleicht Graphic Script verwenden?
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
biv = dt << bivariate(y(:weight), x(:height));
rbiv = biv << report;
fb = rbiv[FrameBox(1)];
fb << Add Graphics Script(
Back Color("Light Yellow");
Text Color("Red");
Text(Erased, {50, 150}, "We need to discuss this at the next meeting.");
Text(Erased, {50, 135}, "We need to discuss this at the next");
);
Betreff: Steuerung der Textanmerkungsgröße und -platzierung: Hilfe benötigtDas Problem mit dem Skript „Grafiken hinzufügen“ besteht darin, dass die Textposition anhand der tatsächlichen Koordinaten im Diagramm angegeben wird. In meinem Fall kann sie beliebig sein, von 1e-07 bis über 9000.
Ich hätte eventuell Interesse daran, eine Funktion zu schreiben, die Werte für gewünschte Positionen berechnet, aber nur, wenn ich wie im ersten Beispiel einen Rahmen um den Text hinzufügen kann. Die Grafik könnte recht unübersichtlich sein; ich muss sie visuell übersichtlicher gestalten, um ein schnelles Lesen und Ausblenden zu ermöglichen.
Betreff: Steuerung der Textanmerkungsgröße und -platzierung: Hilfe benötigtIch habe eine Idee.
Was wäre, wenn ich zuerst Textanmerkungen mit fester Größe (0) zeichne, die Länge messe, sie dann auf feste Größe (1) ändere und die gemessene Breite und die gewünschte Höhe manuell festlege?
Das Problem ist, dass << Get Size() einige falsche Werte zurückgibt:
Names Default To Here( 1 );
Open( "$SAMPLE_DATA/Big Class.jmp" );
biv = bivariate( y( :weight ), x( :height ) );
rbiv = biv << report;
taHeight = 40;
ta1 = rbiv << Add Text Annotation();
ta2 = rbiv << Add Text Annotation();
ta1 << Text( "We need to discuss this at the next meeting." );
ta1 << Text Box( {70, 80, 350, 80+taHeight} );
ta2 << Text( "We need to discuss this at the next " );
ta2 << Text Box( {70, 120, 350, 120+taHeight} );
{ta1, ta2} << Background Color( "Light Yellow" ) << Text Color( "red" )/*<
<SET wrap=""></SET>
<P>Es produziert:</P> //:*/
Show(ta1_x, ta2_x);
/*:
ta1_x = 328;
ta2_x = 328;
Obwohl die Beschriftungen im Diagramm sichtbar unterschiedliche Längen haben. Übersehe ich etwas?
Betreff: Steuerung der Textanmerkungsgröße und -platzierung: Hilfe benötigtVersuchen Sie es mit < <>
Betreff: Steuerung der Textanmerkungsgröße und -platzierung: Hilfe benötigtMöglicherweise können Sie die Größenprüfung auch mit einem Textfeld in einem neuen Fenster durchführen.
Names Default To Here( 1 );
Open( "$SAMPLE_DATA/Big Class.jmp" );
biv = bivariate( y( :weight ), x( :height ) );
rbiv = biv << report;
taHeight = 20;
ta1 = rbiv << Add Text Annotation();
ta2 = rbiv << Add Text Annotation();
nw = new window("", << Window View("Invisible"),
tb1 = Text Box("We need to discuss this at the next meeting."),
tb2 = Text Box("We need to discuss this at the next ")
);
w1 = tb1 << Get Size;
w2 = tb2 << Get Size;
nw << close window;
ta1 << Text( "We need to discuss this at the next meeting." );
ta1 << Text Box( {70, 80, w1[1]+20+70, 80+taHeight});
ta2 << Text( "We need to discuss this at the next " );
ta2 << Text Box( {70, 120, w2[1]+20+70, 120+taHeight});
{ta1, ta2} << Background Color( "Light Yellow" ) << Text Color( "red" )/*<
<SET wrap=""></SET>
Betreff: Steuerung der Textanmerkungsgröße und -platzierung: Hilfe benötigtDanke für den Tipp, ja, ich kann jetzt die Größe des Etiketts abrufen und einstellen.
Das Problem ist, dass JSL nicht Zeile für Zeile vorgeht, sondern den Endzustand für verschiedene Eigenschaften separat berechnet... und ihn dann anwendet.
Wie:
...
...
ta1<
<FIXED size=""></FIXED>
<P>Die Breite bleibt also die, die ich ursprünglich eingestellt habe:</P> <CODE class=" language-jsl">ta1 << Text( "We need to discuss this at the next meeting." );
ta1 << Text Box( {70, 80, 350, 80+taHeight} );
ta2 << Text( "We need to discuss this at the next " );
ta2 << Text Box( {70, 120, 350, 120+taHeight} );
Das Hinzufügen von Wait(0.5) half, dieses Problem zu beheben.
Das endgültige Skript lautet also:
Names Default To Here( 1 );
Open( "$SAMPLE_DATA/Big Class.jmp" );
biv = bivariate( y( :weight ), x( :height ) );
rbiv = biv << report;
taHeight = 40;
ta1 = rbiv << Add Text Annotation();
ta2 = rbiv << Add Text Annotation();
ta1 << Text( "We need to discuss this at the next meeting." );
ta1 << Text Box( {70, 80, 350, 80+taHeight} );
ta2 << Text( "We need to discuss this at the next " );
ta2 << Text Box( {70, 120, 350, 120+taHeight} );
{ta1, ta2} << Background Color( "Light Yellow" ) << Text Color( "red" )<
<FIXED size=""></FIXED> <BR />
Betreff: Steuerung der Textanmerkungsgröße und -platzierung: Hilfe benötigtDiese Lösung funktioniert auch. Subjektiv sogar schneller als meine. Ich versuche, das mit dem Debugging-Tool zu messen.
Betreff: Steuerung der Textanmerkungsgröße und -platzierung: Hilfe benötigtDurch die Einstellung Wait(0) wird der Vorgang beschleunigt – es findet nun tatsächlich eine Wartezeit statt, aber der Bildschirm wird neu gezeichnet.
Betreff: Steuerung der Textanmerkungsgröße und -platzierung: Hilfe benötigtMacht nichts, es funktioniert.
Vor den Schleifen:
taList = {};
Innerhalb der Schleife:
Insert Into(taList, ta);
Nach den Schleifen:
Wait(0);
taList << Fixed Size(1);
For Each({height, index}, taList << Get Height(),
taList[index] << Set Height(height*0.93)
);
Das Problem ist nun, dass die Umsetzung in einem realen Szenario, wenn ich mehrere Diagramme mit mehreren Textanmerkungen habe, zu langsam ist, wenn ich diesen Trick mit jeder Anmerkung in einer zweistufigen Schleife anwende.
Ich habe versucht, eine Liste von Textanmerkungen zu erstellen:
taList={};
und dann direkt innerhalb der Schleifen wird das aktuelle ta zur Liste hinzugefügt:
Insert Into(taList, ta);
Am Ende der Schleifen habe ich:
taList
/*:
{DisplayBox[gtext], DisplayBox[gtext],......}
Operationen auf dieser Liste oder auf einzelnen Mitgliedern funktionieren jedoch nicht.
Irgendwelche Ideen? Meine sind:
1. Versuchen Sie, mithilfe von Kontextfeldern Variablen zwischen verschiedenen ta-Elementen zu trennen.
2. Irgendwie diese Anmerkungen aus dem Bericht extrahieren - aber wenn ich XML extrahiere (<