Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Делфи _ Псевдографика

Автор: sheka 8.06.2009 1:36

при выводе в тхт получаются иероглифы. как зделать по-нормальному?

Автор: volvo 8.06.2009 1:48

TXT чем открываешь? Windows-Блокнотом? Сохраняется-то в CP866, значит и просматривать надо в этой же кодировке...

Автор: sheka 8.06.2009 1:55

но блокнот же такой не поддерживает!

тоесть никак нельзя?
или какой-то навороченій редактор устанавливать?

Автор: volvo 8.06.2009 2:01

http://forum.sources.ru/index.php?showtopic=41972&view=findpost&p=690195 , используй функцию OemToAnsi, которая там описана... Может, сработает... А может и нет, если псевдографика вообще не поддерживается Win-кодировкой

P.S. Нет, не сработает... Нет псевдографики в Win-кодировке... Открывай Far-ом, или еще чем-нибудь, что позволяет работать с CP866...

Автор: OCTAGRAM 8.06.2009 20:46

WordPad умеет ОЕМ

Автор: SKVOZNJAK 9.06.2009 0:26

Можешь моей утилитой открывать через локальную менюшку. IBM 866 у неё родная кодировка.
http://kran100.narod.ru/hkj/gleanor103.zip

Автор: sheka 22.06.2009 19:03

вот, сделал такую программку на делфи.
меняет текст при неправильной расскладке клавиатуры.
Прикрепленный файл  Koder.zip ( 233.41 килобайт ) Кол-во скачиваний: 407

в файл выводит все хорошо, а если вводить английские символы(в первый мемо), потом скопировать русские(из второго мемо) и вставить их, например, в тот же блокнот - получаются иероглифы. почему?

Автор: 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

заменил. надеюсь в этот раз уже на то что надо smile.gif
особенность такова, что строка при выводе в файл сохраняется в нормальной кодировке, а если эту же строку вывести в мемо, скопировать и вставить в блокнот - получаются иероглифы.

вроде виндоз русский. Borland Delphi Enterprise 7.

Автор: volvo 24.06.2009 2:10

Ты вынудил меня просто зайти под Windows...

Попытаюсь воспроизвести описанное тобой поведение... Смотри, что происходит: WinXP SP3, английская, запускаю твой EXE-шник и пытаюсь результат перекодировки скопировать в NotePad. Результат http://picasaweb.google.com/volvo71/Programs#5350601127438314898

Как это понимать? Где проблема?

Автор: sheka 24.06.2009 3:12

если не ошибаюсь у меня SP2 русский. при выполнении аналогичных действий - все равно закарлючки, даже нотепад скачал - и в нем тоже (даже ворд не понимает).
кстати, расскажи как это ты так видео делаешь?

Автор: volvo 24.06.2009 3:47

Цитата
кстати, расскажи как это ты так видео делаешь?
Я пользуюсь http://camstudio.org/

Автор: Unconnected 30.06.2009 16:32

У меня возникла подобная проблема, поэтому решил написать сюда:)

Есть у меня, значит, программа, и запускаю я её на удалённом сервере, на котором стоит испанский Windows Server 2003. Следовательно, в программе русские надписи не отображаются, и то, что она выводит в текстовик, тоже получается в странной кодировке. Русифицировать Windows тамошний варианта нет. Что можно сделать?

Автор: volvo 30.06.2009 17:18

Использовать Unicode-компоненты тоже нет варианта? TMS, например. Или Дельфи 2009, в которой наконец-то VCL Юникодный... В частности,

  Memo1.Lines.SaveToFile('test.txt', TEncoding.Unicode);
мне только что сохранило содержимое Memo1 в Юникодный файл, все три языка читаются оттуда прекрасно...

Автор: sheka 2.07.2009 17:51

вот результат моей проги:
Прикрепленное изображение

может виндоз уже замученый - надо переустановить (иногда помогает - решает всякие глюки) ?

Автор: 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? При создании формы - http://msdn.microsoft.com/en-us/library/ms646309%28VS.85%29.aspx, при ее удалении - http://msdn.microsoft.com/en-us/library/ms646327%28VS.85%29.aspx. И ловить сообщение 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 не получается. Прикрепленный файл  Koder.rar ( 629.68 килобайт ) Кол-во скачиваний: 357
Помоги пожалуйста.


Добавлено через 5 мин.
И еще вопросик: как сделать эту же заплатку, когда нажимаешь на мемо правой кнопкой мыши и выбираешь копировать или вырезать? Создать собственное контекстное меню или есть вариант полегче?

Автор: sheka 11.08.2009 3:01

И еще вопрос: я заметил, что даже если проект сверут, hotkey все равно работает! это можно как-то отключить?

Автор: volvo 11.08.2009 3:17

Цитата
сделал горячую клавишу ctrl+c, а сделать еще горячие клавиши ctrl+x,ctrl+a не получается.
Еще бы... Ты не то сделал, второй параметр RegisterHotKey - это не сама кнопка, а индекс операции. Смотри:
1) описываешь собственно идентификаторы горячих клавиш, и сами кнопки:
const
HK_COPY = 1;
HK_SELECTALL = 2;
HK_CUT = 3;

MyHotKeyCopy = ord('C');
MyHotKeySelectAll = ord('A');
MyHotKeyCut = ord('X');
, а потом регистрируешь их (а в процедуре 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;

procedure TForm1.FormCreate(Sender: TObject);
begin
RegisterHotKey(Form1.Handle, HK_COPY, MOD_CONTROL, MyHotKeyCopy);
RegisterHotKey(Form1.Handle, HK_SELECTALL, MOD_CONTROL, MyHotKeySelectAll);
RegisterHotKey(Form1.Handle, HK_CUT, MOD_CONTROL, MyHotKeyCut);
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
UnRegisterHotKey(Form1.Handle, HK_COPY);
UnRegisterHotKey(Form1.Handle, HK_SELECTALL);
UnRegisterHotKey(Form1.Handle, HK_CUT);
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, дальше Дельфи все сделает сама.