Недавно добавленные исходники

•  DeLiKaTeS Tetris (Тетрис)  153

•  TDictionary Custom Sort  3 334

•  Fast Watermark Sources  3 085

•  3D Designer  4 844

•  Sik Screen Capture  3 337

•  Patch Maker  3 550

•  Айболит (remote control)  3 655

•  ListBox Drag & Drop  3 012

•  Доска для игры Реверси  81 675

•  Графические эффекты  3 939

•  Рисование по маске  3 244

•  Перетаскивание изображений  2 626

•  Canvas Drawing  2 748

•  Рисование Луны  2 576

•  Поворот изображения  2 185

•  Рисование стержней  2 168

•  Paint on Shape  1 568

•  Генератор кроссвордов  2 233

•  Головоломка Paletto  1 767

•  Теорема Монжа об окружностях  2 227

•  Пазл Numbrix  1 685

•  Заборы и коммивояжеры  2 056

•  Игра HIP  1 282

•  Игра Go (Го)  1 230

•  Симулятор лифта  1 474

•  Программа укладки плитки  1 216

•  Генератор лабиринта  1 547

•  Проверка числового ввода  1 364

•  HEX View  1 497

•  Физический маятник  1 358

 
скрыть


Delphi FAQ - Часто задаваемые вопросы

| Базы данных | Графика и Игры | Интернет и Сети | Компоненты и Классы | Мультимедиа |
| ОС и Железо | Программа и Интерфейс | Рабочий стол | Синтаксис | Технологии | Файловая система |



Delphi Sources

Сохранение данных в Clipboard



Автор: Vladimir Timonin

[Q:]Мне нужно использовать clipboard для сохранения данных в собственном формате и я хочу для этого написать набор процедур ввода/вывода с использованием потоков (streams). Возможно ли создать объект TMemoryStream, эаполнить его и поместить в Clipboard?

[A:]Hе только возможно, именно так поступают функции Clipboard.GetComponent и Clipboard.SetComponent. Сначала вы должны зарегистрировать свой собственный формат данных для Clipboard с помощью функции RegisterClipboardFormat:

     CF_MYFORMAT := RegisterClipboardFormat('My Format Description');

Далее вы должны выполнить шаги:

1. Создать поток (memory stream) и записать туда данные.
2. Создать глобальный буфер в памяти и скопировать поток туда.
3. Вызвать Clipboard.SetAsHandle(), чтобы поместить буфер в Clipboard.

Пример:


     var
       hBuf: THandle;
       Bufptr: Pointer;
       MStream: TMemoryStream;
     begin
       MStream := TMemoryStream.Create;
       try
       { write your data to the stream }
         hBuf := GlobalAlloc(GMEM_MOVEABLE, MStream.Size);
         try
           BufPtr := GlobalLock(hBuf);
           try
             Move(MStream.Memory^, BufPtr^, MStream.Size);
             Clipboard.SetAsHandle(CF_MYFORMAT, hBuf);
           finally
             GlobalUnlock(hBuf);
           end;
         except
           GlobalFree(hBuf);
           raise;
         end;
       finally
         MStream.Free;
       end;
     end;


Внимание: не уничтожайте буфер, созданный с GlobalAlloc. Поскольку вы поместили его в Clipboard, это уже дело clipboard'а его уничтожить. Опять же, получая буфер из Clipboard, не уничтожайте этот буфер - просто сделайте копию содержимого.

Для обратного получения потока и данных, сделайте что-нибудь вроде этого:


     var
       hBuf: THandle;
       BufPtr: Pointer;
       MStream: TMemoryStream;
     begin
       hBuf := Clipboard.GetAsHandle(CF_MYFORMAT);
       if hBuf <> 0 then

       begin
         BufPtr := GlobalLock(hBuf);
         if BufPtr <> nil then
         try
           MStream := TMemoryStream.Create;
           try
             MStream.WriteBuffer(BufPtr^, GlobalSize(hBuf));
             MStream.Position := 0;
           { read your data from the stream }
           finally
             MStream.Free;
           end;
         finally
           GlobalUnlock(hBuf);
         end;
       end;
     end;






Похожие по теме исходники

Экспорт баз данных в Excel

База данных "Книжный магазин"

База данных Видеофильмов

База данных "Школа"

 

База данных без BDE

База данных студентов

Фильтрование данных

Pevrica (сжатие данных)

 

Clipboard Analyser

Clipboard (буфер обмена)

Clipboard Viewer

Clipboard Format Spy

 



Copyright © 2004-2024 "Delphi Sources" by BrokenByte Software. Delphi World FAQ

Группа ВКонтакте