programme de gestionnaire de presse papier

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
swolf
Messages : 40
Inscription : jeu. 11/févr./2010 21:48

programme de gestionnaire de presse papier

Message 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:
Feel The Power Of PureBasic
.................................................................................................................................................................
Soyez indulgents: je debute! :)
Avatar de l’utilisateur
MLD
Messages : 1124
Inscription : jeu. 05/févr./2009 17:58
Localisation : Bretagne

Re: programme de gestionnaire de presse papier

Message par MLD »

Salut

Chez moi tout est OK :D
Ollivier
Messages : 4197
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

Re: programme de gestionnaire de presse papier

Message 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
swolf
Messages : 40
Inscription : jeu. 11/févr./2010 21:48

Re: programme de gestionnaire de presse papier

Message 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
Feel The Power Of PureBasic
.................................................................................................................................................................
Soyez indulgents: je debute! :)
Avatar de l’utilisateur
MLD
Messages : 1124
Inscription : jeu. 05/févr./2009 17:58
Localisation : Bretagne

Re: programme de gestionnaire de presse papier

Message 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.
swolf
Messages : 40
Inscription : jeu. 11/févr./2010 21:48

Re: programme de gestionnaire de presse papier

Message 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?
Feel The Power Of PureBasic
.................................................................................................................................................................
Soyez indulgents: je debute! :)
Malo
Messages : 79
Inscription : dim. 09/août/2009 17:48

Re: programme de gestionnaire de presse papier

Message 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
swolf
Messages : 40
Inscription : jeu. 11/févr./2010 21:48

Re: programme de gestionnaire de presse papier

Message 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
Feel The Power Of PureBasic
.................................................................................................................................................................
Soyez indulgents: je debute! :)
Avatar de l’utilisateur
Ar-S
Messages : 9539
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: programme de gestionnaire de presse papier

Message par Ar-S »

regarde du coté de systray index dans la doc, tu trouveras ton bonheur. ensuite tu utilises Hidewindow()
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
swolf
Messages : 40
Inscription : jeu. 11/févr./2010 21:48

Re: programme de gestionnaire de presse papier

Message par swolf »

c'est fait, merci!
Feel The Power Of PureBasic
.................................................................................................................................................................
Soyez indulgents: je debute! :)
Ollivier
Messages : 4197
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

Re: programme de gestionnaire de presse papier

Message par Ollivier »

Bonjour Malo,

Que donne l'autre solution de code

Code : Tout sélectionner

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

Ollivier
Malo
Messages : 79
Inscription : dim. 09/août/2009 17:48

Re: programme de gestionnaire de presse papier

Message 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
Ollivier
Messages : 4197
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

Re: programme de gestionnaire de presse papier

Message 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
Malo
Messages : 79
Inscription : dim. 09/août/2009 17:48

Re: programme de gestionnaire de presse papier

Message 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
swolf
Messages : 40
Inscription : jeu. 11/févr./2010 21:48

Re: programme de gestionnaire de presse papier

Message par swolf »

pas de probleme :)
Feel The Power Of PureBasic
.................................................................................................................................................................
Soyez indulgents: je debute! :)
Répondre