Après windows pour les nuls, voici PB pour les bons (ou presque).

Le forum (ô combien francophone) des utilisateurs de Powerbuilder.

Recherche rapide

Annonce

Certaines rubriques, dont des cours, sont uniquement visibles par les membres du forum ^^.
Dans la rubrique Liens & Références, vous avez accès à un sommaire de téléchargement, profitez-en !
Il existe maintenant un nouveau TOPIC "Votre CV en Ligne" accessible uniquement par demande.

#1 29-04-2015 09:16:17

legagneur  
Membre Geek
Lieu: Yaoundé
Date d'inscription: 02-10-2013
Messages: 81
Pépites: 395
Banque: 0

Ajustage automatique des frames et des controls

Solution à mon problème
Bonjour la communauté,
Le problème que je m’en vais décrire, je l’ai déjà posé sur ce forum, mais face à mes difficultés dans la résolution de celui-ci, et en relisant mes anciens posts, je me suis dit que je posais sûrement mal le problème d’où les réponses bien que constructives ne m’ont pas aidé à apporter des solutions. Je me permets donc de refaire un post en décrivant à mon avis clairement ce que je vis comme difficulté. Je vous prie donc d’être indulgent.
J’ai eu à designer les fenêtres d’une application que j’ai eu à développer sur un écran de très haute résolution (1366*900). Je pensais que cela devait se comporter comme toutes les autres applications développé avec d’autres logiciels qui ajustent leur fenêtre ainsi que ses composants (Champs de texte, Boutons, etc…) ou controls (Dans la terminologie PowerBuilder) automatiquement en fonction des écrans d’ordinateurs sur lesquelles elles seront installés.
En effet, dans mon application j’ai toutes mes fenêtres héritent d’une fenêtre mère que j’ai appelée w_app_basesheet qui elle-même hérite de Windows. Je voudrai que les controls ainsi que la fenêtre principale, les fenêtres filles ainsi que les controls puisses s’ancrer automatiquement que le logiciel fonctionne sous un ordinateur avec écran de résolution 800*600(Réduction de la hauteur et de la largeur des controls par rapport à l’origine) ou un ordinateur de résolution de 1660*1440(Augmentation de la hauteur et de la largeur des controls par rapport à l’origine).
J’espère avoir été claire cette fois. Je suis à votre « écoute » pour d’éventuelle question y relative.
Bonne fête du travail à tous.

Hors ligne

 

#2 29-04-2015 10:40:40

Nephtis  
Bienfaiteur du site
Award: bf
Lieu: Longjumeau
Date d'inscription: 29-06-2007
Messages: 665
Pépites: 17,189,873,958
Banque: 9,223,372,036,854,776,000

Re: Ajustage automatique des frames et des controls

Bonjour,

Tu souhaites que les fenêtres que tu as développé s'affichent de la même façon quelque soit la résolution de l'écran. Il faut donc partir sur le fait que la résolution 1366*900 (ta résolution de développement) est la résolution étalon.
La seule chose a faire est de déterminer le ratio entre la résolution étalon et la résolution de l'utilisateur.

Exemple : Un utilisateur avec un écran en 1660*1440 a une résolution 1,22% (1660 / 1366) plus grande en largeur et 1,6% (1440 / 900) plus grande en hauteur.

Tu as désormais tout ce qu'il faut pour redimensionner les contrôles à l’intérieur de l'écran en codant l’événement resize.

Exemple : en reprenant l'exemple ci dessus

Code: pb

//evenement resize de la fenêtre mère
Decimal{2} ratio_largeur // 2 chiffres après la virgule pour l'exemple mais on peut bien sur mettre plus
Decimal{2} ratio_hauteur // 2 chiffres après la virgule pour l'exemple mais on peut bien sur mettre plus
Integer nb_controles
Integer i=1

ratio_largeur = newWidth/il_largeur_etalon // il_largeur_etalon est la variable d'instance représentant la largeur de la résolution étalon : 1366
ratio_hauteur = newHeigth/il_hauteur_etalon // il_hauteur_etalon est la variable d'instance représentant la hauteur de la résolution étalon : 900
nb_controles = UpperBound(this.Control) // Nombre de contrôles sur la fenêtre

For i=1 To nb_controles
  this.Control[i].X = this.Control[i].X * ratio_largeur
  this.Control[i].Width = this.Control[i].Width * ratio_largeur
  this.Control[i].Y = this.Control[i].Y * ratio_hauteur
  this.Control[i].Heigth = this.Control[i].Heigth * ratio_hauteur
Next


Je n'ai pas du tout testé le code mais ça devrait être quelque chose du genre.


Qui sème des problèmes, récolte des réponses.
PB 6.5 || ASE 12.5.4 || XP SP3

Hors ligne

 

#3 04-05-2015 12:02:46

legagneur  
Membre Geek
Lieu: Yaoundé
Date d'inscription: 02-10-2013
Messages: 81
Pépites: 395
Banque: 0

Re: Ajustage automatique des frames et des controls

Bonjour,
Merci Nephtis pour cette piste de solution qui me semble être la plus intéressante. Cependant j'ai pris le soin de mettre ce bout de code dans l'évènement resize dans le but de le tester,  mais je suis actuellement buté sur une erreur que voici :

"Incompatibe property x for type windowobject"
"Incompatibe property width for type windowobject"
"Incompatibe property y for type windowobject"
"Incompatibe property heigth for type windowobject"

Je viens auprès de vous pour m'aider à résoudre ce problème

Bonne journée à tous

Hors ligne

 

#4 04-05-2015 12:55:06

Nephtis  
Bienfaiteur du site
Award: bf
Lieu: Longjumeau
Date d'inscription: 29-06-2007
Messages: 665
Pépites: 17,189,873,958
Banque: 9,223,372,036,854,776,000

Re: Ajustage automatique des frames et des controls

En fait la propriété Control d'une fenêtre renvoie une liste de WindowObject

Control[ ]    WindowObject    Contains the controls in the window. You should not change the contents of this array in a script.

Ce n'est pas un objet manipulable en tant que tel, il te faut encore déterminer son type : datawindow, bouton, champ de texte, ...
Pour déterminer le type d'un objet il faut utiliser la fonction TypeOf()
Ce qui donne dans l'exemple :

Code: pb

//evenement resize de la fenêtre mère
Decimal{2} ratio_largeur // 2 chiffres après la virgule pour l'exemple mais on peut bien sur mettre plus
Decimal{2} ratio_hauteur // 2 chiffres après la virgule pour l'exemple mais on peut bien sur mettre plus
Integer nb_controles
Integer i=1

// Liste des types d'objets possibles sur la fenêtre
Datawindow ldw_datawindow
Button lbt_button
UserObject luo_userobject
// ... etc

