Redimensionner une fenêtre selon le texte qu'elle contient

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
Micoute
Messages : 2522
Inscription : dim. 02/oct./2011 16:17
Localisation : 35520 La Mézière

Redimensionner une fenêtre selon le texte qu'elle contient

Message 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
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 5.73 PB 6.00 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
boby
Messages : 261
Inscription : jeu. 07/juin/2007 22:54

Re: Redimensionner une fenêtre selon le texte qu'elle contie

Message 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.
Avatar de l’utilisateur
Micoute
Messages : 2522
Inscription : dim. 02/oct./2011 16:17
Localisation : 35520 La Mézière

Re: Redimensionner une fenêtre selon le texte qu'elle contie

Message 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.
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 5.73 PB 6.00 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Avatar de l’utilisateur
Micoute
Messages : 2522
Inscription : dim. 02/oct./2011 16:17
Localisation : 35520 La Mézière

Re: Redimensionner une fenêtre selon le texte qu'elle contie

Message 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
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 5.73 PB 6.00 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Ollivier
Messages : 4190
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

Re: Redimensionner une fenêtre selon le texte qu'elle contie

Message 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?
Avatar de l’utilisateur
Micoute
Messages : 2522
Inscription : dim. 02/oct./2011 16:17
Localisation : 35520 La Mézière

Re: Redimensionner une fenêtre selon le texte qu'elle contie

Message par Micoute »

Bonjour Ollivier,

c'est tout à fait vrai, merci pour l'astuce.
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 5.73 PB 6.00 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Répondre