Page 1 sur 3

Textgadget autosize

Publié : lun. 26/déc./2005 15:18
par Dr. Dri
je fais un peu de VB en ce moment et j'ai découvert cette intéressante propriété ^^
ca permet de faire par exemple des boites de dialogues dont la taille dépend du texte (comme MessageRequester)

Problème:
Comment faire la même chose en PB ? J'ai cherché sur le forum officiel et y'a rien, je vais fouiller dans le msdn... J'espère que quelqu'un pourra m'éclairer là dessus ^^

Dri

Publié : lun. 26/déc./2005 15:35
par Progi1984
Une idée :

Récupérer la longueur du texte,
puis agrandir le requester à la taille de celui ci

Publié : lun. 26/déc./2005 15:47
par Dr. Dri
Progi1984 a écrit :Une idée :

Récupérer la longueur du texte,
puis agrandir le requester à la taille de celui ci
Tu sais comment faire sans startdrawing ?
je vais regarder les fonctions gdi de windows

Dri :)

Publié : lun. 26/déc./2005 16:06
par Chris
Il y a une fonction genre GetTextExtentPoint32_() ou quelque chose comme ça dans l'Api.

Je m'en suis servi une fois pour la longueur du texte, par contre, je ne sais plus si elle fonctionne aussi pour la hauteur.

Publié : lun. 26/déc./2005 16:10
par Progi1984
En fait, il suffirait de faire un len du texte contenu dans le titre, puis dans le requester et de choisir le plus long pour avoir la taille du requester ! Non ?

Publié : lun. 26/déc./2005 16:12
par Chris
Progi1984 a écrit :En fait, il suffirait de faire un len du texte contenu dans le titre, puis dans le requester et de choisir le plus long pour avoir la taille du requester ! Non ?
Un Len() te retourne le nombre de caractères, pas la longueur en pixels.

Publié : lun. 26/déc./2005 16:22
par Dr. Dri
Progi1984 a écrit :En fait, il suffirait de faire un len du texte contenu dans le titre, puis dans le requester et de choisir le plus long pour avoir la taille du requester ! Non ?
Le but c'est pas de faire un requester mais de rendre automatique la taille d'un textgadget selon sa police (type, taille, style etc) et le texte qu'il contient ^^
(le requester c'est un exemple =)

@Chris
Je vais regarder cette fonction de plus près ^^

Dri :)

Publié : lun. 26/déc./2005 16:54
par Progi1984
Dsl, je me suis trompé ! :)

Publié : lun. 26/déc./2005 17:18
par Dr. Dri
Ca marche super bien GetTextExtentPoint32_() et ca fonctionne aussi pour la hauteur. Merci Chris ^^

Dri :D

Publié : lun. 26/déc./2005 17:27
par Dorian
Tu pourrais nous donner un exemple stp ^^

Publié : lun. 26/déc./2005 17:28
par Chris
C'est ce que j'allais dire :lol:

Publié : lun. 26/déc./2005 17:47
par Dr. Dri
j'ai voulu pondre un exemple et hop ca ne marche pas lol
je comprend pas trop...
je vais regarder de plus près ^^

Dri

Publié : lun. 26/déc./2005 19:34
par Backup
moi je ferai comme ça !!

dans l'exemple suivant change le text , et sa taille
la fenetre est redimentionné ! ça vaut ce que ça vaut :D
ça peut dépanner...



  ; PureBasic Visual Designer v3.92 build 1460

;- Window Constants
Declare Open_message(text$,taille)

Enumeration
     #message
     #Police
     #Button_0
     #Text_0
EndEnumeration

text$= "hello " ; <----------------------------ICI ajoute du text
taille=10 ; <----------------------------ICI change la taille
Open_message(text$,taille)



; ******************* boucle principale ****************
Repeat ; Start of the event loop
    Event = WaitWindowEvent () ; This line waits until an event is received from Windows
     WindowID = EventWindowID () ; The Window where the event is generated, can be used in the gadget procedures
     GadgetID = EventGadgetID () ; Is it a gadget event?
     EventType = EventType () ; The event type
     If Event = #PB_EventGadget
         If GadgetID = #Button_0
             End
         EndIf
     EndIf
Until Event = #PB_Event_CloseWindow ; End of the event loop
End
;**********************************



Procedure Open_message(text$,taille)
     FontID = LoadFont ( #Police , "Comic Sans MS" , taille, #PB_Font_Bold )
    long=( Len (text$)*taille)
    
     If OpenWindow ( #message , 10, 10,long, 50+long/8, #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_TitleBar , "message" )
         If CreateGadgetList ( WindowID ())
             ButtonGadget ( #Button_0 , 0, WindowHeight ()-30, 60, 30, "ok" )
             TextGadget ( #Text_0 , 30, (taille/8 ), 140+long, taille*2, text$)
             SetGadgetFont ( #Text_0 , FontID )
         EndIf
     EndIf
EndProcedure

Publié : lun. 26/déc./2005 19:38
par Backup
cela ne marche pas au dela de la taille 48 !! :?

Publié : lun. 26/déc./2005 19:42
par Dorian
48 c'est déjà plus que bien ^^