Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2006.08.27;
Скачать: [xml.tar.bz2];

Вниз

Загадки Clipboard   Найти похожие ветки 

 
NordRus ©   (2006-08-07 10:42) [0]

Добрый день, уважаемые мастера!
Имеем две функции:
В первой пишем Stream в Clipboard, затем читаем из Clipboard в Stream;
Во второй просто читаем из Clipboard в Stream.

Procedure StreamToClipboard(Stream: tMemoryStream);
Var Data, Data1: tHandle;
   DataPtr: Pointer;
   i: Char;
Begin
 Stream.Clear;
 i := Chr(70);
 Stream.Write(i, SizeOf(i));
 data := globalalloc(gmem_moveable, Stream.Size);
 Try
   //DataPtr := GlobalLock(Data);
   //Try
     Stream.Position := 0;
     Stream.Read(Data, Stream.Size);

       Stream.Clear;
       Stream.Write(Data, globalsize(data));
       Stream.Position := 0;
       Stream.Read(i, SizeOf(Char));
       ShowMessage(IntToStr(Ord(i)));
  //70

     Clipboard.Open;
     Try Clipboard.SetAsHandle(cf_ddgdata, data);
     Finally Clipboard.Close
     End;
   //Finally
     //GlobalUnlock(Data);
   //End;
 Except
   GlobalFree(Data);
   Raise;
 End;

 Data1 := Clipboard.GetAsHandle(cf_ddgdata);
 If Data1 = 0 then exit;
 //DataPtr := GlobalLock(Data);
 try     Stream.Clear;
         Stream.Write(Data1, globalsize(data1));
         Stream.Position := 0;
         Stream.Read(i, SizeOf(Char));
         ShowMessage(IntToStr(Ord(i)));
 //70
 finally ;//GlobalUnlock(data);
 end;
End;

Function StreamFromClipboard(Stream: tMemoryStream): Boolean;
Var Data: tHandle;
   DataPtr: Pointer;
   i: Char;
Begin
 Data := Clipboard.GetAsHandle(cf_ddgdata);
 If Data = 0 then exit;
 //DataPtr := GlobalLock(Data);
 Try     Stream.Clear;
         Stream.Write(Data, GlobalSize(Data));
         Stream.Position := 0;
         Stream.Read(i, SizeOf(Char));
         ShowMessage(IntToStr(Ord(i)));
  //0
 Finally ;//GlobalUnlock(data);
 End;
end;

В приведённом коде трижды проверяется содержимое Stream (там должен быть байт, содержащий "F", или иначе Chr(70)).

Первый раз - после записи 70 в поток - ответ 70.
Второй раз - после записи содержимого потока в Clipboard и затем получения его обратно в одной функции - ответ 70.
Третий раз - получение его обратно (то же самое, что и в <2>) , но код вынесен в отдельную функцию - ответ 0

Где логика? Ничего не понимаю! Не подскажете, что сделано неправильно?


 
NordRus ©   (2006-08-07 11:00) [1]

Ну точно шаманские танцы с бубном.
Вот это меня спасло :)
http://articles.org.ru/cfaq/index.php?qid=901&catid=65



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2006.08.27;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.45 MB
Время: 0.035 c
6-1144412093
Квэнди
2006-04-07 16:14
2006.08.27
Добавить Ip на интерфейс


2-1154649037
Балбес
2006-08-04 03:50
2006.08.27
Из стринга в чар


2-1154810751
RGB
2006-08-06 00:45
2006.08.27
Справочник


2-1154517753
VitV
2006-08-02 15:22
2006.08.27
Delphi+Interbase. Cсылочная целостность таблиц из разных БД.


2-1154613448
gdaujk
2006-08-03 17:57
2006.08.27
Выделение памяти для массива в DLL.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский