вот, сделал такую программку на делфи. меняет текст при неправильной расскладке клавиатуры. Нажмите для просмотра прикрепленного файла в файл выводит все хорошо, а если вводить английские символы(в первый мемо), потом скопировать русские(из второго мемо) и вставить их, например, в тот же блокнот - получаются иероглифы. почему?
volvo
22.06.2009 19:44
Ты бы код показал, может чего и посоветовали бы, а так, просто догадываться - не очень интересно...
sheka
22.06.2009 19:51
извините, не тот архив выложил. исправился.
volvo
22.06.2009 20:18
Проверить не могу, негде. Но попробуй в том Memo, куда пишется результат, установить CharSet в Russian, тогда не должно быть того, о чем ты говоришь...
P.S. Перенести тему в Дельфи? (здесь уже не теория, а реализация пошла все-таки...)
sheka
22.06.2009 23:55
charset не помогает. английская расскладка всегда зорошо получается, а русская никак. кстати, если я ввел русской расскладкой, перевел в английскую, а потом опять в русскую - все хорошо, но при непосредственном переводе из английской в русскую получаются иероглифы.
Цитата(volvo @ 22.06.2009 16:18)
P.S. Перенести тему в Дельфи? (здесь уже не теория, а реализация пошла все-таки...)
да. можешь и переименовать. все таки о кодировках (наверное) говорим.
sheka
23.06.2009 22:52
извините за навязчивость, но помогите мне с этой проблемой. нигде не могу найти ничего про такую особенность мемо.
volvo
23.06.2009 22:59
Про какую особенность? Телепаты - в отпуске. Ты пишешь, что
Цитата(sheka @ 22.06.2009 15:03)
в файл выводит все хорошо
... А с чего оно у тебя вдруг в файл что-то выводит, ты не думал? В коде НЕТ никакого вывода в файл. Опять же, ты на какой версии Windows работаешь (русская/английская/китайская/...), не указал? Версия Дельфи? Не указал? В какой кодировке у тебя тот TXT-файл, в который ты вставляешь скопированный текст? Не указал? Что ж ты хочешь после этого?
sheka
23.06.2009 23:13
заменил. надеюсь в этот раз уже на то что надо особенность такова, что строка при выводе в файл сохраняется в нормальной кодировке, а если эту же строку вывести в мемо, скопировать и вставить в блокнот - получаются иероглифы.
вроде виндоз русский. Borland Delphi Enterprise 7.
volvo
24.06.2009 2:10
Ты вынудил меня просто зайти под Windows...
Попытаюсь воспроизвести описанное тобой поведение... Смотри, что происходит: WinXP SP3, английская, запускаю твой EXE-шник и пытаюсь результат перекодировки скопировать в NotePad. Результат (видеофайл, около 2Мб)
Как это понимать? Где проблема?
sheka
24.06.2009 3:12
если не ошибаюсь у меня SP2 русский. при выполнении аналогичных действий - все равно закарлючки, даже нотепад скачал - и в нем тоже (даже ворд не понимает). кстати, расскажи как это ты так видео делаешь?
У меня возникла подобная проблема, поэтому решил написать сюда:)
Есть у меня, значит, программа, и запускаю я её на удалённом сервере, на котором стоит испанский Windows Server 2003. Следовательно, в программе русские надписи не отображаются, и то, что она выводит в текстовик, тоже получается в странной кодировке. Русифицировать Windows тамошний варианта нет. Что можно сделать?
volvo
30.06.2009 17:18
Использовать Unicode-компоненты тоже нет варианта? TMS, например. Или Дельфи 2009, в которой наконец-то VCL Юникодный... В частности,
может виндоз уже замученый - надо переустановить (иногда помогает - решает всякие глюки) ?
volvo
2.07.2009 17:59
Не надо ничего переустанавливать, проблема не там, где ты думаешь... Почитай статью: DRKB -> Системные функции и WinAPI -> Windows -> Буфер обмена -> Буфер обмена и строки (текст) -> Поместить/получить строку из буфера обмена (Заплатка к стандартным)
По-моему, как раз твой случай. Попробуй сначала повесить копирование в Clipboard на нажатие кнопки, и проверить, правильно ли работает. Если правильно - будешь добавлять HotKey, и по нажатию Ctrl+C делать то же самое...
sheka
2.07.2009 18:14
Цитата(volvo @ 2.07.2009 13:59)
По-моему, как раз твой случай.
да, мой. (только я не понял почему:) ) это от версии винды зависит?
Цитата
Попробуй сначала повесить копирование в Clipboard на нажатие кнопки, и проверить, правильно ли работает. Если правильно - будешь добавлять HotKey, и по нажатию Ctrl+C делать то же самое...
где можна про это почитать?
volvo
2.07.2009 19:41
Цитата
где можна про это почитать?
Про что? Как назначить HotKey? При создании формы - RegisterHotKey, при ее удалении - UnregisterHotKey . И ловить сообщение WM_HOTKEY:
type TForm1 = class(TForm) // ... private procedure WMHotKey(var Message: TMessage); message WM_HOTKEY; // Вот так end;
Цитата
это от версии винды зависит?
Это зависит от того, юникодные ли у тебя контролы, и какой язык установлен для non-Unicode программ.
Unconnected
2.07.2009 19:53
Может, у тебя изначально стояла какая-то пришибленная сборка от какого-нибудь Zver'я?
Volvo, спасибо, компоненты такие правда работают..
Кстати, когда я в 16:53 зашёл в топ, то последние 2 сообщения не отобразились почему то..
sheka
11.08.2009 2:19
Volvo, вот сделал заплатку для буфера, сделал горячую клавишу ctrl+c, а сделать еще горячие клавиши ctrl+x,ctrl+a не получается. Нажмите для просмотра прикрепленного файла Помоги пожалуйста.
Добавлено через 5 мин. И еще вопросик: как сделать эту же заплатку, когда нажимаешь на мемо правой кнопкой мыши и выбираешь копировать или вырезать? Создать собственное контекстное меню или есть вариант полегче?
sheka
11.08.2009 3:01
И еще вопрос: я заметил, что даже если проект сверут, hotkey все равно работает! это можно как-то отключить?
volvo
11.08.2009 3:17
Цитата
сделал горячую клавишу ctrl+c, а сделать еще горячие клавиши ctrl+x,ctrl+a не получается.
Еще бы... Ты не то сделал, второй параметр RegisterHotKey - это не сама кнопка, а индекс операции. Смотри: 1) описываешь собственно идентификаторы горячих клавиш, и сами кнопки:
, а потом регистрируешь их (а в процедуре WMHotKey - проверяешь, какой хоткей пришел, и указываешь, что надо сделать):
procedure TForm1.WMHotKey(var Msg: TWMHotKey); begin case Msg.HotKey of HK_COPY: PutStringIntoClipBoard(form1.MemoTo.Text); HK_SELECTALL: Form1.MemoTo.SelectAll; HK_CUT: ; // тут добавишь, чего тебе надо. Копирование в буфер и очистка Memo end; end;
Если надо и контекстное меню, то те же операции повесишь на PopupMenu, тогда проще будет не выполнять действия сразу в обработчике WMHotKey, а вызывать процедуры меню...
Сразу предупреждаю твой вопрос: "почему по нажатию Ctrl+A текст в Мемо не выделяется?" Он выделяется, только ты этого не видишь, потому что MemoTo у тебя неактивный, а по умолчанию на неактивном Мемо выделение не отображается. Перекинь HideSelection в False, тогда выделение будет отображаться в любом случае.
sheka
11.08.2009 3:49
Цитата
Если надо и контекстное меню, то те же операции повесишь на PopupMenu, тогда проще будет не выполнять действия сразу в обработчике WMHotKey, а вызывать процедуры меню...
т.е. заново самому создать PopupMenu, да?
volvo
11.08.2009 4:26
Да, создать свой PopupMenu... Кстати, если тебе надо, чтобы горячие клавиши работали только когда твоя программа активна (а не свернута и не в фоне) - проще будет добавить на форму TActionList и добавить в него три TAction (не стандартные, а именно простые, нажатием Ins а не Ctrl+Ins!!!). На каждый из них навесить по HotKey-ю, и в обработчике OnExecute написать нужные действия.
Тогда при создании PopupMenu достаточно просто выбрать Action, дальше Дельфи все сделает сама.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.