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 21-07-2009 16:00:10

Curios  
Membre Geek
Date d'inscription: 27-04-2007
Messages: 24
Pépites: 149
Banque: 0

Déterminer type d'un objet automatiquement

Bonjour,

Depuis des années nous nous amusons à agrandir nos différentes applications par rapport à la résolution de l'écran.
Nous sommes passés de fenêtres en 800 par 600 à 1024 à 768 et ainsi de suite.
Je ne souhaite par faire le tour de toutes mes fenêtres le but serait d'agrandir dynamiquement tous les composants de mon application.

J'ai eu l'idée de créer un objet non visuel avec une fonction setresize(any uo_objet) qui me permettrais de récupérer le type de l'objet (bouton, fenêtre, datawindow et d'utiliser ensuite les attributs X, Y...

Le problème c'est que je n'arrive pas à récupérer le type window par exemple.
Je ne vois pas comment utiliser dans ce cas la méthode typeof()

Code: pb

String ls_nomclass, ls_typeobjet
ls_nomclass = ClassName(ao_element)

Infos:
Powerbuilder 9.0 sous windows xp

Hors ligne

 

#2 22-07-2009 08:41:10

JCZ  
Builder Power
Award: bf
Lieu: 75019 paris
Date d'inscription: 21-05-2007
Messages: 1724
Pépites: 496,453,703,213
Banque: 9,223,372,036,854,776,000

Re: Déterminer type d'un objet automatiquement

Salut

exemple de code d'une fonction avec comme arg de reference un userobject usob

Code: pb

integer i, j, iMax, jMax
dec HRatio, VRatio
DragObject drob
DrawObject draw
line ln
rectangle rt
roundrectangle rr
oval ov
Tab ong
UserObject usob2

//Si fenêtre pas ouverte, mémo de la taille des objets
if i_iObjectRszMax = 0 Then
  iMax = UpperBound(usob.Control)
  For i=1 to iMax
    i_iObjectRsz++
    Choose Case usob.Control[i].TypeOf()
      Case line! 
        ln = usob.Control[i]
        i_lObjectWidth[i_iObjectRsz] = ln.EndX
        i_lObjectHeight[i_iObjectRsz] = ln.EndY
        i_lObjectX[i_iObjectRsz] = ln.BeginX
        i_lObjectY[i_iObjectRsz] = ln.BeginY
        Continue
      Case roundrectangle! 
        rr = usob.Control[i]
        i_lObjectWidth[i_iObjectRsz] = rr.width
        i_lObjectHeight[i_iObjectRsz] = rr.Height
        i_lObjectX[i_iObjectRsz] = rr.X
        i_lObjectY[i_iObjectRsz] = rr.Y
        Continue
      Case rectangle! 
        rt = usob.Control[i]
        i_lObjectWidth[i_iObjectRsz] = rt.width
        i_lObjectHeight[i_iObjectRsz] = rt.Height
        i_lObjectX[i_iObjectRsz] = rt.X
        i_lObjectY[i_iObjectRsz] = rt.Y
        Continue
      Case oval! 
        ov = usob.Control[i]
        i_lObjectWidth[i_iObjectRsz] = ov.width
        i_lObjectHeight[i_iObjectRsz] = ov.Height
        i_lObjectX[i_iObjectRsz] = ov.X
        i_lObjectY[i_iObjectRsz] = ov.Y
        Continue
      Case Else
        drob = usob.Control[i]
        i_lObjectWidth[i_iObjectRsz] = drob.Width
        i_lObjectHeight[i_iObjectRsz] = drob.Height
        i_lObjectX[i_iObjectRsz] = drob.X
        i_lObjectY[i_iObjectRsz] = drob.Y
        if drob.TypeOf() = UserObject! Then
          usob2 = drob
          wf_Resizeuo(usob2)
        else
          if drob.TypeOf() = Tab! Then
            ong = drob
            jMax = UpperBound(ong.Control)
            For j = 1 to jMax
              usob2 = ong.Control[j]
              wf_Resizeuo(usob2)
            Next
          end if
        end if
    End choose
  Next
  Return
end if

//Si mémo déjà fait, on resize sauf si ratio < 1
if Height < i_iHeight Then
  VRatio = 1
