Déterminer la taille d'une zone de texte avant de la dessiner.Salut,
est-il possible d'obtenir la taille d'une zone de texte avant que la zone de texte ne soit réellement dessinée ?
Je génère dynamiquement une fenêtre et j'ai besoin de générer des espaceurs pour aligner les objets. Par conséquent, j'ai besoin de la taille de plusieurs éléments de zone de texte avant de les dessiner.
Acclamations
Re : Déterminer la taille d'une zone de texte avant de la dessiner.Vous voudrez peut-être essayer Wait(0).Cela dit essentiellement : attendez que les tâches soient terminées.
Re : Déterminer la taille d'une zone de texte avant de la dessiner.Voici la fonction que j'utilise pour déterminer la hauteur de la zone de texte.L'argument hide(1) l'empêche d'être affiché.
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
Re : Déterminer la taille d'une zone de texte avant de la dessiner.Salut David,
en gros c'est ce que j'ai fait à la fin, seulement que je n'ai pas supprimé la fenêtre mais simplement envoyé les messages de taille correcte aux zones de texte avec "<< Définir la largeur"
!IL FAUT SE MÉFIER!
tous ceux qui essaient ceci : Après avoir dessiné votre fenêtre initiale, vous devez attendre un peu avant de pouvoir prendre les mesures avec "<< Get Size". Une attente (0,0001) était suffisante pour moi. Si vous ne le faites pas, des choses étranges se produisent. (Cela m'a pris une demi-journée pour comprendre).
!IL FAUT SE MÉFIER!
Re : Déterminer la taille d'une zone de texte avant de la dessiner.La méthode brute - créez une fenêtre qui contient votre contenu - puis envoyez des messages pour obtenir les tailles - puis supprimez la fenêtre (espérons-le avant qu'elle ne soit réellement rendue) - puis utilisez les tailles pour rendre la fenêtre plus élégante - je dois utiliser cette technique parfois pour obtenir une sortie cohérente sur Windows et Mac.
Re : Déterminer la taille d'une zone de texte avant de la dessiner.Oui, c'est possible, mais je voulais garder quelques éléments d'interface graphique qui interagissent tous ensemble avec la même table de données, pour rendre le code plus facile à lire. Donc ce serait bien d'avoir un message donnant les dimensions à l'avance. Noël arrive bientôt, alors je l'ai mis sur ma liste de souhaits.
Re : Déterminer la taille d'une zone de texte avant de la dessiner.Ouais, c'est possible,
mais je voulais garder quelques éléments d'interface graphique qui interagissent tous ensemble avec la même table de données, pour rendre le code plus facile à lire.
Donc ce serait bien d'avoir un message donnant les dimensions à l'avance.
Noël arrive bientôt, alors je l'ai mis sur ma liste de souhaits.
Re : Déterminer la taille d'une zone de texte avant de la dessiner.Avez-vous épuisé les boîtes d'affichage existantes qui sont spécifiquement responsables de l'alignement et de la disposition ? Leur comportement automatique peut réduire ou éliminer votre besoin de « rouler vous-même ».
Re : Déterminer la taille d'une zone de texte avant de la dessiner.Avez-vous essayé 'ShowProperties()' avec la zone de texte pour voir quels messages il comprend ? Je suppose que la taille requise dépend du texte que vous voulez y mettre (et de la police utilisée). L'exemple ci-dessous montre que JMP respecte toute largeur que vous avez définie, mais est obligé de remplacer la hauteur lorsque la boîte est dessinée.
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");