ratio_largeur = newWidth/il_largeur_etalon // il_largeur_etalon est la variable d'instance représentant la largeur de la résolution étalon : 1366
ratio_hauteur = newHeigth/il_hauteur_etalon // il_hauteur_etalon est la variable d'instance représentant la hauteur de la résolution étalon : 900
nb_controles = UpperBound(this.Control) // Nombre de contrôles sur la fenêtre

For i=1 To nb_controles
  // Si c'est une datawindow
  If (TypeOf(this.Control[i]) = Datawindow!) Then
    ldw_datawindow = this.Control[i]
    ldw_datawindow.X = ldw_datawindow.X * ratio_largeur
    ldw_datawindow.Width = ldw_datawindow.Width * ratio_largeur
    ldw_datawindow.Y = ldw_datawindow.Y * ratio_hauteur
    ldw_datawindow.Height = ldw_datawindow.Height * ratio_hauteur
  End If

  // Si c'est un bouton
  //... etc
Next

Qui sème des problèmes, récolte des réponses.
PB 6.5 || ASE 12.5.4 || XP SP3

Hors ligne

 

#5 08-05-2015 14:24:31

legagneur  
Membre Geek
Lieu: Yaoundé
Date d'inscription: 02-10-2013
Messages: 81
Pépites: 395
Banque: 0

Re: Ajustage automatique des frames et des controls

Bonsoir,
Merci beaucoup Nephtis pour ce coup de main. Cela marche très bien pour des frames qui héritent directement de l'Object WINDOW.
Dans mon application la majorité des frames héritent de w_app_basesheet qui elle même hérite de l'Object WINDOW. Or lorsque je place ce code dans l'évènement resize d'une des frames qui héritent de w_app_basesheet. Elle ne me donne pas un rendu satisfaisant. Bref elle ne fonctionne pas.
Comment puis je m'y prendre pour résoudre ce cas?

Bon week end

Hors ligne

 

#6 08-05-2015 14:30:44

seki  
0x73656B69
Award: bf
Lieu: Laquenexy & Luxembourg
Date d'inscription: 20-11-2008
Messages: 1118
Pépites: 4,296,080,204
Banque: 9,223,372,036,854,776,000
Site web

Re: Ajustage automatique des frames et des controls

legagneur a écrit:

Bref elle ne fonctionne pas.

C'est un peu vague comme description.

Ton code de redimensionnement est dans le resize des enfants de w_app_basesheet ? Ce serait mieux de le mettre dans cet ancêtre directement.

Quand "ça ne fonctionne pas", serait-ce parce qu'il y a déjà déjà un code dans le resize de l'ancêtre qui perturbe ton code ?
Ou une histoire de "extend ancestor" coché ou non coché ?


The best programs are the ones written when the programmer is supposed to be working on something else. - Melinda Varian

Mes réponses PB sur StackOverflow
http://stackoverflow.com/users/flair/317266.png

Hors ligne

 

#7 08-05-2015 14:48:06

legagneur  
Membre Geek
Lieu: Yaoundé
Date d'inscription: 02-10-2013
Messages: 81
Pépites: 395
Banque: 0

Re: Ajustage automatique des frames et des controls

Bonsoir SEKI,
J'ai mis le code de redimensionnement dans le resize de w_app_basesheet, et je n'ai rien mis dans le resize de ces fils. Cela ne m'a pas donné de rendu satisfaisant. Par la suite j'ai remis le bout de code aussi dans simultanément dans le resize de w_app_basesheet ainsi que dans ses fils. Jusque là pas de rendu satisfaisant.
Lorsque je dis que cela na marche pas, je veux dire que ce que je n'ai pas de rendu que j'attends.

Hors ligne

 

#8 08-05-2015 15:05:24

seki  
0x73656B69
Award: bf
Lieu: Laquenexy & Luxembourg
Date d'inscription: 20-11-2008
Messages: 1118
Pépites: 4,296,080,204
Banque: 9,223,372,036,854,776,000
Site web

Re: Ajustage automatique des frames et des controls

legagneur a écrit:

Par la suite j'ai remis le bout de code aussi dans simultanément dans le resize de w_app_basesheet ainsi que dans ses fils. Jusque là pas de rendu satisfaisant.

ça il faut éviter la duplication de code. Soit l'évènement est appelé sur les 2 niveaux de l'objet (son ancêtre, puis lui même) si l'enfant étend le code de son ancêtre, soit il ne l'étend pas et il n'y a que l'évènement à son niveau qui est appelé.

legagneur a écrit:

Lorsque je dis que cela na marche pas, je veux dire que ce que je n'ai pas de rendu que j'attends.

Mais le code est bien appelé donc ? (vérifiable avec un OutputDebugString() par exemple)
C'est un problème de calcul des dimensions ? Peut-être un problème entre les pixels et les pbunits (voir avec PixelsToUnits() et UnitsToPixels()) : les tailles et positions des contrôles PB s'expriment en pbunits (environ 4 pbunits pour 1 pixel en horizontal et 4.1 pbunits pour 1 pixel vertical - ou le contraire) et tu mixes peut-être les 2 unités dans tes calculs ?


The best programs are the ones written when the programmer is supposed to be working on something else. - Melinda Varian

Mes réponses PB sur StackOverflow
http://stackoverflow.com/users/flair/317266.png

Hors ligne

 

#9 08-05-2015 15:27:33

legagneur  
Membre Geek
Lieu: Yaoundé
Date d'inscription: 02-10-2013
Messages: 81
Pépites: 395
Banque: 0

Re: Ajustage automatique des frames et des controls

Les valeurs de X,Y,WIDTH et HEIGHT que l'ont utilisent sont déjà les valeurs en PBUnits
Est-ce que le besoin de convertir se pose encore?

Hors ligne

 

#10 08-05-2015 15:37:37

seki  
0x73656B69
Award: bf
Lieu: Laquenexy & Luxembourg
Date d'inscription: 20-11-2008
Messages: 1118
Pépites: 4,296,080,204
Banque: 9,223,372,036,854,776,000
Site web

Re: Ajustage automatique des frames et des controls

legagneur a écrit:

Les valeurs de X,Y,WIDTH et HEIGHT que l'ont utilisent sont déjà les valeurs en PBUnits
Est-ce que le besoin de convertir se pose encore?

ça dépend comment tu calcules tes ratio : par rapport à une taille de référence en pixels ou en pb units, et la taille de l'écran tu la récupères en pixels ou pbunits ?

à tout hasard : tu as peut-être un problème de prise en compte des DPI de l'écran ? (suivant le nombre de dpi, une taille en pixels ne sera pas identique d'un écran à l'autre même si les dimensions en pixels sont identiques)

Dernière modification par seki (08-05-2015 15:40:42)


The best programs are the ones written when the programmer is supposed to be working on something else. - Melinda Varian

Mes réponses PB sur StackOverflow
http://stackoverflow.com/users/flair/317266.png

Hors ligne

 

#11 11-05-2015 08:14:40

legagneur  
Membre Geek
Lieu: Yaoundé
Date d'inscription: 02-10-2013
Messages: 81
Pépites: 395
Banque: 0

Re: Ajustage automatique des frames et des controls

Bonjour,
J'ai pris en compte toutes les remarques, mais je n'ai pas jusqu'à present un rendu satisfaisant. Les questions que je me posent sont les suivantes :
1- Pourquoi ce bout de code fonctionne pour des frames qui héritent directement de l'Object WINDOW et ne fonctionne pas pour celle qui héritent de w_app_basesheet?
2- Pourquoi lorsque nous mettons ce bout de code dans le resize de w_app_basesheet, les frames héritant de celles ci ne donne pas le rendu que l'on attend?
3- Lorsqu'au lieu de mettre le bout de code dans le resize de w_app_basesheet, on le met dans le resize des frames enfants, nous n'avons pas toujours le rendu que l'on attend?

Merci

Hors ligne

 

#12 11-05-2015 08:46:16

Nephtis  
Bienfaiteur du site
Award: bf
Lieu: Longjumeau
Date d'inscription: 29-06-2007
Messages: 665
Pépites: 17,189,873,958
Banque: 9,223,372,036,854,776,000

Re: Ajustage automatique des frames et des controls

legagneur a écrit:

Bonjour,
J'ai pris en compte toutes les remarques, mais je n'ai pas jusqu'à present un rendu satisfaisant. Les questions que je me posent sont les suivantes :
1- Pourquoi ce bout de code fonctionne pour des frames qui héritent directement de l'Object WINDOW et ne fonctionne pas pour celle qui héritent de w_app_basesheet?
2- Pourquoi lorsque nous mettons ce bout de code dans le resize de w_app_basesheet, les frames héritant de celles ci ne donne pas le rendu que l'on attend?
3- Lorsqu'au lieu de mettre le bout de code dans le resize de w_app_basesheet, on le met dans le resize des frames enfants, nous n'avons pas toujours le rendu que l'on attend?

Merci

Quel est le problême?
Les contrôles sont trop grands? trop petits? pas a la bonne place?

Une capture d'écran pourrais nous permettre de comprendre car là c'est trop vague comme description du problème


Qui sème des problèmes, récolte des réponses.
PB 6.5 || ASE 12.5.4 || XP SP3

Hors ligne

 

#13 11-05-2015 16:33:43

legagneur  
Membre Geek
Lieu: Yaoundé
Date d'inscription: 02-10-2013
Messages: 81
Pépites: 395
Banque: 0

Re: Ajustage automatique des frames et des controls

Bonsoir,
Je vous présente quelques captures d'écrans.
L'image ci dessous est obtenu avec une résolution de 1600*900
https://lut.im/o4kgjj2Q/0PFbfX26

L'image ci dessous est obten après avoir appliqué mis le bout de code dans l'évenement resize de feuille fille et être passer à une résolution 1024*768

https://lut.im/1zOdrfGc/22cSH554

Dernière modification par legagneur (11-05-2015 16:35:31)

Hors ligne

 

#14 12-05-2015 06:59:42

legagneur  
Membre Geek
Lieu: Yaoundé
Date d'inscription: 02-10-2013
Messages: 81
Pépites: 395
Banque: 0

Re: Ajustage automatique des frames et des controls

Bonjour,
Je présente ici le bout de code que j'ai introduit dans le resize

Code: pb

//evenement resize de la fenêtre mère
Decimal{2} ratio_largeur // 2 chiffres après la virgule pour l'exemple mais on peut bien sur mettre plus
Decimal{2} ratio_hauteur // 2 chiffres après la virgule pour l'exemple mais on peut bien sur mettre plus
Integer nb_controles
Integer newWidth1,newHeigth1
Integer i=1


environment myEnv
GetEnvironment(myEnv)

newWidth=myEnv.ScreenWidth
newHeight=myEnv.ScreenHeight

// Liste des types d'objets possibles sur la fenêtre
Datawindow ldw_datawindow
Button lbt_button
UserObject luo_userobject
CommandButton lcb_commandbutton
PictureButton lpb_picturebutton
CheckBox lcb_checkbox
RadioButton lrb_radiobutton
StaticText lst_statictext
StaticHyperLink lshl_statichyperlink
Picture lp_picture
PictureHyperLink lphl_picturehyperlink
GroupBox lgb_groupbox
Line ll_line
Oval lo_oval
Rectangle lr_rectangle
SingleLineEdit lsle_singlelineedit
EditMask lem_editmask
MultiLineEdit lmle_multilineedit
RichTextEdit lrte_richtextedit
HScrollBar lhsb_hscrollbar
VScrollBar lvsb_vscrollbar
HTrackBar lhtb_htrackbar
HprogressBar lhpb_hprogressbar
VprogressBar lvpb_vprogressbar
DropDownListBox lddlb_dropdownlistbox
PictureListBox lplb_picturelistbox
ListView llv_ListView
TreeView ltv_treeview
Tab lt_tab
Graph lg_graph
MonthCalendar lmc_monthcalendar
DatePicker ldp_datepicker
Animation la_animation
InkEdit lie_inkedit
InkPicture llp_lnkpicture
//OLE lo_ole

// ... etc

ratio_largeur = newWidth / 1366    
ratio_hauteur = newHeight / 900           
nb_controles = UpperBound(this.Control ) // Nombre de contrôles sur la fenêtre


For i=1 To nb_controles
  // Si c'est une datawindow
  If (TypeOf(this.Control[i]) = Datawindow!) Then
    ldw_datawindow = this.Control[i]
    ldw_datawindow.X =ldw_datawindow.X * ratio_largeur
    ldw_datawindow.Width = ldw_datawindow.Width * ratio_largeur
    ldw_datawindow.Y = ldw_datawindow.Y * ratio_hauteur
    ldw_datawindow.Height = ldw_datawindow.Height * ratio_hauteur
  End If
  
    If (TypeOf(this.Control[i]) = CommandButton!) Then
    lcb_commandbutton = this.Control[i]
    lcb_commandbutton.X = lcb_commandbutton.X * ratio_largeur
    lcb_commandbutton.Width = lcb_commandbutton.Width * ratio_largeur
    lcb_commandbutton.Y = lcb_commandbutton.Y * ratio_hauteur
    lcb_commandbutton.Height = lcb_commandbutton.Height * ratio_hauteur
  End If
  
    If (TypeOf(this.Control[i]) = UserObject!) Then
    luo_userobject = this.Control[i]
    luo_userobject.X = luo_userobject.X * ratio_largeur
    luo_userobject.Width = luo_userobject.Width * ratio_largeur
    luo_userobject.Y = luo_userobject.Y * ratio_hauteur
    luo_userobject.Height = luo_userobject.Height * ratio_hauteur
  End If
  
    If (TypeOf(this.Control[i]) = PictureButton!) Then
    lpb_picturebutton = this.Control[i]
    lpb_picturebutton.X = lpb_picturebutton.X * ratio_largeur
    lpb_picturebutton.Width = lpb_picturebutton.Width * ratio_largeur
    lpb_picturebutton.Y = lpb_picturebutton.Y * ratio_hauteur
    lpb_picturebutton.Height = lpb_picturebutton.Height * ratio_hauteur
  End If
  
      If (TypeOf(this.Control[i]) = CheckBox!) Then
    lcb_checkbox = this.Control[i]
    lcb_checkbox.X = lcb_checkbox.X * ratio_largeur
    lcb_checkbox.Width = lcb_checkbox.Width * ratio_largeur
    lcb_checkbox.Y = lcb_checkbox.Y * ratio_hauteur
    lcb_checkbox.Height = lcb_checkbox.Height * ratio_hauteur
  End If
  
      If (TypeOf(this.Control[i]) = RadioButton!) Then
    lrb_radiobutton = this.Control[i]
    lrb_radiobutton.X = lrb_radiobutton.X * ratio_largeur
    lrb_radiobutton.Width = lrb_radiobutton.Width * ratio_largeur
    lrb_radiobutton.Y = lrb_radiobutton.Y * ratio_hauteur
    lrb_radiobutton.Height = lrb_radiobutton.Height * ratio_hauteur
  End If

   If (TypeOf(this.Control[i]) = StaticText!) Then
    lst_statictext = this.Control[i]
    lst_statictext.X = lst_statictext.X * ratio_largeur
    lst_statictext.Width = lst_statictext.Width * ratio_largeur
    lst_statictext.Y = lst_statictext.Y * ratio_hauteur
    lst_statictext.Height = lst_statictext.Height * ratio_hauteur
  End If
  
  If (TypeOf(this.Control[i]) = StaticHyperLink!) Then
    lshl_statichyperlink = this.Control[i]
    lshl_statichyperlink.X = lshl_statichyperlink.X * ratio_largeur
    lshl_statichyperlink.Width = lshl_statichyperlink.Width * ratio_largeur
    lshl_statichyperlink.Y = lshl_statichyperlink.Y * ratio_hauteur
    lshl_statichyperlink.Height = lshl_statichyperlink.Height * ratio_hauteur
  End If
 
   If (TypeOf(this.Control[i]) = Picture!) Then
    lp_picture = this.Control[i]
    lp_picture.X = lp_picture.X * ratio_largeur
    lp_picture.Width = lp_picture.Width * ratio_largeur
    lp_picture.Y = lp_picture.Y * ratio_hauteur
    lp_picture.Height = lp_picture.Height * ratio_hauteur
  End If
  
   If (TypeOf(this.Control[i]) = PictureHyperLink!) Then
    lphl_picturehyperlink = this.Control[i]
    lphl_picturehyperlink.X = lphl_picturehyperlink.X * ratio_largeur
    lphl_picturehyperlink.Width = lphl_picturehyperlink.Width * ratio_largeur
    lphl_picturehyperlink.Y = lphl_picturehyperlink.Y * ratio_hauteur
    lphl_picturehyperlink.Height = lphl_picturehyperlink.Height * ratio_hauteur
  End If
  
   If (TypeOf(this.Control[i]) = GroupBox!) Then
    lgb_groupbox = this.Control[i]
    lgb_groupbox.X = lgb_groupbox.X * ratio_largeur
    lgb_groupbox.Width = lgb_groupbox.Width * ratio_largeur
    lgb_groupbox.Y = lgb_groupbox.Y * ratio_hauteur
    lgb_groupbox.Height = lgb_groupbox.Height * ratio_hauteur
  End If
  
     If (TypeOf(this.Control[i]) = Oval!) Then
    lo_oval = this.Control[i]
    lo_oval.X = lo_oval.X * ratio_largeur
    lo_oval.Width = lo_oval.Width * ratio_largeur
    lo_oval.Y = lo_oval.Y * ratio_hauteur
    lo_oval.Height = lo_oval.Height * ratio_hauteur
  End If
  
  If (TypeOf(this.Control[i]) = Rectangle!) Then
    lr_rectangle = this.Control[i]
    lr_rectangle.X = lr_rectangle.X * ratio_largeur
    lr_rectangle.Width = lr_rectangle.Width * ratio_largeur
    lr_rectangle.Y = lr_rectangle.Y * ratio_hauteur
    lr_rectangle.Height = lr_rectangle.Height * ratio_hauteur
  End If
 
   If (TypeOf(this.Control[i]) = SingleLineEdit!) Then
    lsle_singlelineedit = this.Control[i]
    lsle_singlelineedit.X = lsle_singlelineedit.X * ratio_largeur
    lsle_singlelineedit.Width = lsle_singlelineedit.Width * ratio_largeur
    lsle_singlelineedit.Y = lsle_singlelineedit.Y * ratio_hauteur
    lsle_singlelineedit.Height = lsle_singlelineedit.Height * ratio_hauteur
  End If
 
    If (TypeOf(this.Control[i]) = EditMask!) Then
    lem_editmask = this.Control[i]
    lem_editmask.X = lem_editmask.X * ratio_largeur
    lem_editmask.Width = lem_editmask.Width * ratio_largeur
    lem_editmask.Y = lem_editmask.Y * ratio_hauteur
    lem_editmask.Height = lem_editmask.Height * ratio_hauteur
  End If
 
     If (TypeOf(this.Control[i]) = EditMask!) Then
    lem_editmask = this.Control[i]
    lem_editmask.X = lem_editmask.X * ratio_largeur
    lem_editmask.Width = lem_editmask.Width * ratio_largeur
    lem_editmask.Y = lem_editmask.Y * ratio_hauteur
    lem_editmask.Height = lem_editmask.Height * ratio_hauteur
  End If
 
   If (TypeOf(this.Control[i]) = MultiLineEdit!) Then
    lmle_multilineedit = this.Control[i]
    lmle_multilineedit.X = lmle_multilineedit.X * ratio_largeur
    lmle_multilineedit.Width = lmle_multilineedit.Width * ratio_largeur
    lmle_multilineedit.Y = lmle_multilineedit.Y * ratio_hauteur
    lmle_multilineedit.Height = lmle_multilineedit.Height * ratio_hauteur
  End If
  
   If (TypeOf(this.Control[i]) = RichTextEdit!) Then
    lrte_richtextedit = this.Control[i]
    lrte_richtextedit.X = lrte_richtextedit.X * ratio_largeur
    lrte_richtextedit.Width = lrte_richtextedit.Width * ratio_largeur
    lrte_richtextedit.Y = lrte_richtextedit.Y * ratio_hauteur
    lrte_richtextedit.Height = lrte_richtextedit.Height * ratio_hauteur
  End If
 
    If (TypeOf(this.Control[i]) = HScrollBar!) Then
    lhsb_hscrollbar = this.Control[i]
    lhsb_hscrollbar.X = lhsb_hscrollbar.X * ratio_largeur
    lhsb_hscrollbar.Width = lhsb_hscrollbar.Width * ratio_largeur
    lhsb_hscrollbar.Y = lhsb_hscrollbar.Y * ratio_hauteur
    lhsb_hscrollbar.Height = lhsb_hscrollbar.Height * ratio_hauteur
  End If
 
   If (TypeOf(this.Control[i]) = VScrollBar!) Then
    lvsb_vscrollbar = this.Control[i]
    lvsb_vscrollbar.X = lvsb_vscrollbar.X * ratio_largeur
    lvsb_vscrollbar.Width = lvsb_vscrollbar.Width * ratio_largeur
    lvsb_vscrollbar.Y = lvsb_vscrollbar.Y * ratio_hauteur
    lvsb_vscrollbar.Height = lvsb_vscrollbar.Height * ratio_hauteur
  End If
 
    If (TypeOf(this.Control[i]) = HTrackBar!) Then
    lhtb_htrackbar = this.Control[i]
    lhtb_htrackbar.X = lhtb_htrackbar.X * ratio_largeur
    lhtb_htrackbar.Width = lhtb_htrackbar.Width * ratio_largeur
    lhtb_htrackbar.Y = lhtb_htrackbar.Y * ratio_hauteur
    lhtb_htrackbar.Height = lhtb_htrackbar.Height * ratio_hauteur
  End If
  
  If (TypeOf(this.Control[i]) = HprogressBar!) Then
    lhpb_hprogressbar = this.Control[i]
    lhpb_hprogressbar.X = lhpb_hprogressbar.X * ratio_largeur
    lhpb_hprogressbar.Width = lhpb_hprogressbar.Width * ratio_largeur
    lhpb_hprogressbar.Y = lhpb_hprogressbar.Y * ratio_hauteur
    lhpb_hprogressbar.Height = lhpb_hprogressbar.Height * ratio_hauteur
  End If
 
 
   If (TypeOf(this.Control[i]) = VprogressBar!) Then
    lvpb_vprogressbar = this.Control[i]
    lvpb_vprogressbar.X = lvpb_vprogressbar.X * ratio_largeur
    lvpb_vprogressbar.Width = lvpb_vprogressbar.Width * ratio_largeur
    lvpb_vprogressbar.Y = lvpb_vprogressbar.Y * ratio_hauteur
    lvpb_vprogressbar.Height = lvpb_vprogressbar.Height * ratio_hauteur
  End If
 
    If (TypeOf(this.Control[i]) = VprogressBar!) Then
    lvpb_vprogressbar = this.Control[i]
    lvpb_vprogressbar.X = lvpb_vprogressbar.X * ratio_largeur
    lvpb_vprogressbar.Width = lvpb_vprogressbar.Width * ratio_largeur
    lvpb_vprogressbar.Y = lvpb_vprogressbar.Y * ratio_hauteur
    lvpb_vprogressbar.Height = lvpb_vprogressbar.Height * ratio_hauteur
  End If
 
  If (TypeOf(this.Control[i]) = DropDownListBox!) Then
    lddlb_dropdownlistbox = this.Control[i]
    lddlb_dropdownlistbox.X = lddlb_dropdownlistbox.X * ratio_largeur
    lddlb_dropdownlistbox.Width = lddlb_dropdownlistbox.Width * ratio_largeur
    lddlb_dropdownlistbox.Y = lddlb_dropdownlistbox.Y * ratio_hauteur
    lddlb_dropdownlistbox.Height = lddlb_dropdownlistbox.Height * ratio_hauteur
  End If
 
   If (TypeOf(this.Control[i]) = PictureListBox!) Then
    lplb_picturelistbox = this.Control[i]
    lplb_picturelistbox.X = lplb_picturelistbox.X * ratio_largeur
    lplb_picturelistbox.Width = lplb_picturelistbox.Width * ratio_largeur
    lplb_picturelistbox.Y = lplb_picturelistbox.Y * ratio_hauteur
    lplb_picturelistbox.Height = lplb_picturelistbox.Height * ratio_hauteur
  End If
  
   If (TypeOf(this.Control[i]) = ListView!) Then
    llv_ListView = this.Control[i]
    llv_ListView.X = llv_ListView.X * ratio_largeur
    llv_ListView.Width = llv_ListView.Width * ratio_largeur
    llv_ListView.Y = llv_ListView.Y * ratio_hauteur
    llv_ListView.Height = llv_ListView.Height * ratio_hauteur
  End If
 
    If (TypeOf(this.Control[i]) = TreeView!) Then
    ltv_treeview = this.Control[i]
    ltv_treeview.X = ltv_treeview.X * ratio_largeur
    ltv_treeview.Width = ltv_treeview.Width * ratio_largeur
    ltv_treeview.Y = ltv_treeview.Y * ratio_hauteur
    ltv_treeview.Height = ltv_treeview.Height * ratio_hauteur
  End If
 
   If (TypeOf(this.Control[i]) = Tab!) Then
    lt_tab = this.Control[i]
    lt_tab.X = ceiling(lt_tab.X * ratio_largeur)
    lt_tab.Width = ceiling(lt_tab.Width * ratio_largeur)
    lt_tab.Y =ceiling (lt_tab.Y * ratio_hauteur)
    lt_tab.Height =ceiling( lt_tab.Height * ratio_hauteur)
  End If
 
    If (TypeOf(this.Control[i]) = Tab!) Then
    lt_tab = this.Control[i]
    lt_tab.X = lt_tab.X * ratio_largeur
    lt_tab.Width = lt_tab.Width * ratio_largeur
    lt_tab.Y = lt_tab.Y * ratio_hauteur
    lt_tab.Height = lt_tab.Height * ratio_hauteur
  End If
  
   If (TypeOf(this.Control[i]) = Graph!) Then
    lg_graph = this.Control[i]
    lg_graph.X = lg_graph.X * ratio_largeur
    lg_graph.Width = lg_graph.Width * ratio_largeur
    lg_graph.Y = lg_graph.Y * ratio_hauteur
    lg_graph.Height = lg_graph.Height * ratio_hauteur
  End If
  
   If (TypeOf(this.Control[i]) = MonthCalendar!) Then
    lmc_monthcalendar = this.Control[i]
    lmc_monthcalendar.X = lmc_monthcalendar.X * ratio_largeur
    lmc_monthcalendar.Width = lmc_monthcalendar.Width * ratio_largeur
    lmc_monthcalendar.Y = lmc_monthcalendar.Y * ratio_hauteur
    lmc_monthcalendar.Height = lmc_monthcalendar.Height * ratio_hauteur
  End If
 
  If (TypeOf(this.Control[i]) = DatePicker!) Then
    ldp_datepicker = this.Control[i]
    ldp_datepicker.X = ldp_datepicker.X * ratio_largeur
    ldp_datepicker.Width = ldp_datepicker.Width * ratio_largeur
    ldp_datepicker.Y = ldp_datepicker.Y * ratio_hauteur
    ldp_datepicker.Height = ldp_datepicker.Height * ratio_hauteur
  End If
  
    If (TypeOf(this.Control[i]) = Animation!) Then
    la_animation = this.Control[i]
    la_animation.X = la_animation.X * ratio_largeur
    la_animation.Width = la_animation.Width * ratio_largeur
    la_animation.Y = la_animation.Y * ratio_hauteur
    la_animation.Height = la_animation.Height * ratio_hauteur
  End If
  
   If (TypeOf(this.Control[i]) = InkEdit!) Then
    lie_inkedit = this.Control[i]
    lie_inkedit.X = lie_inkedit.X * ratio_largeur
    lie_inkedit.Width = lie_inkedit.Width * ratio_largeur
    lie_inkedit.Y = lie_inkedit.Y * ratio_hauteur
    lie_inkedit.Height = lie_inkedit.Height * ratio_hauteur
  End If
  
   If (TypeOf(this.Control[i]) = InkPicture!) Then
    llp_lnkpicture = this.Control[i]
    llp_lnkpicture.X = llp_lnkpicture.X * ratio_largeur
    llp_lnkpicture.Width = llp_lnkpicture.Width * ratio_largeur
    llp_lnkpicture.Y = llp_lnkpicture.Y * ratio_hauteur
    llp_lnkpicture.Height = llp_lnkpicture.Height * ratio_hauteur
  End If

Next

Hors ligne

 

#15 12-05-2015 08:33:19

Nephtis  
Bienfaiteur du site
Award: bf
Lieu: Longjumeau
Date d'inscription: 29-06-2007
Messages: 665
Pépites: 17,189,873,958
Banque: 9,223,372,036,854,776,000

Re: Ajustage automatique des frames et des controls

legagneur a écrit:

//...
ratio_largeur = newWidth / 1366   
ratio_hauteur = newHeight / 900
//...

Je suppose que ces données sont exprimées en pixels. Or X,Y,width et height sont exprimées en unités. Il faut d'abord convertir les pixel avec la méthode PixelToUnits()

PixelsToUnits(1366, XPixelsToUnits!) = 6245
PixelsToUnits(900, XPixelsToUnits!) = 3600

Ensuite j'ai l'impression que c'est un tab control qui est affiché sur l'écran. Ce contrôle contient des tab pages qui sont des user object contenant des contrôles.

pb_help a écrit:

A Tab control contains tab pages, which are user objects that contain controls.

Et j’imagine qu'aucun resize des ces user object n'a été codé, d'où le résultat obtenu ...


Qui sème des problèmes, récolte des réponses.
PB 6.5 || ASE 12.5.4 || XP SP3

Hors ligne

 

#16 12-05-2015 08:59:05

