PC SOFT

GRUPOS DE DISCUSSÃO PROFISSIONAL
WINDEVWEBDEV e WINDEV Mobile

Inicio → WINDEV 2024 → SourisPosX  inexistant  sous Linux... comment faire.
SourisPosX inexistant sous Linux... comment faire.
Iniciado por Jean philippe, jan., 08 2019 9:28 AM - 6 respostas
Membro registado
80 mensagems
Popularité : +4 (4 votes)
Publicado em janeiro, 08 2019 - 9:28 AM
Je dois récupérer la position du curseur souris dans un champ image.. et j'essaye de faire un portage sous Linux d'une application médicale à diffusion internationale. Ce serait une appli linux windev dispo pour tout le monde..
Malheureusement, les fonctions SourisPosX et SourisPosY n'existe pas pour Linux. .. qui est le seul obstacle au portage.
A moins qu'il existe une solution équivalente pour Linux ... ?
>Merci de m'avoir lu.
Membro registado
80 mensagems
Popularité : +4 (4 votes)
Publicado em janeiro, 08 2019 - 2:29 PM
"no answer no solution, it's too bad " ;-)>
Membro registado
962 mensagems
Popularité : +183 (185 votes)
Publicado em janeiro, 08 2019 - 5:29 PM
hello,
je ne sais pas si cela fonctionne toujours mais regarde ma dernière réponse ici :
https://forum.pcsoft.fr/fr-FR/pcsoft.fr.windev/139105-wd16-soucis-linux-144547/read.awp

--
>Ami calmant, J.P
Mensagem modificada, janeiro, 08 2019 - 5:32 PM
Membro registado
80 mensagems
Popularité : +4 (4 votes)
Publicado em janeiro, 09 2019 - 12:13 PM
Merci pour cette réponse. Je ne connais pas Java, Le but est que l'installation soit très facile et fiable, (sur Linux ça prend 2 secondes), Avec des couches supplémentaires, on s'éloigne de la simplicité. C'est dommage, parce que face à l'usine à gaz radioactif Windows 10 , Linux parait d'une simplicité sympathique. Et quelques applications complètes et en diffusion libre développées avec Windev feraient une très belle pub pour PCsoft. (Windev pourrait être un outil extraordinaire pour les linux professionnels).

>Bien cordialement
Publicado em janeiro, 11 2019 - 6:03 PM
Bonjour,

Voici un exemple de code qui permet de récupérer la position de la souris par rapport à la fenêtre qui a le focus.
Ce code nécessite xdotool (installable avec : sudo apt-get install xdotool)

nHandleFenCouranteest un entiersur8octets
nXSouris,nYSourissont desentiers
nXFen,nYFen,nLargeurFen,nHauteurFensont desentiers
sRésCmdest une chaîne

//Handle de la fenêtre courante
nHandleFenCourante=ExécuteCommande("xdotool getactivewindow")

//Position et dimensions de la fenêtre
sRésCmd=ExécuteCommande([
unset x y w h
eval $(xwininfo -id $(xdotool getactivewindow) | \
sed -n -e "s/^ \+Absolute upper-left X: \+\([0-9]\+\).*/x=\1/p" \
-e "s/^ \+AbsoluteUpper-LeftY: \+\([0-9]\+\).*/y=\1/p" \
-e "s/^ \+Width: \+\([0-9]\+\).*/w=\1/p" \
-e "s/^ \+Height: \+\([0-9]\+\).*/h=\1/p" )
echo $x,$y,$w,$h
])
(nXFen, nYFen, nLargeurFen, nHauteurFen) = (ExtraitChaîne(sRésCmd,1,","), ExtraitChaîne(sRésCmd,2,","), ExtraitChaîne(sRésCmd,3,","), ExtraitChaîne(sRésCmd,4,","))

//Position de la souris par rapport à l'écran
sRésCmd= ExécuteCommande("eval $(xdotool getmouselocation--shell); echo $X,$Y")
(nXSouris,nYSouris) = (ExtraitChaîne(sRésCmd,1,","),ExtraitChaîne(sRésCmd,2,","))

LIB_Infos=""
LIB_Infos+= [RC] +"Handle de la fenêtre en cours : "+nHandleFenCourante
LIB_Infos+= [RC] +"Rectangle de la fenêtre : "+nXFen+","+nYFen+" -- "+nLargeurFen+"x"+nHauteurFen
LIB_Infos+= [RC] +"Position de la souris par rapport a l'écran : "+nXSouris+","+nYSouris
LIB_Infos+= [RC] +"Position de la souris par rapport a la fenêtre : "+(nXSouris-nXFen)+","+(nYSouris-nYFen)

PROCEDURE INTERNEExécuteCommande(sCommand)
sFicResest une chaîne=fRepExe()+[fSep]+"res.txt"
sFicCmdest une chaîne=fRepExe()+[fSep]+"cmd.sh"
fSupprime(sFicCmd)
fSupprime(sFicRes)

sCommand=ChaîneConstruit([
# save stdout and stderr to file descriptors 3 and 4, then redirect them to sFicRes
exec 3>&1 4>&2 >%1 2>&1

#Exécution de la commande passée en paramètre
%2

# restore stdout and stderr
exec 1>&3 2>&4
],sFicRes,sCommand)
fSauveTexte(sFicCmd,Remplace(sCommand,RC,Caract(10)))
SI PASLanceAppli("/bin/chmod +x "+sFicCmd,exeActif,exeBloquant)ALORS
dbgSortieStandard(ErreurInfo)
FIN
SI PASLanceAppli("/bin/bash "+sFicCmd,exeActif,exeBloquant)ALORS
dbgSortieStandard(ErreurInfo)
FIN
sContentest une chaîne=fChargeTexte(sFicRes)
fSupprime(sFicCmd)
fSupprime(sFicRes)
RENVOYERsContent
FIN


>Bons développements !
Membro registado
962 mensagems
Popularité : +183 (185 votes)
Publicado em janeiro, 12 2019 - 9:31 AM
hello,
comme je n'avais jamais vu dans des discussions windev quelqu'un utiliser une dll linux (.so) j'ai voulu essayé d'en fabriquer une pour lire la position de la souris dans une fenêtre et en absolu sur l'écran.
1 - Avec codeblocks sous un linux Centos 7 j'ai fabriqué une dll (libMaBiblioWD.so) avec deux fonctions : une pour lire les coordonnées du curseur dans la fenêtre active et l'autre pour lire les coordonnées du curseur sur l'écran. J'ai utilisé la bibliothèque X11 pour réaliser cela .
2 - Comme j'ai une jurassique version de windev (16) qui ne connaissait que du linux 32 bits j'ai été obligé de fabriquer cette dll en 32 bits.
3 - D'autre part sous linux j'ai des soucis (je ne sais pas si cela est dû à ma version de windev) :
- Je n'arrive pas à déclencher un événement sur un clic image (j'ai alors rusé en mettant un bouton transparent).
- Je n'ai pas de fichier trace généré dans le répertoire temporaire en utilisant la fonction trace
Si quelqu'un pouvait me confirmer ces deux problèmes.
Voici avec ma dll le code qui affiche la position curseur sur clic dans windev :
ProcedureAffPosition()
varX,varYsont desentiers
AppelDLL32("libMaBiblioWD.so","PositionSourisRelative",&varX,&varY)
CoordX=varX-Image1..X
CoordY=varY-Image1..Y


et voici le résultat sous Linux - Centos 7






--
>Ami calmant, J.P
Mensagem modificada, janeiro, 12 2019 - 9:32 AM
Membro registado
80 mensagems
Popularité : +4 (4 votes)
Publicado em janeiro, 12 2019 - 11:36 PM
yen a qui sont forts quand même .....:D>