Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

WD12 - TableInfoXY

11 réponses
Avatar
I.G.LOG
Bonjour,

J'essaie depuis des heures de gérer un DND programmé dans une table
hierarchique; Au moment du lacher souris, je voudrais recuperer le n° de la
ligne survolé.
Je ne trouve aucun moyen. Voici les codes essayés:

PROCEDURE DNDLache()

// Recherche l'Index de ligne destination
lLigneFin = CurseurPos(cpClient)
// sans cpClient c'est pareil
lPosX est un entier = PoidsFaible(lLigneFin)
lPosY est un entier = PoidsFort(lLigneFin)
lLigneFin = TableInfoXY(TABLEDET,tiNumLigne,lPosX,lPosY) //
renvoie -1
Trace(lPosX,lPosY,lLigneFin)

ce code me renvoie toujours -1 ???


J'ai essayé plus simplement avec :

lLigneFin = TableInfoXY(TABLEDET,tiNumLigne,SourisPosX(),SourisPosY())
// renvoie 1

et là ca me renvoie toujours 1 !!!


merci de votre aide

10 réponses

1 2
Avatar
Pascal F
I.G.LOG avait écrit le 14/06/2008 :
Bonjour,

J'essaie depuis des heures de gérer un DND programmé dans une table hierarchique; Au moment du lacher souris, je voudrais
recuperer le n° de la ligne survolé.
Je ne trouve aucun moyen. Voici les codes essayés:

PROCEDURE DNDLache()

// Recherche l'Index de ligne destination
lLigneFin = CurseurPos(cpClient) // sans cpClient c'est pareil
lPosX est un entier = PoidsFaible(lLigneFin)
lPosY est un entier = PoidsFort(lLigneFin)
lLigneFin = TableInfoXY(TABLEDET,tiNumLigne,lPosX,lPosY) // renvoie -1
Trace(lPosX,lPosY,lLigneFin)

ce code me renvoie toujours -1 ???


J'ai essayé plus simplement avec :

lLigneFin = TableInfoXY(TABLEDET,tiNumLigne,SourisPosX(),SourisPosY()) // renvoie 1

et là ca me renvoie toujours 1 !!!


merci de votre aide



Je ne sais pas comment tu programmes ton DND, mais ce que j'ai remarqué c'est que si j'arrive sur la table avec le bouton de la
souris enfoncé, l'évènement de la table BoutonGaucheRelaché n'est pas effectué, par contre l'évènement survol marche. Ce que tu
peux essayer c'est de mettre à jour une variable globale dans l'évenement survol de ta table et dans ton DND lorsque tu laches le
bouton si ta variable est à -1 c'est que tu es en dehors de la table ou dans une partie vide de la table.

--
Pascal

Ne garder que le prénom pour me joindre
Avatar
I.G.LOG
>
Je ne sais pas comment tu programmes ton DND, mais ce que j'ai remarqué
c'est que si j'arrive sur la table avec le bouton de la souris enfoncé,
l'évènement de la table BoutonGaucheRelaché n'est pas effectué, par contre
l'évènement survol marche. Ce que tu peux essayer c'est de mettre à jour
une variable globale dans l'évenement survol de ta table et dans ton DND
lorsque tu laches le bouton si ta variable est à -1 c'est que tu es en
dehors de la table ou dans une partie vide de la table.

--
Pascal



Bonjour,
J'avais pensé à ça pour contourner le problème.

J'ai mis dans le code "Survol souris (WM_MOUSEMOVE) de TABLEDET" la ligne

gLigneFin = TableInfoXY(MoiMême,tiNumLigne,SourisPosX(),SourisPosY())

(gLigneFin est un entier global à la fenetre)

Mais dans mon code lacher souris, j'ai gLigneFin à la valeur de la 1ere
ligne sélectionnée... et pas celle qui correspond au lacher !!!!
Est-ce que le problème vient que c'est une table hierarchique ?
Je désespère

Encore merci pour ton aide
Avatar
I.G.LOG
Oublié de préciser que c'est un drag&drop sur la même table (déplacement de
lignes)
Avatar
Pascal F
I.G.LOG a couché sur son écran :

