На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Модераторы: Rouse_, jack128, Krid
  
    > Работа с буфером обмена , для начинающих...
      Кнопки Вставить и Вырезать есть практически во все приложения под Windows, вы наверное тоже хотите реализовать что-то подобное в своей программе, тогда эта тема для вас :)
      Буфер обмена и стандартные компоненты Delphi
      Многие компоненты Delphi уже готовы к работе с буфером обмена, это касается компонентов, которые содержат какие-нибудь данные, которые пользователь может поместить в буфер обмена (например TMemo, TRichEdit и т.п.). Эти компоненты имеют методы :
      ExpandedWrap disabled
        CutToClipboard //Вырезать в буфер обмена
        CopyToClipboard //Копировать в буфер обмена
        PasteFromClipboard //Вставить из буфера обмена

      Ф-ция Clipboard
      Для работы с буфером обмена в Delphi есть ф-ция Clipboard, возвращающая экземпляр класса Clipboard, для работы с ней надо в uses прописать модуль Clipbrd и ф-ция становится доступной. А теперь о работе с Clipboard :

      Метод SetTextBuf()
      Этот метод копирует текст, преданный в качестве параметра, в буфер обмена. Надо помнить, что текст передаваемый в качестве параметра должен иметь тип PChar, так что не забывайте переводить строки.
      Пример :
      ExpandedWrap disabled
        Clipboard.SetTextBuf(PChar(memo1.SelText));

      В примере мы копируем в буфер обмена текст, выделеные в Memo.
      Для того, чтобы осуществить работу кнопки Вырезать напишем тот же код, но после копирования в буфер, удалим этот текст в Memo.
      Пример :
      ExpandedWrap disabled
        Clipboard.SetTextBuf(PChar(Memo1.SelText));
        Memo1.SelText := '';


      Свойство AsText
      Это свойство возвращает содержимое буфера обмена в виде строки.
      С помощью этого свойства можно осуществить работу кнопки Вставить.
      Пример :
      ExpandedWrap disabled
        Memo1.SelText := Clipboard.AsText;

      В примере мы в Memo копируем содержимое буфера обмена.

      Метод Assign
      C помощью метода Assign можно скопировать в буффер обмена объекты типа TPicture и TGraphic. Соответственно с помощью метода Assign объектов TPicture, TBitmap и TMetafile можно копировать в эти объекты содержимое буффера. Например так можно скопировать картинку через буффер:

      ExpandedWrap disabled
          Clipboard.Assign(Image1.Picture);
          Image2.Picture.Assign(Clipboard);


      Метод Clear
      Очищает содержимое буфера обмена.

      Метод HasFormat()
      Проверить какого формата данные находятся в буфере обмена.
      Возможные типы :
      CF_TEXT - буфер содержит текст
      CF_BITMAP - буфер содержит изображение
      CF_METAFILEPICT - буфер содержит векторное изображение
      CF_PICTURE - буфер содержит обьект типа TPicture
      CF_COMPONENT - буфер содержит компонент
      Пример :
      ExpandedWrap disabled
        procedure TForm1.Button1Click(Sender: TObject);
        begin
          if Clipboard.HasFormat(CF_TEXT) then
            ShowMessage('буфер содержит текст');
          if Clipboard.HasFormat(CF_BITMAP) then
            ShowMessage('буфер содержит изображение');
          if Clipboard.HasFormat(CF_METAFILEPICT) then
            ShowMessage('буфер содержит векторное изображение');
          if Clipboard.HasFormat(CF_PICTURE) then
            ShowMessage('буфер содержит обьект типа TPicture');
          if Clipboard.HasFormat(CF_COMPONENT) then
            ShowMessage('буфер содержит компонент');
        end;

      В примере при нажатии кнопки выводится сообщение о том, что содержится в буфере обмена.

      Автор: Kanes
        Как скопировать русский текст в буфер обмена

        ExpandedWrap disabled
          procedure CopyStringToClipboard(const Value: String);
          const
            RusLocale = (SUBLANG_DEFAULT shl $A) or LANG_RUSSIAN;
          var
            hMem: THandle;
            pData: Pointer;
          begin
            Clipboard.Open;
            try
              Clipboard.AsText := Value;
              hMem := GlobalAlloc(GMEM_MOVEABLE, SizeOf(DWORD));
              try
                pData := GlobalLock(hMem);
                try
                  DWORD(pData^) := RusLocale;
                finally
                  GlobalUnlock(hMem);
                end;
                  Clipboard.SetAsHandle(CF_LOCALE, hMem);
              finally
                GlobalFree(hMem);
              end;
            finally
              Clipboard.Close;
            end;
          end;


        Автор: Rouse_
        0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
        0 пользователей:


        Рейтинг@Mail.ru
        [ Script execution time: 0,0277 ]   [ 16 queries used ]   [ Generated: 28.03.24, 09:56 GMT ]