Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2002.11.14;
Скачать: [xml.tar.bz2];

Вниз

Как бороться с 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.008 c
14-46145
AL2002
2002-10-28 16:30
2002.11.14
Есть у кого такие штучки для Паскаля:


1-45933
wer1
2002-11-04 04:38
2002.11.14
Мастера подскажите! Копирование из буфера в Memo.


3-45736
Alex1980
2002-10-15 08:41
2002.11.14
Переиндексация таблиц Paradox


1-45801
KME
2002-11-04 22:26
2002.11.14
Шрифты


1-45872
ScareCrow
2002-11-05 15:10
2002.11.14
Проблемы работы с МЕНЮ





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский