Pas de problème (pb), que du PowerBuilder (PB) ^^

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 08-02-2007 22:24:59

Marcus  
Membre Geek
Lieu: Namur
Date d'inscription: 20-06-2006
Messages: 39
Pépites: 258
Banque: 0

[RESOLU] Ouverture d'une window "liée" à un champ

Bonjour à tous,

J'ai un change request un peu particulier de la part d'un client.
Il voudrait, pour certains champs, avoir la possibilité de faire un choix dans une window.
Les champs en question sont en général des varchar ou long varchar. La solution drop down n'a
pas été retenue.
La window serait donc automatiquement ouverte lors de l'itemfocuschanged. les conditions
pour ouvrir la window ou les données n'ont pas d'intérêt... ici.

Mon problème consiste à ouvrir la window à proximité de du champ, je dirais même de manière
"juxtaposée" par rapport au champ, soit à droite, soit à gauche si nécessaire. Pas question ici
de positionner la window par rapport au pointeur de la souris... ce serait trop facile, mais bien
par rapport à un champ.

Quelqu'un a-t-il déjà fait ce genre de truc ?
Merci pour vos idées

Hors ligne

 

#2 09-02-2007 07:38:02

erasorz  
Admin
Lieu: Babylone
Date d'inscription: 23-11-2006
Messages: 5121
Pépites: 97,197
Banque: 2,147,483,647

Re: [RESOLU] Ouverture d'une window "liée" à un champ

Salut,

tu peux facilement récupérer la postion et la dimension de ton champ :

Code: pb

dw_control.Object.controlname.X
dw_control.Object.controlname.Y
dw_control.Object.controlname.Width
dw_control.Object.controlname.Height

ensuite grâce à ces valeurs tu devrais être en mesure de positionner ta fenêtre .


N'envoyez jamais un humain faire le travail d'un programme.

Hors ligne

 

#3 09-02-2007 10:52:45

Marcus  
Membre Geek
Lieu: Namur
Date d'inscription: 20-06-2006
Messages: 39
Pépites: 258
Banque: 0

Re: [RESOLU] Ouverture d'une window "liée" à un champ

Bien sur... heu, et merci.
C'est une bonne piste, mais on obtient ainsi les coordonnées du champ dans la datawindow.
La window, par contre est positionnée par rapport au workspace.
Y aurait-il une possibilité de trouver les coordonnées de la dw facilement sachant qu'elle peut
être dans un tabpage qui est dans un tab qui est dans un tabpage qui est .....

Hors ligne

 

#4 09-02-2007 11:01:41

pick ouic  
La bourse ou la vie ^^
Award: gearotter
Lieu: Massy-Verrières
Date d'inscription: 29-05-2006
Messages: 4647
Pépites: 912
Banque: 2,147,483,647
Site web

Re: [RESOLU] Ouverture d'une window "liée" à un champ

tu ne peux pas faire le meme systeme que le popmenu ?

tu sais quand on clique sur le bouton droite de la souris, tu vois apparaitre le popmenu juste à l'endroit...

juste une piste...


Connaitre son ignorance est une grande part de la connaissance.
http://animegifs.free.fr/anime/mazinger/mazinger.gif

Hors ligne

 

#5 09-02-2007 11:10:54

Marcus  
Membre Geek
Lieu: Namur
Date d'inscription: 20-06-2006
Messages: 39
Pépites: 258
Banque: 0

Re: [RESOLU] Ouverture d'une window "liée" à un champ

Oui, j'y avais pensé aussi.
Tout est d'ailleurs codé, par exemple dans l'event rbuttonup de l'objet pfc_u_dw.

Mais, le but étant un encodage rapide en se passant le plus possible de la souris,
çà ne m'arrange pas. Ca m'énerve... Je ne vois pas à priori le moyen de trouver
les coordonnées d'un contrôle dans une window frame.

Sauf alors, remonter dans tous les "conteneurs" du contrôle et récupérer toutes les
coordonnées, mais çà me semble fastidiueux.

