Page 1 sur 1

Largeur et positionnement

Publié : ven. 03/nov./2017 8:21
par selzig
Bonjour,

je suis un peu perdu avec le positionnement des gadgets dans une fenêtre.

Je n'ai pas trouvé d'autre système d'ancrage que les coordonnées et la taille des gadgets pour les positionner. A la rigueur cela pourrait être suffisant à condition que la largeur des gadgets reste constante. Mais tel n'est pas le cas.

Prenons par exemple un TextGadget. Je lui donne une taille initiale pour contenir un texte donné. Je travaille sur les 3 OS (Windows, Linux et Mac OS) et en plus systématiquement ou presque, j'utilise 3 langues (le français, l'anglais et l'allemand).

Comment gère-t-on de manière simple le positionnement d'un tel TextGadget et si on fait cela avec les coordonnées et les tailles, comment obtient-on les tailles par défaut nécessaires à l'affichage complet selon l' OS et la langue utilisée (l'équivalent d'un autosize) ?

Merci. Gilles

Re: Largeur et positionnement

Publié : ven. 03/nov./2017 9:54
par microdevweb
Bonjour Gilles,

Personnellement je n'utilise plus que les dialogues.
https://www.purebasic.com/french/docume ... index.html

Voici une exemple simple, redimensionne la fenêtre et tu constatera que les champs se redimensionnent automatiquement.

Code : Tout sélectionner


Enumeration 
  #strName
  #strAddress
  #strCity
  #btValidate
  #btChancel
EndEnumeration
Procedure EventValide()
  MessageRequester("info","validation")
EndProcedure
Procedure EventChancel()
  FreeDialog(0)
  End
