Configurer un objet sans écrire le code habituel

Il déplace les objets, il ne les met pas à l’échelle

Pour cela, le Locking mechanism suffit dans bien des cas.

Il peut aussi les mettre à l’échelle si tu l’accroche à gauche ET à droite la largeur change et avec haut ET BAS la hauteur change au redimensionnement de le fenêtre

Lock sur les quatre côtés ne fonctionne pas bien. C’est même pour cela que j’ai développé RubberViews au départ pour mes besoins propres.

1 Like

si on lock les deux cotés d’un controlitem, il le met à l’echelle, en fait il l’agrandit de la même quantité que ce dont on agrandit la fenetre
95% de ton programme peut être traité de cette facon. il y a quelques exceptions où il faut faire quelques lignes de programme, ou utiliser rubberview.

1 Like

Tu devrais voir la listBox en placant chaque carte dans une cellule
La LB serait completement invisible

Merci pour vos infos…

L’alignement par défaut de Xojo ne me plaisait pas et j’avais écrit cette Method que j’appelle de la manière suivante :

DecPosCtrl(Self)
(si je l’appelle de la fenêtre elle même, sinon tu mets la fenêtre en question).

Et voilà la Method qui boucle sur les éléments de l’interface. Peut-être que ça peut t’aider à peaufiner ce que tu souhaites faire :

Dim CeCtrl as DesktopControl
Dim CeRectCtrl as DesktopUIControl ' Ces DesktopUIControl n'ont pas la même position suivant compil Carbon ou Cocoa
#If TargetCocoa Then
  Const DecTextField as Int16 = -1
  Const DecTextArea as Int16 = 0
  Const DecLabel as Int16 = 0 ' Avant j'avais mis -1, puis 1, puis après 0
  Const DecSlider as Int16 = 2
  Const DecPrgBar as Int16 = 0
  Const DecUpDwnArrws as Int16 = -1
  ' #ElseIf TargetCarbon Then ' Voir TypeCompil, je fais autrement pour voir plateforme
  ' Const DecTextField as Int16 = 0
  ' Const DecTextArea as Int16 = 0
  ' Const DecLabel as Int16 = 0
  ' Const DecSlider as Int16 = 2
  ' Const DecPrgBar as Int16 = 3
  ' Const DecUpDwnArrws as Int16 = 0
#ElseIf TargetWindows Then
  Const DecTextField as Int16 = 0
  Const DecTextArea as Int16 = 0
  Const DecLabel as Int16 = 0
  Const DecSlider as Int16 = 2
  Const DecPrgBar as Int16 = 3
  Const DecUpDwnArrws as Int16 = 0
#EndIf

For Each CeCtrl in CetteFenetr.Controls
  ' MessageBox CeCtrl.Name + EndOfLine + str(CeCtrl.Index) + EndOfLine + "DesktopUIControl ? : " + CStr(CeCtrl isa DesktopUIControl)
  If CeCtrl isa DesktopUIControl Then
    If CeCtrl isa DesktopTextField Then
      CeRectCtrl = DesktopUIControl(CeCtrl) ' Et NON  CeCtrl
      CeRectCtrl.Top = CeRectCtrl.Top + DecTextField
    ElseIf CeCtrl isa DesktopTextArea Then
      CeRectCtrl = DesktopUIControl(CeCtrl) ' Et NON  CeCtrl
      CeRectCtrl.Top = CeRectCtrl.Top + DecTextArea
    ElseIf CeCtrl isa DesktopLabel Then
      CeRectCtrl = DesktopUIControl(CeCtrl) ' Et NON  CeCtrl
      CeRectCtrl.Top = CeRectCtrl.Top + DecLabel
    ElseIf CeCtrl isa DesktopSlider Then
      CeRectCtrl = DesktopUIControl(CeCtrl) ' Et NON  CeCtrl
      CeRectCtrl.Top = CeRectCtrl.Top + DecSlider
    ElseIf CeCtrl isa DesktopProgressBar Then
      CeRectCtrl = DesktopUIControl(CeCtrl) ' Et NON  CeCtrl
      CeRectCtrl.Top = CeRectCtrl.Top + DecPrgBar
    ElseIf CeCtrl isa DesktopUpDownArrows Then
      CeRectCtrl = DesktopUIControl(CeCtrl) ' Et NON  CeCtrl
      CeRectCtrl.Top = CeRectCtrl.Top + DecUpDwnArrws
    End If ' TextField , (TextArea) , Label , Slider , ProgressBar, UpDownArrows
  End If ' DesktopUIControl
Next CeCtrl

Super je vais tester, je te dis

il manque des éléments d’info comme par exemple j’ai mis le nom de la méthode ok mais le paramètre quelle type et quelle nom ?

Ah merde, désolé. La Method s’appelle DecPosCtrl et il faut passer en paramètre :
DecPosCtrl as DesktopWindow

Je réponds depuis mon tel, je ne suis plus devant l’ordi

j’ai mis : CetteFenetre as Window

mais le résultat c’est que le contenu ne ce redimensionne pas et au lâchement du bouton souris il y a une erreur qui fait planté l’app.

cela dis j’ai déjà fait a la dur les modification dans mes fenêtres ou il y avais besoin, donc j’en n’ai plus vraiment besoin

mais merci quand même, ta solution c’est celle que je préfère de toutes celle qui m’ont été proposé

Oui je me suis planté, il faut passer :
CetteFenetr as DesktopWindow
si tu es en API2 ou
CetteFenetr as Window
pour API1, auquel cas faut aussi changer les objets (DesktopLabel → Label , etc.)

Faut faire des essais, bon courage.

je garde ton code qui est un belle exemple d’inspiration pour mes prochains travaux, j’ai enfin un exemple pour ce genre de manipulation d’objet par le code.

Merci beaucoup pour ce code :slight_smile:

Hello Christian
you could have written

1/ Cela fonctionne peut être avec Control(Index)
2/ Tu peux peut être utiliser Control(Index)

Bye

Excuse moi Christian je pensais que le message etait privé !
jl