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

Вниз

Как скопировать PWideChar в буфер обмена?   Найти похожие ветки 

 
Караваев Дмитрий   (2005-01-29 19:48) [0]

Есть строка двухбайтовых символов типа PWideChar, требуется скопировать её в буфер обмена. Совсем не знаю, как это реализовать!
Кстати, вариант преобразования её в обычную однобайтовую строку и последущее копирование через Clipboard не подходит...


 
vertal ©   (2005-01-29 22:33) [1]


uses windows;
{$B-}
function CopyDataToClipboard(const lpDataPtr: Pointer; const dwDataSize: Cardinal;
 const dwDataFormat: Cardinal): Boolean;
var
 hGMem: hGlobal;
 pGMem: Pointer;
begin
 Result := False;
 hGMem := GlobalAlloc(GMEM_MOVEABLE or GMEM_DDESHARE, dwDataSize);
 if hGMem <> 0 then
 begin
   pGMem := GlobalLock(hGMem);
   if pGMem <> nil then
   begin
     Move(lpDataPtr^, pGMem^, dwDataSize);
     GlobalUnlock(hGMem);
     if OpenClipboard(0) then
     begin
       Result := EmptyClipboard and (SetClipboardData(dwDataFormat, hGMem) <> 0);
       CloseClipboard;
     end;
   end;
   if not Result then
     GlobalFree(hGMem);
 end;
end;

CopyDataToClipboard(YourWideCharStr, Length(YourWideCharStr) * 2 + 2, CF_UNICODETEXT)


Правда в справке сказано, что стандартный формат CF_UNICODETEXT поддерживается только в NT.


 
default ©   (2005-01-29 22:54) [2]

кошмар!!!
uses Clipbrd;
...
procedure TForm1.Button1Click(Sender: TObject);
var
 S: WideString;
begin
 S := "123";
 Clipboard.AsText := S
end;


 
default ©   (2005-01-29 22:57) [3]

или так не нравится?


 
ShimON ©   (2005-01-29 23:04) [4]

Ему нужно ведь PWideString запихнуть...


 
default ©   (2005-01-29 23:06) [5]

ну пусть запихивает


 
vertal ©   (2005-01-30 17:58) [6]

> default c   (29.01.05 22:54) [2]
> кошмар!!!

> procedure TForm1.Button1Click(Sender: TObject);
> var
> S: WideString;
> begin
> S := "123";
> Clipboard.AsText := S
> end;

> default c   (29.01.05 22:57) [3]
> или так не нравится?

Человек сказал, что вариант с предварительным преобразованием в строку с однобайтовыми символами не подходит (может быть, есть символы, непредставимые в текущей кодовой странице в win). А при присвоении Clipboard.AsText := S именно такое преобразование и происходит. И с помощью объекта Clipboard добиться сабжа вообще невозможно, так как там процедура SetBuffer находится в protected - части деклараций методов.



Страницы: 1 вся ветка

Текущий архив: 2005.02.13;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.036 c
14-1106541978
X9
2005-01-24 07:46
2005.02.13
Работа с LPT-портом под XP


8-1098860000
Phantomouse
2004-10-27 10:53
2005.02.13
Обраотка картинки


1-1106748572
Zilog
2005-01-26 17:09
2005.02.13
TreeView + ImageList


1-1107169060
Garry_c
2005-01-31 13:57
2005.02.13
MessageBox


9-1099437966
Stivi
2004-11-03 02:26
2005.02.13
экран