EndProcedure
Procedure OpenMyForm()
  ; Utilisation de la technologie dialog avec positionement automatique
  ; des gadgets
  ;ici je crée un fichier xml dynamiquement pour l'organisation des gadgets
  Protected xml.s 
  xml="<window name='form' "+
      " width='400'"+
      " text='ma fenêtre '"+
      " flags='#PB_Window_ScreenCentered|#PB_Window_SystemMenu|#PB_Window_SizeGadget'>"+
      "   <hbox expand='item:1'>"+ ;layout principal les seul les champs vont s'agrandir
      "     <vbox expand='no'>"+  ;layout pour les champs
      "       <frame text='nom: '>"+
      "         <string id='"+Str(#strName)+"'/>"+
      "       </frame>"+
      "       <frame text='localité: '>"+
      "         <string id='"+Str(#strAddress)+"'/>"+
      "       </frame>"+
      "       <frame text='adresse: '>"+
      "         <string id='"+Str(#strCity)+"'/>"+
      "       </frame>"+
      "     </vbox>"+
      "     <vbox expand='no'>"+  ;layout pour les boutons
      "       <button id='"+Str(#btValidate)+"' text='valider'/>"+
      "       <button id='"+Str(#btChancel)+"' text='annuller'/>"+
      "     </vbox>"+
      "   </hbox>"+
      "</window>"
  ; chargement en mémoire du fichier xml
  CatchXML(0,@xml,StringByteLength(xml),0,#PB_UTF8)
  CreateDialog(0)
  If Not OpenXMLDialog(0,0,"form")
    ProcedureReturn #False
  EndIf
  FreeXML(0)
  BindGadgetEvent(#btChancel,@EventChancel())
  BindGadgetEvent(#btValidate,@EventValide())
  ProcedureReturn #True
EndProcedure


If OpenMyForm()
  Repeat
    WaitWindowEvent()
  Until Event()=#PB_Event_CloseWindow
  FreeDialog(0)
  End
EndIf

Re: Largeur et positionnement

Publié : ven. 03/nov./2017 21:51
par microdevweb
Petit coup de gueule... :mrgreen:

je trouve vraiment déplaisant que les auteurs de message de demande d'aide n'aie pas la courtoisie d'adressé un petit merci aux membres qui leurs réponde. Même si la réponse n'est pas celle attendue, ils on au moins fait l'effort d'essayé de répondre.

Pour part je ne répondrais plus aux messages des membres agissant de la sorte.

Re: Largeur et positionnement

Publié : ven. 03/nov./2017 22:13
par celtic88
TextHeight(Texte$) et
TextWidth(Texte$)

bonne chance,

Re: Largeur et positionnement

Publié : sam. 04/nov./2017 3:06
par Ollivier
Voilà, c'était une démonstration de la librairie "dialogue"... Ça recentre automatiquement les choses... XML le matin, call back le soir... Faut surtout pas s'aiguiller sur l'apéro de fin de semaine entre les deux, sinon c'est pénalité....

Re: Largeur et positionnement

Publié : sam. 04/nov./2017 8:54
par Zorro
selzig a écrit :Bonjour,

je suis un peu perdu avec le positionnement des gadgets dans une fenêtre.
Merci. Gilles

voir ici : :)
http://www.purebasic.fr/french/viewtopi ... t&start=15

Re: Largeur et positionnement

Publié : sam. 04/nov./2017 11:49
par falsam
Le sujet original contient la dernière mise à jour.
:arrow: http://www.purebasic.fr/french/viewtopi ... 18#p147018

Un exemple de code

Code : Tout sélectionner

EnableExplicit

IncludeFile "LockResize.pbi"

Enumeration
  #Mainform
  #Test1
  #Test2
  #Test3
  #Test4
  #Test5
  #Test6
EndEnumeration

Global WindowStyle.i=#PB_Window_MinimizeGadget|#PB_Window_MaximizeGadget|#PB_Window_ScreenCentered|#PB_Window_SizeGadget

Procedure Start()
  OpenWindow(#Mainform, 0, 0, 500, 400, "Demo LockResizeGadget", WindowStyle)
  
  WindowBounds(#Mainform, 300, 400, #PB_Ignore, #PB_Ignore)
    
  StringGadget(#Test1, 10, 10, 300, 20, "")
  ListIconGadget(#Test2, 10, 35, 300, 300,"Col1", 100)
  ListViewGadget(#Test3, 320, 10, 100, 325)
  ComboBoxGadget(#Test4, 10, 350, 410, 22)
  ButtonGadget(#Test5, 430, 10, 50, 22, "Test")
  
  TextGadget(#Test6, 180, 380, 160, 22, "Lock with LockResizeGadget")
  
  SmartWindowRefresh(#Mainform, #True)
  
  LockGadget(#Mainform, #Test1, #True, #True, #True, #False)
  LockGadget(#Mainform, #Test2, #True, #True, #True, #True)
  LockGadget(#Mainform, #Test3, #False, #True, #True, #True)
  LockGadget(#Mainform, #Test4, #True, #False, #True, #True)
  LockGadget(#Mainform, #Test5, #False, #True, #True, #False)
  LockGadget(#Mainform, #Test6, #False, #False, #False, #True, #True)  
EndProcedure

UseLockGadget()
Start()

Repeat : Until WaitWindowEvent(10) = #PB_Event_CloseWindow
et la démonstration en ligne générée avec SpiderBasic
:arrow: http://falsam.com/sbtest/lockresize.html


Les tailles des polices peuvent variées d'un OS à un autre et même au sein d'un meme Os.
- Inclus dans ton code la procédure AdjustFontSize() que tu trouveras sur ce lien. http://www.purebasic.fr/french/viewtopi ... 12#p190612
- Charge une police pour ton application et utilise là par défaut.
Au préalable tu auras défini soit une constante soit une variable pour ta police.

Code : Tout sélectionner

LoadFont(#FontGlobal, "", AdjustFontSize(10))
SetGadgetFont(#PB_Default, FontID(#FontGlobal))

Re: Largeur et positionnement

Publié : sam. 04/nov./2017 18:54
par selzig
Bonjour,
microdevweb a écrit :Petit coup de gueule... :mrgreen:
je trouve vraiment déplaisant que les auteurs de message de demande d'aide n'aie pas la courtoisie d'adressé un petit merci aux membres qui leurs réponde.
Mécontentement effectivement légitime. Désolé. J'étais accaparé par l'autre de mes problèmes qui est discriminant. Je n'ai pas encore étudié votre réponse, ni les autres. Je me concentre actuellement sur ce que je devine être un point faible de PB : l'accès aux bases de données en ce qui concerne MySQL D'une part, il est peu pratique, difficile à mettre en œuvre (en tous cas sous Mac OS*) et enfin il me semble d'une lenteur que je n'ai pas réussi à régler et d'ailleurs, dans la mesure où le mysql.pbi que j'utilise (une version 2016) est basé sur les macros, je doute qu'il ne soit améliorable. Et pour couronner le tout, je n'ai pas réussi à porter un exécutable d'un appareil à l'autre ... même sous Windows :oops: Argh, dur, dur de retomber si bas. :|

Donc je vous remercie pour votre réponse et les autres auteurs pour la leur, avec un retard que j'espère vous accepterez d'excuser.
Cordialement. Gilles

* sous OS 10.12.6, le mysql.pbi me permet d'accéder à la base de données avec le connecteur C mysql uniquement en mode Run. Une fois compilé, le projet ne fonctionne plus. Il semble que cela soit un problème connu de ce connecteur sous OS X. Je suis en train de compiler un connecteur mariaDB sous OS X. En attendant, je ne rencontre pas ce(s) problème(s), ni sur Qt, ni sur Lazarus... même si sur Qt, la compilation (la construction) de la version statique incluant OpenSSL et MariaDB nécessite quelques tâtonnements quelque soit l'OS utilisé.

Re: Largeur et positionnement

Publié : sam. 04/nov./2017 21:11
par microdevweb
@Gilles,

Pas de soucis, je comprend et bonne chance pour la suite de ton projet.