Je ne sais pas comment tu programmes ton DND, mais ce que j'ai remarqué c'est que si j'arrive sur la table avec le bouton de
la souris enfoncé, l'évènement de la table BoutonGaucheRelaché n'est pas effectué, par contre l'évènement survol marche. Ce
que tu peux essayer c'est de mettre à jour une variable globale dans l'évenement survol de ta table et dans ton DND lorsque
tu laches le bouton si ta variable est à -1 c'est que tu es en dehors de la table ou dans une partie vide de la table.

-- Pascal



Bonjour,
J'avais pensé à ça pour contourner le problème.

J'ai mis dans le code "Survol souris (WM_MOUSEMOVE) de TABLEDET" la ligne

gLigneFin = TableInfoXY(MoiMême,tiNumLigne,SourisPosX(),SourisPosY())

(gLigneFin est un entier global à la fenetre)

Mais dans mon code lacher souris, j'ai gLigneFin à la valeur de la 1ere ligne sélectionnée... et pas celle qui correspond au
lacher !!!!
Est-ce que le problème vient que c'est une table hierarchique ?
Je désespère

Encore merci pour ton aide



Si Ton DND est sur la même table essaye:
Pas d'évènement de définit dans la fenetre, mais sur la table hiérarchique active les évènement Bouton gauche enfoncé, survol de
la souris, bouton gauche relaché et mets les codes suivants:

Dans l'init de la fenetre:
eLigDeb est un entier
eLigFin est un entier

Bouton gauche enfoncé:
eInd est un entier
eInd=TableInfoXY(TABLEH_DOSSIERS,tiNumLigne,SourisPosX(),SourisPosY())
Multitâche()
eLigDeb=eInd
eLigFin=0

Survol de la souris:
eInd est un entier
eInd=TableInfoXY(TABLEH_DOSSIERS,tiNumLigne,SourisPosX(),SourisPosY())
Multitâche()
eLigFin=eInd

Bouton gauche relaché:
SI eLigFin>0 ET eLigDeb>0 ET eLigDeb<>eLigFin ALORS
Info("Départ="+eLigDeb,"Arrivée="+eLigFin)
FIN


Pour moi j'ai bien les bonnes infos avec la version 55n

--
Pascal

Ne garder que le prénom pour me joindre
Avatar
I.G.LOG
J'ai essayé sans plus de succès (code recopié à l'identique). Il ne me donne
rien dans "bouton gauche relaché" :-(
Je pense donc que le problème vient des tables hiérarchiques !! As tu fait
ces essais sur ce type de table ?
Encore merci
Avatar
I.G.LOG
suite de mes essais:

dans "selection d'une ligne de TABLEDET" j'ai le code suivant:
GereDetail()
qui me permet d'afficher certaines infos.

Si je met en commentaire ce code (il n'y a plus de code dans "selection
d'une ligne") ca marche.
Incroyable, si je laisse cet appel de focntion mais en mettant tout le code
de la fonction GereDetail() en commentaire, ca ne marche plus !!!
A devenir fou
Je vais envoyer une requete au ST

Merci de m'avoir répondu
Bon dev (je vais vite manger avant de poursuivre)
Phil
Avatar
Pascal F
I.G.LOG avait écrit le 14/06/2008 :
suite de mes essais:

dans "selection d'une ligne de TABLEDET" j'ai le code suivant:
GereDetail()
qui me permet d'afficher certaines infos.

Si je met en commentaire ce code (il n'y a plus de code dans "selection d'une ligne") ca marche.
Incroyable, si je laisse cet appel de focntion mais en mettant tout le code de la fonction GereDetail() en commentaire, ca ne
marche plus !!!
A devenir fou
Je vais envoyer une requete au ST

Merci de m'avoir répondu
Bon dev (je vais vite manger avant de poursuivre)
Phil



c'est quoi le code de GereDetail ?
j'ai mis une fonction GereDetail dans la sélection de ligne avec comme code de la foinction:
//
PROCEDURE GereDetail()

eInd est un entier
eInd=TableInfoXY(TABLEH_DOSSIERS,tiNumLigne,SourisPosX(),SourisPosY())

SI eInd>0 ALORS
txt_Saisie1=TABLEH_DOSSIERS.COL_Dossier[eInd]
FIN


et ça marche toujours chez moi.

--
Pascal

Ne garder que le prénom pour me joindre
Avatar
I.G.LOG
Je n'y comprend plus rien; la multiselection fonctionne aléatoirement, sans
que je comprenne pourquoi (parfois en gardant le bt gauche enfoncé et en me
deplacant j'ai bien le bandeau de selection sur plusieurs lignes, parfois
non)
La fonction GereDetail() permet de d'activer le DND, de gérer l'état des
boutons et du menu contextuel.
Mais même en l'ignorant complètement ca ne marche pas. Sauf dans un cas que
je n'arrive pas à trouver (combinaison de mode multiselection avec autre
chose ?! )

Fonction GereDetail()
lInd est un entier
lEtat est un entier = dndProgrammé
lRacine est une chaîne
lFeuille est une chaîne

lInd = TableRécupèreParent(TABLEDET)
SI lind <= 0 ALORS
SI lind = 0 ALORS
lracine = DESIGNDET
FIN
letat = dndInactif
SINON
lracine = DESIGNDET[lind]
lfeuille = DESIGNDET
SI lracine <> "Phases" ALORS
lEtat = dndInactif
FIN
FIN
TABLEDET..DndCible = lEtat
TABLEDET..DndSource = lEtat

// Boutons
GR_PHA..Etat = Actif
GR_MOUV..Visible = Faux
SELON TYPEDET
CAS "*"
MODIPPF..Etat = Grisé
SUPPPPF..Etat = Grisé
AJOUPPF..Etat = Actif
CAS "P"
CAS "h"
GR_MOUV..Visible = Vrai
FIN
// Menu contextuel
SI lracine = "" ALORS
TABLEDET..MenuContextuel = MenuContextuelDesactivé
RETOUR
SINON
TABLEDET..MenuContextuel = "PopupDET"
FIN
PopupDET.Copier..Visible = (lFeuille <> "" ET lFeuille <> "Général")
PopupDET.Coller..Visible = (gCopy <> "" ET lracine = "Phases")
PopupDET.Supprime..Visible = (lFeuille <> "" ET lfeuille <> "Général")
PopupDET.Ajoute..Visible = (TYPECAT <> "C" ET lracine <> "Phases")
Avatar
Pascal F
J'ai l'impression que tu compliques les choses.
Perso je ne gèrerai pas le DND avec du multisélection. J'utiliserai plutôt un interrupteur caché pour chaque ligne en mettant à
jour en demandant le copier par le menu contextuel ou le bouton (s'il y en a un), puis je déplerai les lignes en fonction de
l'état de l'interrupteur lors de l'utilisation du copier du menu contextuel ou du bouton correspondant. Il me semble que la
multisélection et le DND sont incompatibles, mais je peux me tromper.

--
Pascal

Ne garder que le prénom pour me joindre
Avatar
I.G.LOG
> J'ai l'impression que tu compliques les choses.
Perso je ne gèrerai pas le DND avec du multisélection. J'utiliserai plutôt
un interrupteur caché pour chaque ligne en mettant à jour en demandant le
copier par le menu contextuel ou le bouton (s'il y en a un), puis je
déplerai les lignes en fonction de l'état de l'interrupteur lors de
l'utilisation du copier du menu contextuel ou du bouton correspondant. Il
me semble que la multisélection et le DND sont incompatibles, mais je peux
me tromper.



Oui je pense qu'il faut s'orienter vers d'autres solutions; dommage car tout
fonctionnait... sauf le TableInfoXY(...) quand on relache le bouton de la
souris (j'ai tout essayé sans succès). J'ai vu dans l'aide que sourisposx()
et y() ne sont pas exploitables dans le code de sélection d'une ligne de
table: voilà peut-etre l'origine du problème, puisque dans le cas de d&d on
a bien sélectionné la 1ere ligne !! D'ailleurs, ca serait bien qu'on puisse
exploiter cette fonction dans tous les cas... je ne comprend pas pourquoi
"ils" ont vu la chose autrement.
En tous cas un grand merci de t'être préoccupé de ce probleme Pascal, et bon
dev
Phil
1 2