dwg.ru forum rss xml
| Правила | Регистрация | Пользователи | Поиск | Сообщения за день | Все разделы прочитаны |  Справка по форуму |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Копирование в буфер обмена

Копирование в буфер обмена

Версия для печати
 
Ответ
Опции темы Поиск в этой теме
Непрочитано 08.11.2007, 23:49 #1
Копирование в буфер обмена
Зодчий
 
Конструктор (начинающий)
 
Беларусь, Гродно
Регистрация: 25.01.2007
Сообщений: 44

Зодчий вне форума Вставить имя

Поделитесь знаниями и к вам ЮЗЕРЫ потянутся !!!
У меня есть текстовая переменная, которая при выполнении макроса в VBA получила определённое значение, и теперь мне нужно програмно скапировать её в буфер обмена, чтобы потом вставить по сторинке CTR+V.
Точно уверен что есть простой способ, но найти его не могу.
Просмотров: 8705
 
Непрочитано 09.11.2007, 01:22
#2
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 35,836


Шо значит вставить "по сторинке"? Однострочный текст, что ли, создать? Ну так и делай это через VBA, в чем проблема?
__________________

---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума вставить имя Обратить внимание модератора на это сообщение  
 
Непрочитано 09.11.2007, 09:38
#3
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,701
Отправить сообщение для VVA с помощью ICQ Отправить сообщение для VVA с помощью Skype™


Есть несколько вариантов.
На лиспе можно так.
С объектом htmfile (предпочтительнее)
Код:
[Выделить все]
;|
;  ! ***************************************************************************
;; !                           copyToclipboard
;; ! ***************************************************************************
;; ! Function : Copy text to clipboard
;; ! Argument : 'str'     - String
;; ! Returns  : nil
;; see http://www.theswamp.org/index.php?topic=21764.new
;; ! ****************************************************************************

(defun copyToclipboard ( text / htmlfile result)
 (setq result
        (vlax-invoke
            (vlax-get
                (vlax-get
                    (setq htmlfile (vlax-create-object "htmlfile"))
                   'ParentWindow
                )
               'ClipBoardData
            )
           'SetData
            "Text"
            text
        )
    )

    (vlax-release-object htmlfile)
    result
)

;http://www.theswamp.org/index.php?topic=19805.0
;  ! ***************************************************************************
;; !                           Clearclipboard
;; ! ***************************************************************************
;; ! Function : Clear clipboard
;; ! Argument : nil
;; ! Returns  : nil
;; see http://www.theswamp.org/index.php?topic=21764.new
;; ! ****************************************************************************;

(defun Clearclipboard (  / htmlfile)
;;(Clearclipboard)

(vlax-invoke
            (vlax-get
                (vlax-get
                    (setq htmlfile (vlax-create-object "htmlfile"))
                   'ParentWindow
                )
               'ClipBoardData
            )
           'clearData
            "Text"
        )
(vlax-release-object htmlfile)
)

;  ! ***************************************************************************
;; !                           Getclipboard
;; ! ***************************************************************************
;; ! Function : Return text string from clipboard
;; ! Argument : nil
;; ! Returns  : string
;; see http://www.theswamp.org/index.php?topic=21764.new
;; ! ****************************************************************************

(defun Getclipboard ( / htmlfile result)
;;(Getclipboard)
(setq result
        (vlax-invoke
            (vlax-get
                (vlax-get
                    (setq htmlfile (vlax-create-object "htmlfile"))
                   'ParentWindow
                )
               'ClipBoardData
            )
           'GetData
            "Text"
        )
    )

    (vlax-release-object htmlfile)

    result
)

Код:
[Выделить все]
(vl-load-com)
;| ! ***************************************************************************
;; !                           copyToclipboard
;; ! ***************************************************************************
;; ! Function : Copy text to clipboard
;; ! Argument : 'str'     - String
;; ! Returns  : nil
;; ! ****************************************************************************|;

