Форум: "Начинающим";
Текущий архив: 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