Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.022 c
1-1107174711
Aleksandr.
2005-01-31 15:31
2005.02.13
Почему у меня результат упаковки zLib ом не открывается Winzip?


1-1106851074
Интерес
2005-01-27 21:37
2005.02.13
Фокус


3-1105982109
denis24
2005-01-17 20:15
2005.02.13
adoquery.parameters


3-1105970020
denis24
2005-01-17 16:53
2005.02.13
where date_future=:p2


6-1101679609
dms_main
2004-11-29 01:06
2005.02.13
Delphi&amp;IE




   Наверх