Bestimmen der Größe eines Textfelds vor dem Zeichnen.Hallo,
Ist es möglich, die Größe eines Textfelds zu ermitteln, bevor das Textfeld tatsächlich gezeichnet wird?
Ich erzeuge dynamisch ein Fenster und muss Abstandshalter generieren, um Objekte auszurichten. Daher benötige ich die Größe mehrerer Textbox-Elemente, bevor ich sie tatsächlich zeichne.
Beifall
Betreff: Bestimmen der Größe eines Textfelds vor dem Zeichnen.Vielleicht möchten Sie Wait(0) ausprobieren.Das heißt im Grunde: Warten Sie, bis die Aufgaben erledigt sind.
Betreff: Bestimmen der Größe eines Textfelds vor dem Zeichnen.Hier ist die Funktion, die ich verwende, um die Höhe des Textfelds zu bestimmen.Das Argument hide(1) verhindert, dass es angezeigt wird.
get_height = function({_text, _pixels},
{Default Local},
pname = "get_height";
if (is missing(_text),
// then
pix_height = 0;
,
// else if
_text == "",
pix_height = 0;
,
// else we've got some text to work with
tb = text box(_text, set wrap(_pixels), set width(_pixels), hide(1));
tmp_win = new window("test", tb);
// Get size info
pix_height = (tb << get size)[2];
tmp_win << close window;
);
pix_height;
); // end get_height
Betreff: Bestimmen der Größe eines Textfelds vor dem Zeichnen.Hallo David,
Im Grunde habe ich das am Ende so gemacht, nur dass ich das Fenster nicht gelöscht habe, sondern lediglich mit „<< Breite festlegen“ Nachrichten in der richtigen Größe an die Textfelder gesendet habe.
!IN ACHT NEHMEN!
Für alle, die das ausprobieren: Nachdem Sie Ihr erstes Fenster gezeichnet haben, müssen Sie noch etwas warten, bis Sie mit „<< Get Size“ die Maße nehmen können. Eine Wartezeit (0,0001) war für mich ausreichend. Wenn Sie es nicht tun, passieren seltsame Dinge. (Es hat einen halben Tag gedauert, bis ich das herausgefunden habe).
!IN ACHT NEHMEN!
Betreff: Bestimmen der Größe eines Textfelds vor dem Zeichnen.Die grobe Methode – ein Fenster erstellen, das Ihren Inhalt enthält – dann Nachrichten senden, um die Größen zu erhalten – dann das Fenster löschen (hoffentlich bevor es tatsächlich gerendert wird) – dann die Größen verwenden, um das Fenster eleganter darzustellen – ich muss diese Technik verwenden manchmal, um eine konsistente Ausgabe sowohl auf Windows als auch auf dem Mac zu erhalten.
Betreff: Bestimmen der Größe eines Textfelds vor dem Zeichnen.Ja, das ist möglich, aber ich wollte einige GUI-Elemente, die alle mit derselben Datentabelle interagieren, zusammenhalten, um den Code leichter lesbar zu machen. Daher wäre es schön, wenn Sie vorab eine Nachricht mit den Maßen erhalten würden. Bald ist Weihnachten, also habe ich es auf meine Wunschliste gesetzt.
Betreff: Bestimmen der Größe eines Textfelds vor dem Zeichnen.Ja, es ist möglich,
Ich wollte jedoch einige GUI-Elemente beibehalten, die alle mit derselben Datentabelle interagieren, um die Lesbarkeit des Codes zu erleichtern.
Daher wäre es schön, wenn Sie vorab eine Nachricht mit den Maßen erhalten würden.
Bald ist Weihnachten, also habe ich es auf meine Wunschliste gesetzt.
Betreff: Bestimmen der Größe eines Textfelds vor dem Zeichnen.Haben Sie die vorhandenen Displayboxen, die speziell für die Ausrichtung und das Layout zuständig sind, ausgeschöpft? Ihr automatisches Verhalten könnte Ihr Bedürfnis, „Ihr eigenes zu würfeln“, verringern oder ganz eliminieren.
Betreff: Bestimmen der Größe eines Textfelds vor dem Zeichnen.Haben Sie „ShowProperties()“ mit dem Textfeld ausprobiert, um zu sehen, welche Nachrichten es versteht? Ich denke, die erforderliche Größe hängt davon ab, welchen Text Sie einfügen möchten (und welche Schriftart verwendet wird). Das folgende Beispiel zeigt, dass JMP jede von Ihnen festgelegte Breite berücksichtigt, beim Zeichnen des Felds jedoch gezwungen ist, die Höhe zu überschreiben.
tb = TextBox();
tb << setWidth(20);
tb << setHeight(30);
Print(tb << getWidth, tb << getHeight, "\!n");
tb << setText("How now brown cow");
Print(tb << getWidth, tb << getHeight, "\!n");
NewWindow("Test", tb);
Print(tb << getWidth, tb << getHeight, "\!n");