Главная страница
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.044 c
15-1154384228
Razor
2006-08-01 02:17
2006.08.27
Изучение java


1-1151961973
Tonich
2006-07-04 01:26
2006.08.27
Создание обекта в потоке (Thread)


3-1150701631
Jann
2006-06-19 11:20
2006.08.27
связь с MS SQL Server


15-1154493115
Ega23
2006-08-02 08:31
2006.08.27
С Днём рождения! 2 августа


3-1150185728
Still Swamp
2006-06-13 12:02
2006.08.27
Как восстановить FB базу из скрипта