seki  
0x73656B69
Award: bf
Lieu: Laquenexy & Luxembourg
Date d'inscription: 20-11-2008
Messages: 1118
Pépites: 4,296,080,204
Banque: 9,223,372,036,854,776,000
Site web

Re: Ajustage automatique des frames et des controls

Nephtis a écrit:

legagneur a écrit:

//...
ratio_largeur = newWidth / 1366   
ratio_hauteur = newHeight / 900
//...

Je suppose que ces données sont exprimées en pixels. Or X,Y,width et height sont exprimées en unités. Il faut d'abord convertir les pixel avec la méthode PixelToUnits()

Pas forcément, la doc (PB11.5) précise pour Environment.ScreenHeight « Height of the screen in pixels », et idem pour ScreenWidth.
Mais je n'ai pas vérifié si c'était bien des pixels, ce ne serait pas la première fois que le doc ment.

Si ce sont bien des pixels, un ratio en pixels ou en units c'est pareil pour redimensionner les tailles et positions.


The best programs are the ones written when the programmer is supposed to be working on something else. - Melinda Varian

Mes réponses PB sur StackOverflow
http://stackoverflow.com/users/flair/317266.png

Hors ligne

 

#17 12-05-2015 09:02:30

legagneur  
Membre Geek
Lieu: Yaoundé
Date d'inscription: 02-10-2013
Messages: 81
Pépites: 395
Banque: 0

Re: Ajustage automatique des frames et des controls

Nephtis a écrit:

Ensuite j'ai l'impression que c'est un tab control qui est affiché sur l'écran. Ce contrôle contient des tab pages qui sont des user object contenant des contrôles.

pb_help a écrit:

A Tab control contains tab pages, which are user objects that contain controls.

Et j’imagine qu'aucun resize des ces user object n'a été codé, d'où le résultat obtenu ...

Nous avons codé les resize des user object dans ce bout de code

Code: pb

    If (TypeOf(this.Control[i]) = UserObject!) Then
    luo_userobject = this.Control[i]
    luo_userobject.X = luo_userobject.X * ratio_largeur
    luo_userobject.Width = luo_userobject.Width * ratio_largeur
    luo_userobject.Y = luo_userobject.Y * ratio_hauteur
    luo_userobject.Height = luo_userobject.Height * ratio_hauteur
  End If


A moins que ce n'est pas ce qu'il fallu faire. Est ce que c'est à ce niveau qu'il fallait gérér cela? sinon, où placer ce bout de code?

Hors ligne

 

#18 12-05-2015 09:11:22

Nephtis  
Bienfaiteur du site
Award: bf
Lieu: Longjumeau
Date d'inscription: 29-06-2007
Messages: 665
Pépites: 17,189,873,958
Banque: 9,223,372,036,854,776,000

Re: Ajustage automatique des frames et des controls

seki a écrit:

Nephtis a écrit:

legagneur a écrit:

//...
ratio_largeur = newWidth / 1366   
ratio_hauteur = newHeight / 900
//...

Je suppose que ces données sont exprimées en pixels. Or X,Y,width et height sont exprimées en unités. Il faut d'abord convertir les pixel avec la méthode PixelToUnits()

