gifts2017

Простая внешняя компонента для системы 1С:Предприятие 7.7 на Delphi-5 с исходниками (Получить текст из буфера обмена (Clipboard)

Опубликовал Александр Венгер (venger) в раздел Программирование - Внешние компоненты

Внешняя компонента для системы 1С:Предприятие 7.7

(c) Venger Alex, Odessa, 2008

Last Update: 26.06.2008

Файл: AddIn_V7MyClipboard.dll

Среда: Delphi-5

Содержит одну функцию:
//----------------------------------------------------
Синтаксис:

Русский синоним функции: ПолучитьТекстИзБуфераОбмена(ОчиститьБуфер)
Английский синоним функции: GetTextFromClipboard(ClearClipboard)


Описание:

Если в Clipboard текст, то вернет этот текст,
если ничего в Clipboard нет или не текст, то
вернет пустую строку.
Если в принимаемый параметр передать (1) - то,
если в буфере текст и его удалось получить,
очистит буфер, если передать (0) - то оставит
буфер как есть, т.е. очищать не будет.
//----------------------------------------------------
Пример использования:
//----------------------------------------------------
Процедура гл8СообщитьБуфер() Экспорт
	Перем БуферОбмена, Стр;
	ЗагрузитьВнешнююКомпоненту("AddIn_V7MyClipboard.dll");
	БуферОбмена = СоздатьОбъект("AddIn.AddIn_V7MyClipboard");
	Стр=БуферОбмена.ПолучитьТекстИзБуфераОбмена(0);
	Сообщить(Стр);
КонецПроцедуры	// гл8СообщитьБуфер
//----------------------------------------------------


При написании использовалась функция для Delphi
предоставленная by Sergey Popov, Usinsk, Komi:
//----------------------------------------------------
Uses
 ... 
Clipbrd;
function GetFromClipboardToList(Buf : TStrings; ClearAfter : boolean) : boolean;
{Взять текстовые данные из Clipboard}
var
  MyHandle: THandle;
  TextPtr: PChar;
  MyString: string;
  begin
  Result:=FALSE;
  if Buf<>NIL then begin
     Buf.Clear;
     if Clipboard.HasFormat(CF_TEXT) then begin
        ClipBoard.Open;
        try
          MyHandle := Clipboard.GetAsHandle(CF_TEXT);
          TextPtr := GlobalLock(MyHandle);
          Buf.SetText(TextPtr);
          GlobalUnlock(MyHandle);
          if ClearAfter then ClipBoard.Clear;
          if Buf.Count>0 then begin
             Result:=TRUE;
          end;
        finally
          Clipboard.Close;
        end;
     end;
  end;
end;
//----------------------------------------------------



Как использовать функцию :
//----------------------------------------------------
Var
List : TStrings;

begin
  List := TStringList.Create;
  TRY
     GetFromClipboardToList(List, false);
     ...
     ...
     ...
  FINALLY
    if List<>NIL then begin
       List.Clear;
       List.Free;
       List:=NIL;
    end;
  END;
end;
//----------------------------------------------------

Скачать файлы

Наименование Файл Версия Размер
1Cv77_V7MyClipboardBK.zip 118
.1230376448 614,09Kb
25.09.09
118
.1230376448 614,09Kb Скачать

См. также

Подписаться Добавить вознаграждение

Комментарии

0. Александр Венгер (venger) 01.07.08 18:37
Внешняя компонента для системы 1С:Предприятие 7.7

© Venger Alex, Odessa, 2008

Last Update: 26.06.2008

Файл: AddIn_V7MyClipboard.dll

Среда: Delphi-5

Содержит одну функцию:
//----------------------------------------------------
Синтаксис:

Русский синоним функции: ПолучитьТекстИзБуфераОбмена(ОчиститьБуфер)
Английский синоним функции: GetTextFromClipboard(ClearClipboard)


Описание:

Если в Clipboard текст, то вернет этот текст,
если ничего в Clipboard нет или не текст, то
вернет пустую строку.
Если в принимаемый параметр передать (1) - то,
если в буфере текст и его удалось получить,
очистит буфер, если передать (0) - то оставит
буфер как есть, т.е. очищать не будет.
//----------------------------------------------------

Перейти к публикации

1. sp (roamer) 01.07.08 18:37
В данном случае быстродействие внешней компоненты - не критично, вероятно.
И если реализовать этот функционал в контексте ВНЕпроцессного сервера автоматизации (в виде приложения), то явно можно было бы получить доп. существенные возможности.
1. Можно было бы легко использовать такое средство и в других приложениях (не только 1C).
2. Если "прикрутить" к нему какой-либо интерпретатор (например, FastScript) - то гибкость этого инструмента (по обработке информации, указанной Пользователем) существенно возросла бы.
2. Александр Венгер (venger) 27.12.08 15:06
Теперь можно и так:

Перем БуферОбмена;
Процедура ПриОткрытии()
ЗагрузитьВнешнююКомпоненту("AddIn_V7MyClipboard.dll");
БуферОбмена=СоздатьОбъект("AddIn.AddIn_V7MyClipboard");
КонецПроцедуры

Процедура В_Буфер()
БуферОбмена.ПоложитьТекстВБуферОбмена(""+Текст);
КонецПроцедуры

Процедура Из_Буфера()
Буфер=БуферОбмена.ПолучитьТекстИзБуфераОбмена(0);
КонецПроцедуры
5. Сергей Рыбаков (Knych) 24.12.09 11:16
Спасибо, очень пригодилось :D
6. ad bo (adakabo) 15.07.10 12:56
спасибо, фдесятку!
... а англосиноним ПоложитьТекстВБуферОбмена() - copyTextToClipBoard() о_0 :)
7. Александр Рытов (Арчибальд) 15.07.10 13:02
Что-то не видел раньше :(
10. александр (whtblck) 29.02.16 21:19
что-то "Положить..." не работает:
БуферОбмена.ПоложитьТекстВБуферОбмена(""+Текст);
{D:\<...>\ПРИМЕРДЛЯВК_ADDIN_V7MYCLIPBOARD.ERT(22)}: Поле агрегатного объекта не обнаружено (ПоложитьТекстВБуферОбмена)

Получить - работает
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа