Re: programme de gestionnaire de presse papier
Publié : dim. 29/août/2010 11:06
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