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

Вниз

Как бороться с Clipboard   Найти похожие ветки 

 
Alex4444444444   (2002-11-04 11:05) [0]

Если я копирую текст из "продвинутого" окна (типа IE или WordPad) и потом вставляю его в "непродвинутый" TEdit или TMemo, то получается просто куча "?""ов. Я перехватил WM_PASTE и нашел в Clipboard кучу форматов, включая UNICODE и RTF. Внимание, вопрос: что мне с ними делать? Как, скажем, преобразовать UNICODE или RTF в ASCII? (Автоматическое приведение типов не предлагать: получаются все те же "?".)


 
Marcus   (2002-11-04 11:33) [1]

А WideCharToMultiByte пробовал ?


 
Alex4444444444   (2002-11-04 11:46) [2]

Нет. Спасибо, попробую.


 
Alex4444444444   (2002-11-04 18:15) [3]

Поднимаю топик. Ни хрена не получается. WideCharToMultiByte требует CodePage. Где ее взять? В Clipboard есть CF_LOCALE; как из нее получить CodePage? Пробую GetLocaleInfo, но WideCharToMultiByte возвращает ошибку. Да, естественно, речь идет о кириллице (но хотелось бы, чтобы ето определялось автоматически), и, естественно, система не руссифицирована (кроме фонтов для IE и русской клавиатуры), т.е., скажем, русскую сортировку она сама не делает...


 
Alex4444444444   (2002-11-04 20:07) [4]

Никаких идей? Может, RTF формат? Как его тогда получить? В смусле, т.к. он нестандартный, надо узнать его ID...


 
Marcus   (2002-11-04 20:12) [5]

Ну к чему все это, лучше бы водки выпили. (Из писем Белинского Гоголю)
На самом деле WideCharToMultiByte(CP_ACP, ....) и все дела
Есть еще в VCL функция WideCharToString, у нее вообще один аргумент PWideChar
А с RTF нет смысла заморачиваться, все равно TMemo и TEdit он до фени...


 
Alex4444444444   (2002-11-04 20:32) [6]

CP_ACP --- ето не активная ли страница? Тогда "?" и получатся. (Я так понимаю, что система именно ето и делает, когда читаешь CF_TEXT.) У меня НЕ стоит русская кодовая страница (по многим причинам). Ну, а если даже я ее поставлю, то будут те же заморочки со, скажем, французским или немецким текстом. Фокус в том, что "продвинутые" то окна как-то ее определяют! Наверное, нужно все-таки Locale извлекать... А RTF --- ето для примера просто. Там ведь, вроде, 1 байтные символы, или нет? Только написаны per annus: "fe или типа того.


 
Shrek ©   (2002-11-04 22:11) [7]

попробуй при копирование текста поставить рускую роскладку клавиатуры


 
Alex4444444444   (2002-11-04 23:36) [8]

To Shrek: не помогает (в TEdit и TMemo).

Я решил проблему, правда, per annus (форточки...), но, вроде, пока работает. Давно собирался ето сделать, т.к. задолбало открывать html в редакторе, искать там текст, выравнивать строчки, копировать... Кому интересно, вот код:


const
// Supported (desired?) code pages
// Probably, one should enumerate available codepages on startup...
CP_COUNT = 2;
CodePages: array[0..CP_COUNT-1] of Integer =
(CP_ACP, 1251);

// Will try to convert CF_UNICODETEXT to a string
function GetClipboardText(out Dest: string): Boolean;
var Data: THandle;
WP: PWideChar;
P: PChar;
Lng: Integer;
I: Integer;
BRes: Bool;
begin
Result := IsClipboardFormatAvailable(CF_UNICODETEXT);
if Result then begin
Result := OpenClipboard(Application.Handle);
if Result then try
P := nil;
Data := GetClipboardData(CF_UNICODETEXT);
if Data <> 0 then try
GetMem(P, Lng + 1);
WP := PWideChar(GlobalLock(Data));
Lng := Length(WP);
for I := 0 to CP_COUNT - 1 do
if (WideCharToMultiByte(1251, 0, WP, Lng, P, Lng + 1, nil, @BRes) <> 0) and
not BRes
then begin
SetString(Dest, P, Length(P));
Exit;
end;
Result := False;
finally
FreeMem(P);
GlobalUnlock(Data);
end
finally
CloseClipboard;
end;
end;
end;

...

procedure TCustomFDEdit.WMPaste(var Message: TWMPaste);
var Res: string;
begin
if GetClipboardText(Res) then SelText := Res
else inherited;
end;




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

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

Наверх




Память: 0.48 MB
Время: 0.021 c
1-45874
Мефодий
2002-11-05 09:58
2002.11.14
Использвание CharSet


1-45957
fame
2002-11-04 13:52
2002.11.14
Фиксирование столбцов в DBGrid


3-45672
Hamlet
2002-10-25 20:19
2002.11.14
Clarion


6-46033
Vasily5000
2002-09-17 04:31
2002.11.14
Delphi, Cgi and MIME.


1-45803
PycUS
2002-11-01 15:50
2002.11.14
Работа с файлами