Главная страница
    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.047 c
15-1154075759
Separator
2006-07-28 12:35
2006.08.27
Посоветуйте почтовый сервер под Windows


4-1146869095
KASioZ
2006-05-06 02:44
2006.08.27
Сообщения Windows


15-1154071925
umbra
2006-07-28 11:32
2006.08.27
Литература/ссылки по проектированию баз данных


15-1154372410
Gydvin
2006-07-31 23:00
2006.08.27
Зацените компонент


5-1138377574
Змей
2006-01-27 18:59
2006.08.27
установка компоненты DelphiX





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский