Page 1 sur 1
Redimensionner une fenêtre selon le texte qu'elle contient
Publié : ven. 21/déc./2018 14:34
par Micoute
Bonjour à tous,
il y a quelques années, pour mes filles, j'avais conçu un logiciel permettant de rechercher des recettes sur internet selon les divers composants choisis,
j'avais aussi inclus un lexique culinaire qui fonctionnait très bien, mais ce n'est plus le cas, je pense que ça vient de Windows 10.
Ce que je souhaite faire, c'est redimensionner la fenêtre par rapport au texte affiché, et d'après ce que j'ai compris, il faut redimensionner avant d'écrire dans la fenêtre sinon le texte est tout déformé,
je ne devrais peut-être pas utiliser un screen, je ne vois pas ce qui pêche, c'est pourquoi je sollicite votre aide qui me sera secourable et je vous en remercie énormément.
les fichiers se trouvent à cette adresse :
https://www.dropbox.com/sh/jdo5er9ddzeu ... 8vE_a?dl=0
Re: Redimensionner une fenêtre selon le texte qu'elle contie
Publié : ven. 21/déc./2018 15:05
par boby
Bonjour Micoute, chez moi (sous windob 10) ça compile sans problème.
Ce que tu cherche à faire c'est d'ouvrir un screen pour pouvoir afficher tout ton text sur une seul ligne ? Si c'est le cas, alors tu es obligé de fermer / ouvrir (donc reload) à chaques modification de la taille de ton screen... C'est lourd... Pourquoi ne pas garder le même screen ouvert et simplement l'afficher ou le cacher en fonction du besoin ?
PS : Pour rappel afficher du text via drawtext, c'est très consomant pour le CPU.
Re: Redimensionner une fenêtre selon le texte qu'elle contie
Publié : ven. 21/déc./2018 15:25
par Micoute
Merci boby de te pencher sur mon problème,
ce que je veux arriver à faire, c'est afficher un texte sur plusieurs lignes, car je le limite en longueur, la procédure d'écriture me renvoie la position du curseur, donc je veux redimensionner la fenêtre pour qu'elle ne contiennent que le texte affiché, car là la fenêtre est dimensionnée au départ à la taille du texte le plus long à afficher et pour les texte plus court, la fenêtre est trop grande.
Re: Redimensionner une fenêtre selon le texte qu'elle contie
Publié : ven. 21/déc./2018 16:14
par Micoute
Finalement, j'ai trouvé une solution qui me satisfait , il suffit de fermer la fenêtre et de la rouvrir aux nouvelles dimensions
Code : Tout sélectionner
Procedure Afficher_Lexique(i, Terme.s, Description.s)
Protected X, Y, Hauteur
If OpenWindow(#Fenetre_Afficher_Lexique, 0, 0, 470, 360, Terme, #PB_Window_BorderLess|#PB_Window_ScreenCentered)
If OpenWindowedScreen(WindowID(#Fenetre_Afficher_Lexique), 0, 0, WindowWidth(#Fenetre_Afficher_Lexique), WindowHeight(#Fenetre_Afficher_Lexique))
ClearScreen($FFFFFF-CouleurFond)
;dessin
If StartDrawing(ScreenOutput())
DrawingFont(FontID(#Police_Lexique))
FrontColor(#Yellow)
BackColor(#Blue)
x = 10 : y = 0
y + TextHeight(" ")
;Description
Hauteur = TexteJustifieGauche(x, y, Donnee(i)\Description, 450,$FFFFFF-CouleurFond, $FFFFFF-CouleurFond, 5)
StopDrawing()
EndIf
EndIf
EndIf
CloseWindow(#Fenetre_Afficher_Lexique)
If OpenWindow(#Fenetre_Afficher_Lexique, 0, 0, 470, Hauteur + y, Terme, #PB_Window_BorderLess|#PB_Window_ScreenCentered)
If OpenWindowedScreen(WindowID(#Fenetre_Afficher_Lexique), 0, 0, WindowWidth(#Fenetre_Afficher_Lexique), WindowHeight(#Fenetre_Afficher_Lexique))
ClearScreen($FFFFFF-CouleurFond)
If StartDrawing(ScreenOutput())
DrawingFont(FontID(#Police_Lexique))
CentrerTexte(#Fenetre_Afficher_Lexique, 0, Donnee(i)\Terme, $FFFFFF-CouleurTexte, $FFFFFF-CouleurFond)
TexteJustifieGauche(x, y, Donnee(i)\Description, 450,$FCA093, $FFFFFF-CouleurFond, 5)
StopDrawing()
EndIf
FlipBuffers()
EndIf
EndIf
EndProcedure
Re: Redimensionner une fenêtre selon le texte qu'elle contie
Publié : ven. 21/déc./2018 18:09
par Ollivier
Bonjour Micoute !
Si ta 1ère fenêtre est invisible, avec l'option #PB_Window_Invisible de la fonction OpenWindow(), est-ce que tu peux quand même calculer les dimensions de ta 2nde fenêtre?
Re: Redimensionner une fenêtre selon le texte qu'elle contie
Publié : sam. 22/déc./2018 9:57
par Micoute
Bonjour Ollivier,
c'est tout à fait vrai, merci pour l'astuce.