Page 1 sur 2
programme de gestionnaire de presse papier
Publié : sam. 28/août/2010 14:17
par swolf
bonjour
j'ai fait un programme d'historique de presse-papier qui est censé afficher en temps reel toutes les copies que j'ai effectuées.
j'ai utilisé stickywindows pour garder la fenetre en premier plan et les copies ne s'affichent dans ma liste que lorsque je passe ma souris sur la fenetre...
voici mon code:
Code : Tout sélectionner
#text= 0
#list=1
#button=2
Global elmnt1$=""
Global elmnt2$=""
Global elmnt3$=""
Global elmnt4$=""
Global elmnt5$=""
Global elmnt6$=""
Global elmnt7$=""
Global elmnt8$=""
Global elmnt9$=""
Global elmnt10$=""
ExamineDesktops()
ClearClipboard()
If OpenWindow(1,DesktopWidth(0)-180,DesktopHeight(0)-700, 170, 630, "GPP v.1.0")
StickyWindow(1, 1)
TextGadget(#text,60,10,200,50,"elements")
ListViewGadget(#list,10,30,150,300)
ButtonGadget(#button,50,400,70,30,"copier!")
Repeat
Texte$ = GetClipboardText()
If Texte$ <> elmnt1$ And Texte$ <>elmnt2$ And Texte$ <>elmnt3$ And Texte$ <> elmnt4$ And Texte$ <>elmnt5$ And Texte$ <>elmnt6$ And Texte$ <>elmnt7$ And Texte$ <>elmnt8$ And Texte$ <>elmnt9$ And Texte$ <>elmnt10$
If elmnt1$ = ""
elmnt1$ = Texte$
AddGadgetItem(#list,-1,elmnt1$)
ElseIf elmnt2$ = ""
elmnt2$ = Texte$
AddGadgetItem(#list,-1,elmnt2$)
ElseIf elmnt3$ = ""
elmnt3$ = Texte$
AddGadgetItem(#list,-1,elmnt3$)
ElseIf elmnt4$ = ""
elmnt4$ = Texte$
AddGadgetItem(#list,-1,elmnt4$)
ElseIf elmnt5$ = ""
elmnt5$ = Texte$
AddGadgetItem(#list,-1,elmnt5$)
ElseIf elmnt6$ = ""
elmnt6$ = Texte$
AddGadgetItem(#list,-1,elmnt6$)
ElseIf elmnt7$ = ""
elmnt7$ = Texte$
AddGadgetItem(#list,-1,elmnt7$)
ElseIf elmnt8$ = ""
elmnt8$ = Texte$
AddGadgetItem(#list,-1,elmnt8$)
ElseIf elmnt9$ = ""
elmnt9$ = Texte$
AddGadgetItem(#list,-1,elmnt9$)
ElseIf elmnt10$ = ""
elmnt10$ = Texte$
AddGadgetItem(#list,-1,elmnt10$)
EndIf
EndIf
elmnt_courant$ = GetGadgetText(#list)
event=WaitWindowEvent()
EventGadget = EventGadget()
Select EventGadget
Case #button
SetClipboardText(elmnt_courant$)
EndSelect
Until event=#PB_Event_CloseWindow
EndIf
quelqu'un a-t-il une solution!?
merci d'avance
p-s: le code est peut-etre un peu maladroit et tordu...

Re: programme de gestionnaire de presse papier
Publié : sam. 28/août/2010 14:29
par MLD
Salut
Chez moi tout est OK

Re: programme de gestionnaire de presse papier
Publié : sam. 28/août/2010 14:34
par Ollivier
DEUX solutions:
1) J'ai remplacé
par
2) Au lieu de remplacer, j'ai ajouté une durée de Timing à l'instruction WaitWindowEvent(n) (Cf documentation de cette instruction)
Code 1 (Remplacement de WaitWinEvent par un Delay+WinEvent )
Code : Tout sélectionner
#text= 0
#list=1
#button=2
Global elmnt1$=""
Global elmnt2$=""
Global elmnt3$=""
Global elmnt4$=""
Global elmnt5$=""
Global elmnt6$=""
Global elmnt7$=""
Global elmnt8$=""
Global elmnt9$=""
Global elmnt10$=""
ExamineDesktops()
ClearClipboard()
If OpenWindow(1,DesktopWidth(0)-180,DesktopHeight(0)-500, 170, 630, "GPP v.1.0")
StickyWindow(1, 1)
TextGadget(#text,60,10,200,50,"elements")
ListViewGadget(#list,10,30,150,300)
ButtonGadget(#button,50,400,70,30,"copier!")
Repeat
Texte$ = GetClipboardText()
If Texte$ <> elmnt1$ And Texte$ <>elmnt2$ And Texte$ <>elmnt3$ And Texte$ <> elmnt4$ And Texte$ <>elmnt5$ And Texte$ <>elmnt6$ And Texte$ <>elmnt7$ And Texte$ <>elmnt8$ And Texte$ <>elmnt9$ And Texte$ <>elmnt10$
If elmnt1$ = ""
elmnt1$ = Texte$
AddGadgetItem(#list,-1,elmnt1$)
ElseIf elmnt2$ = ""
elmnt2$ = Texte$
AddGadgetItem(#list,-1,elmnt2$)
ElseIf elmnt3$ = ""
elmnt3$ = Texte$
AddGadgetItem(#list,-1,elmnt3$)
ElseIf elmnt4$ = ""
elmnt4$ = Texte$
AddGadgetItem(#list,-1,elmnt4$)
ElseIf elmnt5$ = ""
elmnt5$ = Texte$
AddGadgetItem(#list,-1,elmnt5$)
ElseIf elmnt6$ = ""
elmnt6$ = Texte$
AddGadgetItem(#list,-1,elmnt6$)
ElseIf elmnt7$ = ""
elmnt7$ = Texte$
AddGadgetItem(#list,-1,elmnt7$)
ElseIf elmnt8$ = ""
elmnt8$ = Texte$
AddGadgetItem(#list,-1,elmnt8$)
ElseIf elmnt9$ = ""
elmnt9$ = Texte$
AddGadgetItem(#list,-1,elmnt9$)
ElseIf elmnt10$ = ""
elmnt10$ = Texte$
AddGadgetItem(#list,-1,elmnt10$)
EndIf
EndIf
elmnt_courant$ = GetGadgetText(#list)
Delay(1)
event=WindowEvent()
EventGadget = EventGadget()
Select EventGadget
Case #button
SetClipboardText(elmnt_courant$)
EndSelect
Until event=#PB_Event_CloseWindow
EndIf
Code 2 (Avec WaitWindowEvent(n) )
Code : Tout sélectionner
#text= 0
#list=1
#button=2
Global elmnt1$=""
Global elmnt2$=""
Global elmnt3$=""
Global elmnt4$=""
Global elmnt5$=""
Global elmnt6$=""
Global elmnt7$=""
Global elmnt8$=""
Global elmnt9$=""
Global elmnt10$=""
ExamineDesktops()
ClearClipboard()
If OpenWindow(1,DesktopWidth(0)-180,DesktopHeight(0)-500, 170, 630, "GPP v.1.0")
StickyWindow(1, 1)
TextGadget(#text,60,10,200,50,"elements")
ListViewGadget(#list,10,30,150,300)
ButtonGadget(#button,50,400,70,30,"copier!")
Repeat
Texte$ = GetClipboardText()
If Texte$ <> elmnt1$ And Texte$ <>elmnt2$ And Texte$ <>elmnt3$ And Texte$ <> elmnt4$ And Texte$ <>elmnt5$ And Texte$ <>elmnt6$ And Texte$ <>elmnt7$ And Texte$ <>elmnt8$ And Texte$ <>elmnt9$ And Texte$ <>elmnt10$
If elmnt1$ = ""
elmnt1$ = Texte$
AddGadgetItem(#list,-1,elmnt1$)
ElseIf elmnt2$ = ""
elmnt2$ = Texte$
AddGadgetItem(#list,-1,elmnt2$)
ElseIf elmnt3$ = ""
elmnt3$ = Texte$
AddGadgetItem(#list,-1,elmnt3$)
ElseIf elmnt4$ = ""
elmnt4$ = Texte$
AddGadgetItem(#list,-1,elmnt4$)
ElseIf elmnt5$ = ""
elmnt5$ = Texte$
AddGadgetItem(#list,-1,elmnt5$)
ElseIf elmnt6$ = ""
elmnt6$ = Texte$
AddGadgetItem(#list,-1,elmnt6$)
ElseIf elmnt7$ = ""
elmnt7$ = Texte$
AddGadgetItem(#list,-1,elmnt7$)
ElseIf elmnt8$ = ""
elmnt8$ = Texte$
AddGadgetItem(#list,-1,elmnt8$)
ElseIf elmnt9$ = ""
elmnt9$ = Texte$
AddGadgetItem(#list,-1,elmnt9$)
ElseIf elmnt10$ = ""
elmnt10$ = Texte$
AddGadgetItem(#list,-1,elmnt10$)
EndIf
EndIf
elmnt_courant$ = GetGadgetText(#list)
event=WaitWindowEvent(1)
EventGadget = EventGadget()
Select EventGadget
Case #button
SetClipboardText(elmnt_courant$)
EndSelect
Until event=#PB_Event_CloseWindow
EndIf
Re: programme de gestionnaire de presse papier
Publié : sam. 28/août/2010 16:05
par swolf
merci beaucoup pour vos réponses rapides!
=>ollivier je vais utiliser ta seconde solution (car il est dit dans la doc que waitwindowevent() est préférable a windowevent()... )
=> MLD ah... c'est bizarre

Re: programme de gestionnaire de presse papier
Publié : sam. 28/août/2010 16:23
par MLD
Swolf
Fait attention, si tu utilise en même temps 2 fenêtres avec stickywindows , il peu y avoir conflit entre les deux.
Re: programme de gestionnaire de presse papier
Publié : sam. 28/août/2010 16:45
par swolf
ok merci je retient
juste une dernière question :p
je compte utiliser le systray pour mon programme et l'aimerai que l'utilisateur puisse "cacher" la fenêtre puis la ré-afficher en cliquant sur la systrayicon... est-ce possible?
Re: programme de gestionnaire de presse papier
Publié : sam. 28/août/2010 16:55
par Malo
Curieux, quand je test avec "WaitWindowEvent(1)" le compilateur plante :
(" l'éxecutable de déboguage n'a pas répondu à la communication pendant 5s.Déconnection "),
si je mets "WaitWindowEvent() ", cela fonctionne avec la remarque du post de départ.
PB 4.51RC1 ; win vista
Re: programme de gestionnaire de presse papier
Publié : sam. 28/août/2010 17:46
par swolf
ah bon??
désole, je sais pas du tout pourquoi, chez moi ça marche... essaye peut-être en désactivant le debogueur
pour la question de la fenetre cachée, je viens de trouver la réponse: la commande hidewindow m'avait échappée --'
encore merci pour vos reactions
Re: programme de gestionnaire de presse papier
Publié : sam. 28/août/2010 19:23
par Ar-S
regarde du coté de systray index dans la doc, tu trouveras ton bonheur. ensuite tu utilises Hidewindow()
Re: programme de gestionnaire de presse papier
Publié : sam. 28/août/2010 19:35
par swolf
c'est fait, merci!
Re: programme de gestionnaire de presse papier
Publié : sam. 28/août/2010 19:46
par Ollivier
Bonjour Malo,
Que donne l'autre solution de code
???
Ollivier
Re: programme de gestionnaire de presse papier
Publié : dim. 29/août/2010 2:09
par Malo
Bonjour Ollivier
avec :
Delay(1)
Event = WindowEvent()
même message d'erreur
avec :
Event = WindowEvent()
même message d'erreur
avec ou sans Delay(1) :
Event = WaitWindowEvent()
pas de message d'erreur, et fonctionnement identique dans les 2 cas,
au 1er post
J'ai regardé au niveau des options du compilateur, mais je n'ai rien vu ( pour moi ) qui pourrait provoquer cela
Re: programme de gestionnaire de presse papier
Publié : dim. 29/août/2010 2:52
par Ollivier
Bonsoir Malo,
Ben je n'y comprends rien! (Comme d'hab!) ça ne me semble pas très logique.
J'avais fait des tests assez poussées sous Vista et c'était affolant de percevoir ce que j'appelle la "dissonance" entre le logiciel et le matériel trahies par de fortes irrégularités de ressources CPU.
Il vaudrait mieux reporter le problème auprès de la section bug sur le forum anglais.
Ollivier
Re: programme de gestionnaire de presse papier
Publié : dim. 29/août/2010 10:02
par Malo
@ Ollivier
Effectivement cela vient bien de vista, j'ai essayé sous xp ;fonctionnement OK
Jirai poster sur le forum anglais.
@ swolf
Désolé pour ton post j'ai dérivé un peu du sujet
Re: programme de gestionnaire de presse papier
Publié : dim. 29/août/2010 10:54
par swolf
pas de probleme
