Форум: "Основная";
Текущий архив: 2005.02.13;
Скачать: [xml.tar.bz2];
ВнизКак скопировать 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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.035 c