Главная страница
    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.045 c
15-1153778077
lakb/proxy/
2006-07-25 01:54
2006.08.27
Component и русский аналог


2-1154809655
fog
2006-08-06 00:27
2006.08.27
TScrollBox


15-1154573387
Пользоват.
2006-08-03 06:49
2006.08.27
Помогите переключить раскладку при входе в виндовс.


15-1154413133
Ega23
2006-08-01 10:18
2006.08.27
Поздравляемым с днями рождения


15-1154431998
cyborg
2006-08-01 15:33
2006.08.27
Библиотека звуков





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