Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.08.27;
Скачать: CL | DM;

Вниз

Загадки 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;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.068 c
15-1153990849
Юрий Зотов
2006-07-27 13:00
2006.08.27
"Не связывайся с дураками".


15-1154110445
serko
2006-07-28 22:14
2006.08.27
Какая последняя версия Delphi?


15-1154078672
Ketmar
2006-07-28 13:24
2006.08.27
я туп в интерфейсах %-(


11-1131525779
algambra
2005-11-09 11:42
2006.08.27
В любом месте области формы по клику мышки срабатывает процедура


11-1131441743
Vladimir Kladov
2005-11-08 12:22
2006.08.27
Версия 2.22