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... :oops:

Re: programme de gestionnaire de presse papier

Publié : sam. 28/août/2010 14:29
par MLD
Salut

Chez moi tout est OK :D

Re: programme de gestionnaire de presse papier

Publié : sam. 28/août/2010 14:34
par Ollivier
DEUX solutions:

1) J'ai remplacé

Code : Tout sélectionner

Event = WaitWindowEvent()
par

Code : Tout sélectionner

Delay(1)
Event = WindowEvent()
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 8O :P

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

Code : Tout sélectionner

Delay(1)
Event = WindowEvent()
???

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 :)