Pas forcément, la doc (PB11.5) précise pour Environment.ScreenHeight « Height of the screen in pixels », et idem pour ScreenWidth.
Mais je n'ai pas vérifié si c'était bien des pixels, ce ne serait pas la première fois que le doc ment.

Si ce sont bien des pixels, un ratio en pixels ou en units c'est pareil pour redimensionner les tailles et positions.

Je parle des X,Y,Width et Height des contrôles (pas de l'objet environnement)

pb_help a écrit:

The Height property specifies the height of a control or window in PowerBuilder units.
The Width property specifies the width of a control or window in PowerBuilder units.
The X property specifies the X coordinate of an object or control in PowerBuilder units.
The Y property specifies the Y coordinate of an object or control in PowerBuilder units.

newWidth et newHeight de l'évènement resize sont exprimés en PowerBuilder units

pb_help a écrit:

newwidth    Integer by value (the width of the client area of a window or DataWindow control in PowerBuilder units).
newheight    Integer by value (the height of the client area of a window or DataWindow control in PowerBuilder units).

Donc il faut bien convertir pour comparer ce qui est comparable


Qui sème des problèmes, récolte des réponses.
PB 6.5 || ASE 12.5.4 || XP SP3

Hors ligne

 

#19 12-05-2015 09:13:50

Nephtis  
Bienfaiteur du site
Award: bf
Lieu: Longjumeau
Date d'inscription: 29-06-2007
Messages: 665
Pépites: 17,189,873,958
Banque: 9,223,372,036,854,776,000

Re: Ajustage automatique des frames et des controls

legagneur a écrit:

Nephtis a écrit:

Ensuite j'ai l'impression que c'est un tab control qui est affiché sur l'écran. Ce contrôle contient des tab pages qui sont des user object contenant des contrôles.

pb_help a écrit:

A Tab control contains tab pages, which are user objects that contain controls.

Et j’imagine qu'aucun resize des ces user object n'a été codé, d'où le résultat obtenu ...

Nous avons codé les resize des user object dans ce bout de code

Code: pb

    If (TypeOf(this.Control[i]) = UserObject!) Then
    luo_userobject = this.Control[i]
    luo_userobject.X = luo_userobject.X * ratio_largeur
    luo_userobject.Width = luo_userobject.Width * ratio_largeur
    luo_userobject.Y = luo_userobject.Y * ratio_hauteur
    luo_userobject.Height = luo_userobject.Height * ratio_hauteur
  End If


A moins que ce n'est pas ce qu'il fallu faire. Est ce que c'est à ce niveau qu'il fallait gérér cela? sinon, où placer ce bout de code?

Ce bout de code redimensionne le contenant, pas le contenu. La taille du user object est bien modifiée mais pas tous les objets qui la composent. Pour ça il serait bien de faire une fonction récursive.

Dernière modification par Nephtis (12-05-2015 09:15:26)


Qui sème des problèmes, récolte des réponses.
PB 6.5 || ASE 12.5.4 || XP SP3

Hors ligne

 

#20 12-05-2015 09:20:33

seki  
0x73656B69
Award: bf
Lieu: Laquenexy & Luxembourg
Date d'inscription: 20-11-2008
Messages: 1118
Pépites: 4,296,080,204
Banque: 9,223,372,036,854,776,000
Site web

Re: Ajustage automatique des frames et des controls

Nephtis a écrit:

Je parle des X,Y,Width et Height des contrôles (pas de l'objet environnement)

pb_help a écrit:

The Height property specifies the height of a control or window in PowerBuilder units.
The Width property specifies the width of a control or window in PowerBuilder units.
The X property specifies the X coordinate of an object or control in PowerBuilder units.
The Y property specifies the Y coordinate of an object or control in PowerBuilder units.

newWidth et newHeight de l'évènement resize sont exprimés en PowerBuilder units

pb_help a écrit:

newwidth    Integer by value (the width of the client area of a window or DataWindow control in PowerBuilder units).
newheight    Integer by value (the height of the client area of a window or DataWindow control in PowerBuilder units).

Donc il faut bien convertir pour comparer ce qui est comparable

Oui, mais justement, au début de sont évènement resize(), il semble écraser les arguments en units avec des pixels

Code:

environment myEnv
GetEnvironment(myEnv)

newWidth=myEnv.ScreenWidth
newHeight=myEnv.ScreenHeight

mais il a aussi ceci au début du code, qui est un peu louche (il s'est peut-être trompété)

Code:

Integer newWidth1,newHeigth1

The best programs are the ones written when the programmer is supposed to be working on something else. - Melinda Varian

Mes réponses PB sur StackOverflow
http://stackoverflow.com/users/flair/317266.png

Hors ligne

 

#21 12-05-2015 09:23:49

Nephtis  
Bienfaiteur du site
Award: bf
Lieu: Longjumeau
Date d'inscription: 29-06-2007
Messages: 665
Pépites: 17,189,873,958
Banque: 9,223,372,036,854,776,000

Re: Ajustage automatique des frames et des controls

seki a écrit:

Nephtis a écrit:

Je parle des X,Y,Width et Height des contrôles (pas de l'objet environnement)

pb_help a écrit:

The Height property specifies the height of a control or window in PowerBuilder units.
The Width property specifies the width of a control or window in PowerBuilder units.
The X property specifies the X coordinate of an object or control in PowerBuilder units.
The Y property specifies the Y coordinate of an object or control in PowerBuilder units.

newWidth et newHeight de l'évènement resize sont exprimés en PowerBuilder units

pb_help a écrit:

newwidth    Integer by value (the width of the client area of a window or DataWindow control in PowerBuilder units).
newheight    Integer by value (the height of the client area of a window or DataWindow control in PowerBuilder units).

Donc il faut bien convertir pour comparer ce qui est comparable

Oui, mais justement, au début de sont évènement resize(), il semble écraser les arguments en units avec des pixels

Code:

environment myEnv
GetEnvironment(myEnv)

newWidth=myEnv.ScreenWidth
newHeight=myEnv.ScreenHeight

mais il a aussi ceci au début du code, qui est un peu louche (il s'est peut-être trompété)

Code:

Integer newWidth1,newHeigth1

Ah oui j'avais pas vu cette partie du code, il a du s’emmêler les pinceaux


Qui sème des problèmes, récolte des réponses.
PB 6.5 || ASE 12.5.4 || XP SP3

Hors ligne

 

#22 12-05-2015 10:41:21

legagneur  
Membre Geek
Lieu: Yaoundé
Date d'inscription: 02-10-2013
Messages: 81
Pépites: 395
Banque: 0

Re: Ajustage automatique des frames et des controls

Nephtis a écrit:

seki a écrit:

Nephtis a écrit:

Je parle des X,Y,Width et Height des contrôles (pas de l'objet environnement)

newWidth et newHeight de l'évènement resize sont exprimés en PowerBuilder units

Donc il faut bien convertir pour comparer ce qui est comparable

Oui, mais justement, au début de sont évènement resize(), il semble écraser les arguments en units avec des pixels

Code:

environment myEnv
GetEnvironment(myEnv)

newWidth=myEnv.ScreenWidth
newHeight=myEnv.ScreenHeight

mais il a aussi ceci au début du code, qui est un peu louche (il s'est peut-être trompété)

Code:

Integer newWidth1,newHeigth1

Ah oui j'avais pas vu cette partie du code, il a du s’emmêler les pinceaux

Nephtis, après tes remarques sur la conversion, j'ai pris le soin de mettre à jour le code en convertissant les pixels en Unit.
Seki, la remarque sur la déclaration de newwidth1 et newheight1 sont fondés, mais je ne l'ai pas utilisé dans la suite du code, j'ai déjà pris le soin de les enlever. Merci

Dernière modification par legagneur (12-05-2015 10:42:30)

Hors ligne

 

#23 12-05-2015 11:03:46

seki  
0x73656B69
Award: bf
Lieu: Laquenexy & Luxembourg
Date d'inscription: 20-11-2008
Messages: 1118
Pépites: 4,296,080,204
Banque: 9,223,372,036,854,776,000
Site web

Re: Ajustage automatique des frames et des controls

legagneur a écrit:

Nephtis, après tes remarques sur la conversion, j'ai pris le soin de mettre à jour le code en convertissant les pixels en Unit.
Seki, la remarque sur la déclaration de newwidth1 et newheight1 sont fondés, mais je ne l'ai pas utilisé dans la suite du code, j'ai déjà pris le soin de les enlever. Merci

Les variables locales non utilisées, ce n'est pas grave. Par contre je faisais remarquer que localement dans ton évènement resize(), tu masquais les paramètres de l'évènement qui te donnent la nouvelle taille de l'objet en units par la taille de l'écran (en pixels), qui ne varie pas... La logique est un peu bizarre.

De plus, juste pour chipoter, recalculer le ratio en interrogeant l'environnement pour connaître la taille de l'écran à chaque évènement resize() c'est peu performant, tu ne devrais calculer ce ratio qu'à la création ou open() de l'objet, voir une fois à l'ouverture de l'application, pour ce genre de trucs, une variable globale calculée une seule fois, ça passe

Alors ça donne quoi maintenant ?

Dernière modification par seki (12-05-2015 11:05:21)


The best programs are the ones written when the programmer is supposed to be working on something else. - Melinda Varian

Mes réponses PB sur StackOverflow
http://stackoverflow.com/users/flair/317266.png

Hors ligne

 

#24 14-05-2015 08:18:17

legagneur  
Membre Geek
Lieu: Yaoundé
Date d'inscription: 02-10-2013
Messages: 81
Pépites: 395
Banque: 0

Re: Ajustage automatique des frames et des controls

Bonjour,
Je doit avouer que ce bout de code me donne les insomnies.
J'ai essayé avec la recursivité, mais PowerBuilder Bugue et nous sommes obligés d'arrêter le logiciel et de relancer.
Je qui me gêne le plus c'est que je n'arrive pas à comprendre la nature du problème.
D'après vous pourquoi, je n'ai pas de très bon résultats?

Bonne journée et bonne fête

Hors ligne

 

#25 15-05-2015 13:31:57

Nephtis  
Bienfaiteur du site
Award: bf
Lieu: Longjumeau
Date d'inscription: 29-06-2007
Messages: 665
Pépites: 17,189,873,958
Banque: 9,223,372,036,854,776,000

Re: Ajustage automatique des frames et des controls

J'ai testé en local et effectivement il y avait un petit problème de conception.
On ne recalculait pas les dimensions a partir des dimensions originales, il fallait donc les sauvegarder lors de l'initialisation de la fenêtre.

Code: pb

// Variables d'instance
  boolean              i_bOpenFini = False
  Long                i_lScreenWidth
  Long                i_lScreenHeight
  String              i_sObjects[] // Ne sers pas au final
  Long                i_lX[]
  Long                i_lY[]
  Long                i_lWidth[]
  Long                i_lHeight[]
  Long                i_lNbObjects = 0

Code: pb

//A la fin de l'évenement open
i_bOpenFini = True
i_lScreenWidth = this.Width
i_lScreenHeight = this.Height



Datawindow ldw_datawindow
// ... et les autres types d'objets

Integer nb_controles
Integer i=1

nb_controles = UpperBound(this.Control ) // Nombre de contrôles sur la fenêtre


For i=1 To nb_controles
  // Si c'est une datawindow
  If (TypeOf(this.Control[i]) = Datawindow!) Then
    ldw_datawindow = this.Control[i]
    i_lNbObjects ++
    i_sObjects[i_lNbObjects] = "Datawindow"
    i_lX[i_lNbObjects] = ldw_datawindow.X
    i_lY[i_lNbObjects] = ldw_datawindow.Y
    i_lWidth[i_lNbObjects] = ldw_datawindow.Width
    i_lHeight[i_lNbObjects] = ldw_datawindow.Height
  End If
    
  // ... et les autres types d'objets

Code: pb

//Dans l'evenement resize
Decimal{2} ratio_largeur // 2 chiffres après la virgule pour l'exemple mais on peut bien sur mettre plus
Decimal{2} ratio_hauteur // 2 chiffres après la virgule pour l'exemple mais on peut bien sur mettre plus
Integer nb_controles
Integer i=1

// Liste des types d'objets possibles sur la fenêtre
Datawindow ldw_datawindow
// ... et les autres types d'objets

If i_bOpenFini = True Then // On s'assure qu'on a bien fini l'évenement open

  ratio_largeur = newWidth / i_lScreenWidth
  ratio_hauteur = newHeight / i_lScreenHeight
  nb_controles = UpperBound(i_sObjects ) // Nombre de contrôles sur la fenêtre
  
  
  For i=1 To nb_controles
    // Si c'est une datawindow
    If (TypeOf(this.Control[i]) = Datawindow!) Then
     ldw_datawindow = this.Control[i]
     ldw_datawindow.X = i_lX[i] * ratio_largeur
     ldw_datawindow.Width = i_lWidth[i] * ratio_largeur
     ldw_datawindow.Y = i_lY[i] * ratio_hauteur
     ldw_datawindow.Height = i_lHeight[i] * ratio_hauteur
    End If
    
  // ... et les autres types d'objets
  Next
End If

Qui sème des problèmes, récolte des réponses.
PB 6.5 || ASE 12.5.4 || XP SP3

Hors ligne

 

Pied de page des forums

Propulsé par FluxBB 1.2.22