Page 1 sur 1

Mot coupé

Publié : dim. 03/avr./2022 22:19
par Bmld76
Bonsoir,

Lorsque j'affiche des noms trop longs dans un gadgetText, ceux-ci sont bizarrement coupés en fonction des espaces contenus dans le texte. Pensez-vous que c'est normal.
Une solution consiste à tronquer soit même, c'est ennuyeux et ca oblige à le prévoir à chaque fois.

J'ai fai un petit programme test

Bien Cordialement

Image

Code example

Code : Tout sélectionner

  If OpenWindow(0, 0, 0, 220, 200, "Exemple...", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)

   ButtonGadget  (1, 10, 10, 200, 30, "Fermer")
   TextGadget(2,10, 40, 130,20,"");,#PB_Text_Right )
   SetGadgetText(2,"PONCELETSCHIOCTETCaroline")
   SetGadgetColor(2,#PB_Gadget_BackColor,$888888)
   
   TextGadget(3,10, 70, 130,20,"");,#PB_Text_Right )
   SetGadgetText(3,"PONCELET SCHIOTTET Caroline")
   SetGadgetColor(3,#PB_Gadget_BackColor,$888888) 
   
  TextGadget(4,10, 100, 130,20,"");,#PB_Text_Right )
   SetGadgetText(4,Left("PONCELET SCHIOTTET Caroline",16))
   SetGadgetColor(4,#PB_Gadget_BackColor,$888888) 
   
   Repeat
     Event = WaitWindowEvent()
     
     Select Event
     
       Case #PB_Event_Gadget
         Select EventGadget()
           Case 1 
              CloseWindow(0)
              End  
         EndSelect
            
     EndSelect
   Until Event = #PB_Event_CloseWindow
 EndIf

Re: Mot coupé

Publié : lun. 04/avr./2022 1:28
par Ollivier
C'est la base même de toutes les GUI pourries : des textes tronqués, des scrollArea mal gérés, et, pour le Javascript, des popups incontrôlables.

Dès que tu es en interface graphique, il y a ce type de problèmes.

Ton but, les résoudre en caractérisant ce que tu affiches (déterminer quel va être le but du texte affiché : principalement, simple aperçu, ou texte dont la lecture doit être maîtrisée)

5 solutions :
- préparer un cadre (valeurs x y w h) largement plus spacieux.
- utiliser StringGadget en mode lecture-seule
- utiliser EditorGadget en mode lecture-seule pour un texte multi-lignes
- écrire le texte dans une image, et afficher ça avec ImageGadget.
- afficher directement le texte avec DrawText() sur la surface de la fenètre (nécessite une callback pour le rafraîchissement)

Le textGadget a justement cet avantage de gérer le multi-ligne, mais ce qui freine dans ce cas c'est l'absence de contrôle de la taille des caractères : en multi-ligne, autant fabriquer son propre affichage (image, canvas ou directement sur la fenêtre) pour contrôler parfaitement l'affichage.

Re: Mot coupé

Publié : lun. 04/avr./2022 8:20
par falsam
Bonjour. Je ne vois pas ce qui est anormal. Si ton TextGadget n'a pas la longueur suffisante pour afficher du contenu, le GUI va essayer de faire du Line-Wrapping. Dans ce cas il faut prévoir de hauteur dans ton textegadget.

■ Modifions ton code pour voir ce qu'il se passe.

Code : Tout sélectionner

If OpenWindow(0, 0, 0, 220, 200, "Exemple...", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
  
  ButtonGadget  (1, 10, 10, 200, 30, "Fermer")
  
  TextGadget(2,10, 40, 130, 40,"");,#PB_Text_Right )
  SetGadgetText(2,"PONCELETSCHIOCTETCaroline")
  SetGadgetColor(2,#PB_Gadget_BackColor,$888888)
  
  TextGadget(3,10, 90, 130, 40,"");,#PB_Text_Right )
  SetGadgetText(3,"PONCELET SCHIOTTET Caroline")
  SetGadgetColor(3,#PB_Gadget_BackColor,$888888) 
  
  TextGadget(4,10, 140, 130, 40,"");,#PB_Text_Right )
  SetGadgetText(4,Left("PONCELET SCHIOTTET Caroline",16))
  SetGadgetColor(4,#PB_Gadget_BackColor,$888888) 
  
  Repeat
    Event = WaitWindowEvent()
    
    Select Event
        
      Case #PB_Event_Gadget
        Select EventGadget()
          Case 1 
            CloseWindow(0)
            End  
        EndSelect
        
    EndSelect
  Until Event = #PB_Event_CloseWindow
EndIf
-Premier TextGadget, pas de passage à la ligne, car il n'y pas d'espace dans le texte à afficher.
-Deuxième TextGadget, le passage à la ligne a pu se faire car il y a au moins un espace dans le texte à afficher.
-Troisième TextGadget, inutile de faire un passage à la ligne car tu a demandé l'affichage des seize premiers caractères de ton texte. Ton TextGadget est largement dimensionné.

■ On va utilisé le style SS_EDITCONTROL pour activer le passage à la ligne pour chacun des TextGadget si nécessaire.
:arrow: https://docs.microsoft.com/en-us/window ... ast%20line.

Code : Tout sélectionner

#SS_EDITCONTROL = $2000

If OpenWindow(0, 0, 0, 220, 200, "Exemple...", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
  
  ButtonGadget  (1, 10, 10, 200, 30, "Fermer")
  
  TextGadget(2,10, 40, 130, 40,"", #SS_EDITCONTROL);,#PB_Text_Right )
  SetGadgetText(2,"PONCELETSCHIOCTETCaroline")
  SetGadgetColor(2,#PB_Gadget_BackColor,$888888)
  
  TextGadget(3,10, 90, 130, 40,"");,#PB_Text_Right )
  SetGadgetText(3,"PONCELET SCHIOTTET Caroline")
  SetGadgetColor(3,#PB_Gadget_BackColor,$888888) 
  
  TextGadget(4,10, 140, 130, 40,"");,#PB_Text_Right )
  SetGadgetText(4,Left("PONCELET SCHIOTTET Caroline",16))
  SetGadgetColor(4,#PB_Gadget_BackColor,$888888) 
  
  Repeat
    Event = WaitWindowEvent()
    
    Select Event
        
      Case #PB_Event_Gadget
        Select EventGadget()
          Case 1 
            CloseWindow(0)
            End  
        EndSelect
        
    EndSelect
  Until Event = #PB_Event_CloseWindow
EndIf
Enjoy :)

Re: Mot coupé

Publié : lun. 04/avr./2022 8:28
par kernadec
bjr à tous
peut être ajouter un info-bulle multi-line pour voir en paragraphe tout le texte :D
il y a des codes qui font cela très bien
Cordialement

Re: Mot coupé

Publié : lun. 04/avr./2022 16:37
par Bmld76
Bonsoir a tous,

Merci pour ces précieuses informations, je n'avais pas fait attention que GadgetText affichait sur plusieurs ligne, ce qui explique mes problèmes.


Bien Cordialement

Re: Mot coupé

Publié : lun. 04/avr./2022 18:45
par Ollivier
L'idée de kernadec en code source :

Code : Tout sélectionner

Procedure TipTextGadget(Id, x, y, w, h, text.S, Opt = 0)
Result = StringGadget(Id, x, y, w, h, text, #PB_String_BorderLess | Opt)
If Id = #PB_Any
   GadgetToolTip(Result, text)
Else
   GadgetToolTip(Id, text)
EndIf
ProcedureReturn Result
EndProcedure

Re: Mot coupé

Publié : mer. 20/avr./2022 3:26
par Ollivier
Il y a ça aussi : (et c'est violemment utile)

Code : Tout sélectionner

RW = GadgetWidth(TonGadget, #PB_Gadget_RequiredSize)
RH = GadgetHeight(TonGadget, #PB_Gadget_RequiredSize)

Re: Mot coupé

Publié : mer. 20/avr./2022 10:24
par Ar-S
#PB_Gadget_RequiredSize
Mais ça date de quand ça ??? 8O 8O 8O J'hallucine.

Re: Mot coupé

Publié : mer. 20/avr./2022 11:00
par Mesa
Sous Windows, on peut aussi ajouté 3 petits points pour la troncature.
En résumé:

Code : Tout sélectionner

If OpenWindow(0, 0, 0, 220, 220, "Exemple...", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
	
	ButtonGadget  (1, 10, 10, 200, 30, "Fermer")
	TextGadget(2,10, 40, 130,20,"");,#PB_Text_Right )
	SetGadgetText(2,"PONCELETSCHIOCTETCaroline")
	SetGadgetColor(2,#PB_Gadget_BackColor,$888888)
	ResizeGadget(2,#PB_Ignore,#PB_Ignore,GadgetWidth(2, #PB_Gadget_RequiredSize),#PB_Ignore)
	
	TextGadget(3,10, 70, 130,20,"");,#PB_Text_Right )
	SetGadgetText(3,"PONCELET SCHIOTTET Caroline")
	SetGadgetColor(3,#PB_Gadget_BackColor,$888888) 
	ResizeGadget(3,#PB_Ignore,#PB_Ignore,GadgetWidth(3, #PB_Gadget_RequiredSize),#PB_Ignore)
	
	TextGadget(4,10, 100, 130,20,"");,#PB_Text_Right )
	SetGadgetText(4,Left("PONCELET SCHIOTTET Caroline",16))
	SetGadgetColor(4,#PB_Gadget_BackColor,$888888) 
	ResizeGadget(4,#PB_Ignore,#PB_Ignore,GadgetWidth(4, #PB_Gadget_RequiredSize),#PB_Ignore)
	
	;Windows seulement
	TextGadget(5,10, 130, 130,20,"",#SS_ENDELLIPSIS);,#PB_Text_Right )
	SetGadgetText(5,"PONCELET SCHIOTTET Caroline")
	SetGadgetColor(5,#PB_Gadget_BackColor,$888888) 
	
	;Windows seulement
	TextGadget(6,10, 160, 130,20,"",#SS_WORDELLIPSIS);,#PB_Text_Right )
	SetGadgetText(6,Left("PONCELET SCHIOTTET Caroline",16))
	SetGadgetColor(6,#PB_Gadget_BackColor,$888888) 
	
	;Windows seulement
	TextGadget(7,10, 190, 130,20,"",#PB_Text_Right|#SS_WORDELLIPSIS)
	SetGadgetText(7,Left("PONCELET SCHIOTTET Caroline",16))
	SetGadgetColor(7,#PB_Gadget_BackColor,$888888) 
	
	Repeat
		Event = WaitWindowEvent()
		
		Select Event
				
			Case #PB_Event_Gadget
				Select EventGadget()
					Case 1 
						CloseWindow(0)
						End  
				EndSelect
				
		EndSelect
	Until Event = #PB_Event_CloseWindow
EndIf
M.