programme de gestionnaire de presse papier

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Re: programme de gestionnaire de presse papier

Message par Le Soldat Inconnu »

le plus propre serais d'utiliser un timer. Et d'utiliser directement le contenu de la listview sans passer par des variables textes. Voici un petit exemple que je laisse prendre soin d'étudier

Code : Tout sélectionner

; Auteur : Le Soldat Inconnu
; Version de PB : 4.50
;
; Explication du programme :
; Mémoriser le contenu du presse papier

#Element_NombreMaxi = 10

Enumeration ; On énumère les fenêtres
	#Fenetre
EndEnumeration
Enumeration ; On énumère les gadgets
	#Liste
	#Copier
EndEnumeration

; Création de la fenêtre et de la GadgetList
If OpenWindow(#Fenetre, 0, 0, 300, 300, "Presse-Papier", #PB_Window_SystemMenu | #PB_Window_ScreenCentered | #PB_Window_MinimizeGadget) = 0
  End
EndIf

AddWindowTimer(#Fenetre, 1, 50) ; On ajoute un timer qui déclenche toute les 50ms

ListViewGadget(#Liste, 0, 0, 300, 270)
ButtonGadget(#Copier, 0, 270, 300, 30, "Copier")

Repeat
  Event = WaitWindowEvent()
  
  Select Event
		Case #PB_Event_Timer
      Select EventTimer() ; Timer
				Case 1
					Texte.s = GetClipboardText()
					If Texte <> ""
						; On regarde si le texte existe déjà
						NombreElement = CountGadgetItems(#Liste)
						TexteExistant = 0
						For i = 0 To NombreElement - 1
							If GetGadgetItemText(#Liste, i) = Texte
								TexteExistant = 1
							EndIf
						Next
						; Si il n'existe pas, on l'ajoute
						If TexteExistant = 0
							If NombreElement = #Element_NombreMaxi
								; On retire le dernier élément
								RemoveGadgetItem(#Liste, NombreElement - 1)
							EndIf
							; On ajoute au début, donc position 0
							AddGadgetItem(#Liste, 0, Texte)
						EndIf
						
					EndIf
			EndSelect
      
		Case #PB_Event_Gadget
      Select EventGadget() ; Gadgets
				Case #Copier
					Selection = GetGadgetState(#Liste)
					If Selection >= 0 ; Si on a sélectionné qlq chose
						SetClipboardText(GetGadgetItemText(#Liste, Selection))
					EndIf
			EndSelect
	EndSelect
  
Until Event = #PB_Event_CloseWindow
Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?

[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
swolf
Messages : 40
Inscription : jeu. 11/févr./2010 21:48

Re: programme de gestionnaire de presse papier

Message par swolf »

merci beaucoup, ce code est beaucoup plus clair
je vais tout de suite adapter le mien!! :mrgreen:
Feel The Power Of PureBasic
.................................................................................................................................................................
Soyez indulgents: je debute! :)
swolf
Messages : 40
Inscription : jeu. 11/févr./2010 21:48

Re: programme de gestionnaire de presse papier

Message par swolf »

par contre il y a deux choses que je n'ai pas compris:

1/ dans le passage

Code : Tout sélectionner

Selection = GetGadgetState(#Liste)
               If Selection >= 0 ; Si on a sélectionné qlq chose
                  SetClipboardText(GetGadgetItemText(#Liste, Selection))
               EndIf
je n'ai pas compris pourquoi tu n'as pas directement récupéré dans ta variable Selection le texte de l'élément sélectionné comme ceci:

Code : Tout sélectionner

selection$ = getGadgetText(#liste)
               If selection$ >= "" ; Si on a sélectionné qlq chose
                  SetClipboardText(selection$)
               EndIf
2/ le timer sert a faire la verification toutes les 50ms, mais c'est pour alleger les programme ou pour eviter les bugs du type de celui de mon premier post?
Feel The Power Of PureBasic
.................................................................................................................................................................
Soyez indulgents: je debute! :)
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: programme de gestionnaire de presse papier

Message par Backup »

swolf a écrit : If selection$ >= "" ; Si on a sélectionné qlq chose


oula !

ne serait-ce pas plutot ?
swolf a écrit : If selection$ <> "" ; Si on a sélectionné qlq chose
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Re: programme de gestionnaire de presse papier

Message par Le Soldat Inconnu »

le timer, oui, c'est pour alléger le code en ressource, et ça éviteras une surcharge dans la liste des évènements à cause d'une boucle pas assez rapide.

Pour info, on ne met jamais, je dis bien jamais, de delay dans la boucle d'évènement.
pour mettre un delay, il faut le coder comme ceci :

Code : Tout sélectionner

Repeat
  Repeat
    Event = WindowEvent()
    ; Gestion des évènements à mettre ici
  Until Event = 0
  Delay(1)
  ; Le code qui dois tourner quand on ne traite pas d'évènement, il peut-être lent (mais pas trop quand même)
Until ....
Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?

[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
swolf
Messages : 40
Inscription : jeu. 11/févr./2010 21:48

Re: programme de gestionnaire de presse papier

Message par swolf »

@dobro ah oui... désolé!! :oops:

@LSI d'accord merci j'y penserai la prochaine fois
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 »

swolf a écrit :par contre il y a deux choses que je n'ai pas compris:

1/ dans le passage

Code : Tout sélectionner

Selection = GetGadgetState(#Liste)
               If Selection >= 0 ; Si on a sélectionné qlq chose
                  SetClipboardText(GetGadgetItemText(#Liste, Selection))
               EndIf
je n'ai pas compris pourquoi tu n'as pas directement récupéré dans ta variable Selection le texte de l'élément sélectionné comme ceci:

Code : Tout sélectionner

selection$ = getGadgetText(#liste)
               If selection$ <> "" ; Si on a sélectionné qlq chose
                  SetClipboardText(selection$)
               EndIf
même résultat, même nombre de ligne... :)
~~~~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 »

:mrgreen: ouai mais je me demandais si une solution était préférable a l'autre question légèreté etc...
Feel The Power Of PureBasic
.................................................................................................................................................................
Soyez indulgents: je debute! :)
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: programme de gestionnaire de presse papier

Message par Backup »

ben le traitement des chaines est toujours plus long je crois ;)
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Re: programme de gestionnaire de presse papier

Message par Le Soldat Inconnu »

mais tu verras jamais la différence ... sauf dans un code de traitement monstrueux qui dure plusieurs secondes, ou qui doit être répété avec une période très faible. (ce qui est assez rare).
Dans ton cas, tu choisis selon ta préférence.
Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?

[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
swolf
Messages : 40
Inscription : jeu. 11/févr./2010 21:48

Re: programme de gestionnaire de presse papier

Message par swolf »

re!
toujours dans le cadre de mon programme d' historique de presse papier, j'ai voulu gerer la copie d'images...
malheureusement, je rencontre un probleme au moment de la comparaison de l'image active avec les precedente servant a ne pas copier l'image presente dans le presse papier une infinité de fois: j'utilise ImageID(image courante) que je compare avec imageID(nomre d'elements - i) ou i est la variable d'incrementation de ma boucle de comparaison... (pfiiiou :P )
mais étant donné que imageID génère 2 identifiants différents pour 2 images identique, ben ma condition qui teste si l'image existe deja (euh vous suivez toujours???) est toujours fausse est donc mon element est infiniment ajouté a ma liste! :cry:

bon je vous donne e code pour plus de clarté :mrgreen:

code présent dans la boucle évènementielle, avec o = 1 en début de programme

Code : Tout sélectionner

               GetClipboardImage(1)
               If IsImage(1) 
                             
                 GetClipboardImage(o)
                 ID=ImageID(o)
                 nombreimages = CountGadgetItems(#list2)
                 imageexistante = 0
                 texte2$ = "image n°" + o
                 If nombreimages <> 0
                 
                  For i = 0 To nombreimages - 1
                  
                    i2 = ImageID(CountGadgetItems(#list2)-i)
                    If ID = i2
                     imageexistante=1
                    EndIf
                    
                  Next
                  
                  If imageexistante = 0
                    AddGadgetItem(#list2, 0, texte2$)
                    o = o+1
                  EndIf
                  
                 Else 
                   AddGadgetItem(#list2, 0, texte2$)
                   o = o+1
                 EndIf                  

              EndIf
il y a surement d'autres problèmes dans le code mais pour l'instant je n'ai cerné que celui-la

p-s désolé si l'explication est embrouillé mais j'ai eu du mal a formuler mon problème
Feel The Power Of PureBasic
.................................................................................................................................................................
Soyez indulgents: je debute! :)
swolf
Messages : 40
Inscription : jeu. 11/févr./2010 21:48

Re: programme de gestionnaire de presse papier

Message par swolf »

quelqu'un a-t-il une réponse svp?
Feel The Power Of PureBasic
.................................................................................................................................................................
Soyez indulgents: je debute! :)
Répondre