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

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

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

ç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 ^^