Y a pas des API pour çà ?

Hors ligne

 

#6 09-02-2007 11:16:42

erasorz  
Admin
Lieu: Babylone
Date d'inscription: 23-11-2006
Messages: 5121
Pépites: 97,197
Banque: 2,147,483,647

Re: [RESOLU] Ouverture d'une window "liée" à un champ

Marcus a écrit:

Sauf alors, remonter dans tous les "conteneurs" du contrôle et récupérer toutes les
coordonnées, mais çà me semble fastidiueux.

je ne connais pas de méthode plus directe
mais c'est pas si fastidieux que ça par récursivité et controle du type de l'objet
(x,y) du controle dans la dw
(x,y) de la dw dans son parent (tabpage,page)
ainsi de suite par récursivité sur le parent jusqu'à la fenêtre ?


N'envoyez jamais un humain faire le travail d'un programme.

Hors ligne

 

#7 09-03-2007 14:20:17

erasorz  
Admin
Lieu: Babylone
Date d'inscription: 23-11-2006
Messages: 5121
Pépites: 97,197
Banque: 2,147,483,647

Re: [RESOLU] Ouverture d'une window "liée" à un champ

--------------------------------------------------------------------
Bonjour, peut-on considérer que le problème est Résolu ?
--------------------------------------------------------------------


N'envoyez jamais un humain faire le travail d'un programme.

Hors ligne

 

#8 16-03-2007 10:59:27

Marcus  
Membre Geek
Lieu: Namur
Date d'inscription: 20-06-2006
Messages: 39
Pépites: 258
Banque: 0

Re: [RESOLU] Ouverture d'une window "liée" à un champ

Effectivement, c'était pas très compliqué. C'est même assez simple.
Il s'agit donc de trouver la position d'une datawindow dans une window,
sachant que la datawindow peut être placée directement dans la window ou dans un tabpage
qui est dans un tab qui est dans un tabpage qui est ....

Le code se trouve dans une fonction qui a 2 arguments al_x et al_y passés par référence:

Code: pb

powerobject  lpo_parent
tab    ltab_tab
userobject    luo_uo
w_ancestor  lw_window

// Get positions in the parent object
al_x = This.X
al_y = This.Y
lpo_parent = This.GetParent()

// Loop getting the parent of the object until it is of type window!
Do while IsValid (lpo_parent) 
  If lpo_parent.TypeOf () <> Window! Then
    Choose Case TypeOf (lpo_parent)
      Case Tab!
        ltab_tab = lpo_parent
        al_x = al_x + ltab_tab.X
        al_y = al_y + ltab_tab.Y
      Case UserObject!
        luo_uo = lpo_parent
        al_x = al_x + luo_uo.X
        al_y = al_y + luo_uo.Y        
    End Choose
    lpo_parent = lpo_parent.GetParent()
  Else
    lw_window = lpo_parent
    al_x = al_x + lw_window.WorkSpaceX ()
    al_y = al_y + lw_window.WorkSpaceY ()
    Exit
  End if
Loop
Return 1

Hors ligne

 

#9 16-03-2007 11:00:51

pick ouic  
La bourse ou la vie ^^
Award: gearotter
Lieu: Massy-Verrières
Date d'inscription: 29-05-2006
Messages: 4647
Pépites: 912
Banque: 2,147,483,647
Site web

Re: [RESOLU] Ouverture d'une window "liée" à un champ

encore merci pour ce script


Connaitre son ignorance est une grande part de la connaissance.
http://animegifs.free.fr/anime/mazinger/mazinger.gif

Hors ligne

 

#10 16-03-2007 12:02:27

erasorz  
Admin
Lieu: Babylone
Date d'inscription: 23-11-2006
Messages: 5121
Pépites: 97,197
Banque: 2,147,483,647

Re: [RESOLU] Ouverture d'une window "liée" à un champ

bravo et !


N'envoyez jamais un humain faire le travail d'un programme.

Hors ligne

 

Pied de page des forums

Propulsé par FluxBB 1.2.22