else
  VRatio = Height / i_iHeight
end if
if Width < i_iWidth Then
  HRatio = 1
else
  HRatio = Width / i_iWidth
end if

iMax = UpperBound(usob.Control)
For i=1 to iMax
  i_iObjectRsz++
  Choose Case usob.Control[i].TypeOf()
    Case UserObject!
      drob = usob.Control[i]  
      drob.Move(i_lObjectX[i_iObjectRsz] * HRatio, i_lObjectY[i_iObjectRsz] * VRatio)
      drob.Resize(i_lObjectWidth[i_iObjectRsz] * HRatio, i_lObjectHeight[i_iObjectRsz] * VRatio)
      usob2 = drob
      wf_Resizeuo(usob2)
    Case Tab!
      drob = usob.Control[i]  
      drob.Move(i_lObjectX[i_iObjectRsz] * HRatio, i_lObjectY[i_iObjectRsz] * VRatio)
      drob.Resize(i_lObjectWidth[i_iObjectRsz] * HRatio, i_lObjectHeight[i_iObjectRsz] * VRatio)
      ong = drob
      jMax = UpperBound(ong.Control)
      For j = 1 to jMax
        usob2 = ong.Control[j]
        wf_Resizeuo(usob2)
      Next
    Case CommandButton!, PictureButton!, RadioButton!, CheckBox!, StaticText!, &
      Picture!, DropDownListBox!, DropDownPictureListBox!
      drob = usob.Control[i]  
      drob.Move(i_lObjectX[i_iObjectRsz] * HRatio, i_lObjectY[i_iObjectRsz] * VRatio)
    Case SingleLineEdit!, EditMask!, HScrollBar!
      drob = usob.Control[i]  
      drob.Move(i_lObjectX[i_iObjectRsz] * HRatio, i_lObjectY[i_iObjectRsz] * VRatio)
      drob.Width = i_lObjectWidth[i_iObjectRsz] * HRatio
    Case VScrollBar!
      drob = usob.Control[i]  
      drob.Move(i_lObjectX[i_iObjectRsz] * HRatio, i_lObjectY[i_iObjectRsz] * VRatio)
      drob.Height = i_lObjectHeight[i_iObjectRsz] * VRatio
    Case Line!
      ln = usob.Control[i]
      ln.BeginX = i_lObjectX[i_iObjectRsz] * HRatio
      ln.BeginY = i_lObjectY[i_iObjectRsz] * VRatio
      ln.EndX = i_lObjectWidth[i_iObjectRsz] * HRatio
      ln.EndY = i_lObjectHeight[i_iObjectRsz] * VRatio
    Case roundrectangle!
      rr = usob.Control[i]
      rr.Move(i_lObjectX[i_iObjectRsz] * HRatio, i_lObjectY[i_iObjectRsz] * VRatio)
      rr.Resize(i_lObjectWidth[i_iObjectRsz] * HRatio, i_lObjectHeight[i_iObjectRsz] * VRatio)
    Case rectangle!
      rt = usob.Control[i]
      rt.Move(i_lObjectX[i_iObjectRsz] * HRatio, i_lObjectY[i_iObjectRsz] * VRatio)
      rt.Resize(i_lObjectWidth[i_iObjectRsz] * HRatio, i_lObjectHeight[i_iObjectRsz] * VRatio)
    Case oval!
      ov = usob.Control[i]
      ov.Move(i_lObjectX[i_iObjectRsz] * HRatio, i_lObjectY[i_iObjectRsz] * VRatio)
      ov.Resize(i_lObjectWidth[i_iObjectRsz] * HRatio, i_lObjectHeight[i_iObjectRsz] * VRatio)
    Case Else
      drob = usob.Control[i]  
      drob.Move(i_lObjectX[i_iObjectRsz] * HRatio, i_lObjectY[i_iObjectRsz] * VRatio)
      drob.Resize(i_lObjectWidth[i_iObjectRsz] * HRatio, i_lObjectHeight[i_iObjectRsz] * VRatio)
  End Choose
Next

Face à l'agression, la puissance de l'intelligence

Hors ligne

 

Pied de page des forums

Propulsé par FluxBB 1.2.22