Модераторы: Snowy, MetalFan, bems, Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> функция Юникода возвращает знаки вопроса 
:(
    Опции темы
elementos
  Дата 15.2.2008, 01:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 43
Регистрация: 10.12.2007

Репутация: нет
Всего: нет



Код

procedure tForm1.PutStringIntoClipBoard(var Str: WideString);
var Size: Integer;
Data: THandle;
DataPtr: Pointer;
begin
Size := Length(Str);
if Size = 0 then
exit;
if not IsClipboardFormatAvailable(CF_UNICODETEXT) then
Clipboard.AsText := Str
else begin
Size := Size shl 1 + 2;
Data := GlobalAlloc(GMEM_MOVEABLE + GMEM_DDESHARE, Size);
try
DataPtr := GlobalLock(Data);
try
Move(Pointer(Str)^, DataPtr^, Size);
Clipboard.SetAsHandle(CF_UNICODETEXT, Data);
finally
GlobalUnlock(Data);
end;
except
GlobalFree(Data);
raise;
end;
end;
end;



здрасьте,
вот такая процедура. 
у меня немецкая виндоус и она работает нормально, возвращает русский текст, а у других людей с немецкой виндоус возвращает знаки вопроса, скажите,где проблема?
PM MAIL   Вверх
aktuba
Дата 15.2.2008, 03:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Смышленный
***


Профиль
Группа: Завсегдатай
Сообщений: 1915
Регистрация: 24.4.2006
Где: Планета Земля

Репутация: 7
Всего: 38



Скорее всего проблемы и нет... Ты проверял, что у них в буфере есть текст в юникоде?


--------------------
user posted image
PM MAIL WWW Skype   Вверх
elementos
Дата 15.2.2008, 10:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 43
Регистрация: 10.12.2007

Репутация: нет
Всего: нет



Цитата(aktuba @  15.2.2008,  03:58 Найти цитируемый пост)
Ты проверял, что у них в буфере есть текст в юникоде? 

в смысле текст в блокнот вставить после копирования, и посмотреть что будет?

еще вопрос,
не знаете, почему данная процедуре иногда глючит, и дает вместо нового текста старый, скопированный ранее?
PM MAIL   Вверх
elementos
Дата 15.2.2008, 14:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 43
Регистрация: 10.12.2007

Репутация: нет
Всего: нет



Цитата(aktuba @  15.2.2008,  03:58 Найти цитируемый пост)
Ты проверял, что у них в буфере есть текст в юникоде?

пишет -- знаки вопроса.
PM MAIL   Вверх
MetalFan
Дата 15.2.2008, 17:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

Репутация: 22
Всего: 128



Цитата(elementos @  15.2.2008,  01:53 Найти цитируемый пост)
if not IsClipboardFormatAvailable(CF_UNICODETEXT) then

в чем тайный смысл этой проверки? зачем ты проверяешь наличие данных в клипе в формате уникода?

Добавлено через 8 минут и 56 секунд
для корректной установки текста в клип я пользую (и всем рекомендую) такую функцию:
Код

  function SetClipboardText( const AText: string ): Boolean;
  var
    h:THandle;
  begin
    Clipboard.Open;
    Clipboard.AsText := AText;
    h := Clipboard.GetAsHandle(CF_TEXT);
    SetClipboardData(CF_LOCALE, h);
    Clipboard.Close;
  end;



--------------------
There are always someone smarter than you...
PM MAIL   Вверх
elementos
Дата 15.2.2008, 17:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 43
Регистрация: 10.12.2007

Репутация: нет
Всего: нет



MetalFan
если у человека немецкая виндос, в которой просто нет русской раскладки и нет русской codepage
то будет ли эта ф-ция возвращать русские буквы из буфера?
PM MAIL   Вверх
MetalFan
Дата 15.2.2008, 22:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

Репутация: 22
Всего: 128



попробуй


--------------------
There are always someone smarter than you...
PM MAIL   Вверх
elementos
Дата 15.2.2008, 22:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 43
Регистрация: 10.12.2007

Репутация: нет
Всего: нет



Цитата(MetalFan @  15.2.2008,  17:10 Найти цитируемый пост)
h := Clipboard.GetAsHandle(CF_TEXT);


такой вопрос, почему не CF_UNICODETEXT?
PM MAIL   Вверх
elementos
Дата 15.2.2008, 23:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 43
Регистрация: 10.12.2007

Репутация: нет
Всего: нет



Цитата(MetalFan @  15.2.2008,  17:10 Найти цитируемый пост)
 

function SetClipboardText( const AText: string ): Boolean;
  var
    h:THandle;
  begin
    Clipboard.Open;
    Clipboard.AsText := AText;
    h := Clipboard.GetAsHandle(CF_TEXT);
    SetClipboardData(CF_LOCALE, h);
    Clipboard.Close;
  end;



получаетса, что эта функция не будет корректно возвращать русский текст при отсутствии у юзера
русской кодовой страницы (CF_LOCALE) 

посмотри пож., поможет-ли функция Питона отсюда  ? 

Это сообщение отредактировал(а) elementos - 16.2.2008, 10:45
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Для новичков"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0733 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.