purebasic.info

PureBasic forum
Текущее время: Сб дек 16, 2017 12:25 am

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ 1 сообщение ] 
Автор Сообщение
СообщениеДобавлено: Пт дек 13, 2013 11:06 pm 
Не в сети
профессор

Зарегистрирован: Ср янв 14, 2009 4:12 pm
Сообщений: 2002
Благодарил (а): 12 раз.
Поблагодарили: 101 раз.
Пункты репутации: 43
Ко всем коментариям отправляю сюда
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
Enumeration
  #Window_0
EndEnumeration
Enumeration
  #Button_0
  #Button_1
  #Editor_1
  #ListView
EndEnumeration
Define.l Event, EventWindow, EventGadget, EventType, EventMenu
Global hNextW.l         ;  Хэндл следующего окна
Global NewList mcb.s() ; Здесь будем хранить клипы буфера обмена
For i=0 To 19          
   AddElement(mcb())    
Next
FirstElement(mcb())
 
Procedure WinCallback(hWnd, uMsg, wParam, lParam)
  Select uMsg
    Case #WM_DRAWCLIPBOARD   ; Пришло сообщение об изменении содержимого буфера обмена
      If IsClipboardFormatAvailable_(#CF_TEXT)  ; В буфере обмена находится текст?  
         Text$ = GetClipboardText()             ; Картинки, файлы и пр. нас не интересуют
      ;   ClearClipboard()                      ; Очистить clipboard
         Index = ListIndex(mcb())
         mcb() = Text$
         SelectElement(mcb(), Index+1)
         If Index => 19                         ; Если клип 21, затрем первый и будем писать на его место
           Index = 0
           SelectElement(mcb(), Index)
         EndIf
        ; Отправить сообщение следующему окну
         SendMessage_(hNextW, #WM_DRAWCLIPBOARD, 0, 0)
      ElseIf IsClipboardFormatAvailable_(#CF_BITMAP)  ;  если картинка...
         
      Else  
         SendMessage_(hNextW, #WM_DRAWCLIPBOARD, 0, 0)  
      EndIf  
    Case #WM_CHANGECBCHAIN  
    If hNextW = 0
      If wParam = hNextW
         SendMessage_(hNextW, #WM_CHANGECBCHAIN, wParam, lParam)
      Else
         hNextW = lParam
      EndIf  
    EndIf
  EndSelect  
    ProcedureReturn #PB_ProcessPureBasicEvents
EndProcedure
 
Procedure OpenWindow_Window_0()
  Protected hWnd = OpenWindow(#Window_0, 450, 200, 317, 606, "Clipboard", #PB_Window_SystemMenu|#PB_Window_SizeGadget|#PB_Window_MinimizeGadget|#PB_Window_TitleBar)
  If hWnd
    ButtonGadget(#Button_1, 110, 570, 90, 20, "Print")
    ButtonGadget(#Button_0, 215, 570, 90, 20, "Exit")
    EditorGadget(#Editor_1, 8, 470, 300, 90)
    SendMessage_(GadgetID(#Editor_1), #EM_SETTARGETDEVICE, 0, 0)
    ListViewGadget(#ListView, 8, 5, 300, 460)
 
    ProcedureReturn hWnd
  EndIf
EndProcedure
 
hWnd = OpenWindow_Window_0()
SetWindowCallback(@WinCallback(),#Window_0)
hNextW = SetClipboardViewer_(hWnd)  ;  Записываем себя в список наблюдателей за буфером обмена
StickyWindow(#Window_0, 1)
 
Repeat
  Event = WaitWindowEvent()
  Select Event
    Case #PB_Event_Gadget
      EventGadget = EventGadget()
      EventType = EventType()
      If EventGadget = #Button_0
         ChangeClipboardChain_(hWnd, hNextW)   ; Убрать наше окно из списка наблюдателей
         CloseWindow(#Window_0)
         Break
      ElseIf EventGadget = #ListView And EventType = #PB_EventType_LeftClick
         ClearGadgetItems(#Editor_1)
         SetGadgetText(#Editor_1, GetGadgetItemText(#ListView,GetGadgetState(#ListView), 0))
      ElseIf EventGadget = #Button_1
         ClearGadgetItems(#Editor_1)
         ClearGadgetItems(#ListView)
         Index = ListIndex(mcb())
         ForEach mcb()
           AddGadgetItem (#ListView, -1, mcb())
         Next mcb()
         SelectElement(mcb(), Index)
      EndIf
    Case #PB_Event_CloseWindow
      EventWindow = EventWindow()
      If EventWindow = #Window_0
        CloseWindow(#Window_0)
        ChangeClipboardChain_(hWnd, hNextW)
        Break
      EndIf
  EndSelect
ForEver
 


Получив сообщение #WM_DRAWCLIPBOARD мы вольны делать что хошь с буфером, затереть , изменить, сохранить
В моем примере буфер обмена сохраняется в NewList mcb.s(). По мере увеличения клипов, первый заменяется последним

_________________
Всё должно быть просто, настолько просто, насколько возможно, но не проще. (c) Альберт Эйнштейн
Изображение


Вернуться наверх
 Профиль  
 
Показать сообщения за:  Сортировать по:  
Начать новую тему Ответить на тему  [ 1 сообщение ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 4


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Создано на основе phpBB® Forum Software © phpBB Group (блог о phpBB)
Сборка создана CMSart Studio
Русская поддержка phpBB