(defun copyToclipboard ( str / ieobj)
  (setq ieobj (vlax-get-or-create-object
                      "InternetExplorer.Application"
                      )
             )
 (vlax-invoke ieobj 'navigate2 "about:blank")
 (vlax-invoke
(setq cbrd (vlax-get (vlax-get (vlax-get ieobj 'document) 'parentwindow)
'clipboarddata
))
'setdata
"text"
str
)
(vlax-release-object ieobj)  
)

;| ! ***************************************************************************
;; !                           Clearclipboard
;; ! ***************************************************************************
;; ! Function : Clear clipboard
;; ! Argument : nil
;; ! Returns  : nil
;; ! ****************************************************************************|;

(defun Clearclipboard (  / ieobj)
  (setq ieobj (vlax-get-or-create-object
                      "InternetExplorer.Application"
                      )
             )
 (vlax-invoke ieobj 'navigate2 "about:blank")
 (vlax-invoke
(vlax-get (vlax-get (vlax-get ieobj 'document) 'parentwindow)
'clipboarddata
)
'clearData
"text"
)
(vlax-release-object ieobj)  
)

;| ! ***************************************************************************
;; !                           Getclipboard
;; ! ***************************************************************************
;; ! Function : Return text string from clipboard
;; ! Argument : nil
;; ! Returns  : string
;; ! ****************************************************************************|;

(defun Getclipboard ( / ieobj str)
  (setq ieobj (vlax-get-or-create-object
                      "InternetExplorer.Application"
                      )
             )
 (vlax-invoke ieobj 'navigate2 "about:blank")
 (setq str(vlax-invoke
(vlax-get (vlax-get (vlax-get ieobj 'document) 'parentwindow)
'clipboarddata
)
'getData
"text"
))
(vlax-release-object ieobj)
  str
)

Можно воспользоваться DOSLIB (dos_clipboard)
Есть Clipboard.arx от LE.
Еще тема обсуждалась здесь.
Из VBA можно попробовать возпользоватьтя теми же методами и свойствами Internet Explorera, либо LISP, arx через SendCommand.
__________________
Как использовать код на Лиспе читаем здесь

Последний раз редактировалось VVA, 18.01.2015 в 10:29.
VVA вне форума вставить имя Обратить внимание модератора на это сообщение  
 
Непрочитано 09.11.2007, 18:26
#4
C1


 
Регистрация: 13.06.2005
Сообщений: 314


Пример как поместить число в буфер обмена в VBA:
Код:
[Выделить все]
Public Sub Clip()
    Dim d As New DataObject
    Dim s As Single
    d.Clear
    s = 11.11
    d.SetText s
    d.PutInClipboard
End Sub
C1 вне форума вставить имя Обратить внимание модератора на это сообщение  
 
Автор темы   Непрочитано 09.11.2007, 22:47
#5
Зодчий

Конструктор (начинающий)
 
Регистрация: 25.01.2007
Беларусь, Гродно
Сообщений: 44


Спосибо всем кто отозвался, особенная благодарность С1 его вариан для меня самый оптимальный.

Последний раз редактировалось Зодчий, 09.11.2007 в 23:20.
Зодчий вне форума вставить имя Обратить внимание модератора на это сообщение  
 
Непрочитано 15.12.2008, 20:52
#6
kp+

идущий по граблям
 
Регистрация: 26.05.2005
Днепропетровск
Сообщений: 3,744


Прошу прощения за возврат к старой теме.
Мне нужно с помощью VBA вытащить текстовую строку из буфера обмена WINDOWS. Желательно без привязки к форме.
Код из поста 4 при этом выдает, что не определен пользовательский тип данных DataObject.
Помогите, PLS
kp+ вне форума вставить имя Обратить внимание модератора на это сообщение  
 
Непрочитано 15.12.2008, 21:28
#7
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,701
Отправить сообщение для VVA с помощью ICQ Отправить сообщение для VVA с помощью Skype™


Так понятно?
Код:
[Выделить все]
Sub ClipboardShow()
'Q: При инициализации DataObject выдается ошибка: "Compile Error: User-defined type not defined"
'A: надо подключить в References библиотеку \Windows\System32\FM20.DLL
'Q: Как ее подключить ?
'A: Редактор VBA\Меню\Tools\References..., кнопка "Browse..." указать файл FM20.DLL
'

Dim Clipboard As New DataObject
Dim Text As String

' Чтобы считать текст
Clipboard.GetFromClipboard
Text = Clipboard.GetText
MsgBox Text

' Чтобы записать текст
Text = "hello"
Clipboard.SetText Text
Clipboard.PutInClipboard

End Sub
Про копирование еще здесь было
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума вставить имя Обратить внимание модератора на это сообщение  
 
Непрочитано 16.12.2008, 10:30
#8
kp+

идущий по граблям
 
Регистрация: 26.05.2005
Днепропетровск
Сообщений: 3,744


Огромное спасибо! Не бейте ногами за ламерские вопросы - я только начал изучать VBA
kp+ вне форума вставить имя Обратить внимание модератора на это сообщение  
 
Непрочитано 26.11.2016, 15:47
#9
KomProekt


 
Регистрация: 12.08.2016
Сообщений: 59


Цитата:
Сообщение от C1 Посмотреть сообщение
Пример как поместить число в буфер обмена в VBA:
Код:
[Выделить все]
Public Sub Clip()
    Dim d As New DataObject
    Dim s As Single
    d.Clear
    s = 11.11
    d.SetText s
    d.PutInClipboard
End Sub
А как сделать, что бы после первой вставки значение s увеличивалось на единицу? т.е. вставлять 1, 2, 3, и т.д.?
KomProekt вне форума вставить имя Обратить внимание модератора на это сообщение  
 
Непрочитано 27.11.2016, 01:43
#10
kp+

идущий по граблям
 
Регистрация: 26.05.2005
Днепропетровск
Сообщений: 3,744


Цитата:
Сообщение от KomProekt Посмотреть сообщение
А как сделать, что бы после первой вставки значение s увеличивалось на единицу? т.е. вставлять 1, 2, 3, и т.д.?
Если не секрет, с какой целью это надо?
Но какая бы цель ни была, по-моему для таких дел стандартным буфером обмена лучше не пользоваться, т.к. надо будет отслеживать с помощью стандартных событий и самописных флагов и счетчиков:
1) что первая, вторая, третья и т.д. вставка действительно произошла;
2) что другая програма не перегадила содержимое буфера.
__________________
Кому жизнь буги-вуги, а кому полный бред... (С)
kp+ вне форума вставить имя Обратить внимание модератора на это сообщение  
 
Непрочитано 27.11.2016, 14:36
1 | 1 #11
Boxa

КЖ; C#
 
Регистрация: 03.11.2005
Санкт-Петербург
Сообщений: 1,786


Цитата:
Сообщение от kp+ Посмотреть сообщение
Если не секрет, с какой целью это надо?
Ответ тут http://forum.dwg.ru/showthread.php?t=136469
Видимо KomProekt, всё таки пытается воспользоваться костылями. Удачи ему в этом...
__________________
_бложиг
Boxa вне форума вставить имя Обратить внимание модератора на это сообщение  
 
Непрочитано 27.11.2016, 15:26
#12
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 5,352


Offtop:
Цитата:
Сообщение от Boxa Посмотреть сообщение
пытается воспользоваться костылями. Удачи ему в этом...
и терпения остальным участникам форума - так как судя по подходу KomProekt, вместо самостоятельного поиска информации в инете он предпочитает заваливать форум вопросами, даже не пытаясь разобраться самостоятельно.
Сергей812 вне форума вставить имя Обратить внимание модератора на это сообщение  
 
Непрочитано 27.11.2016, 17:18
#13
KomProekt


 
Регистрация: 12.08.2016
Сообщений: 59


Цитата:
Сообщение от Boxa Посмотреть сообщение
Видимо KomProekt, всё таки пытается воспользоваться костылями. Удачи ему в этом...
Да, видимо пора идти еще дальше и начать осваивать .NET.) Раньше VBA как-то хватало, и из экселя лихо все перетягивал в автокад. Кстати, как в .NET обстоят дела с взаимодействием Excel и AutoCad?
KomProekt вне форума вставить имя Обратить внимание модератора на это сообщение  
 
Непрочитано 27.11.2016, 17:36
#14
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 5,352


Цитата:
Сообщение от KomProekt Посмотреть сообщение
Кстати, как в .NET обстоят дела с взаимодействием Excel и AutoCad?
ну через тот же COM-интерфейс можно до экселя достучаться. Есть готовые пакеты для взаимодействия с офисом. В инете примеры есть
Сергей812 вне форума вставить имя Обратить внимание модератора на это сообщение  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Копирование в буфер обмена

РЕВЕРС. Автоматическая пакетная печать множества рамок (форматов) из пространства модели и листов
Размещение рекламы
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Доступ к объектам скопированным в буфер обмена МишаVBA AutoCAD 6 20.05.2006 00:41
Как программно закинуть текст. строку в буфер обмена Винды? kp+ Программирование 2 22.03.2006 19:14
Проблемы с копирование через буфер обмена. zenon AutoCAD 2 22.12.2005 07:20
Не копирует в буфер обмена только какуюто-часть чертежа. Незнайка AutoCAD 19 09.03.2005 14:31

|| Главная || Каталог САПР || Тендеры || Публикации || Объявления || Биржа труда || Download || Галерея ||
|| Библиотека || Кунсткамера || Каталог предприятий || Контакты || Файлообменник || Блоги ||