Здравстуйте экспреты! Подскажите, пожалуйста, как можно сделать поддержку приложениями Unicode. Пример: Если в английской версии XP запустить notepad из русского дистрибутиа, то все отображается на великом и могучем, но если запустить программу написанную на Delphi, в которой есть русские символы, то они отображаются некорректно(закорючки).
Добрый день, Gerand! U memo yest svostvo dlya izmeneniya kodirovki. Prosto viberi iz spiska to chto tebe nujno.
Ответ отправлен: 12.05.2004, 08:18 Отправитель: THE_PRO Отвечает vitya
Добрый день, Gerand! Так ведь notepad откомпилирован с использованием юникода, а ваша программа скоее всего нет. Откомпилируйте ее в юникоде и все будет тип топ. Ответ отправлен: 12.05.2004, 09:29 Отправитель: vitya Отвечает Boriss
Здравствуйте, Gerand! Я работаю не в XP, поэтому может и ошибаюсь, есть там особенности ... Но надо бы сказать, в каком окне "закорючки" появляются? А в окне редактора что? Если тоже закорючки, то надо установить шрифт руссифицированный. В окне редактора - правая кнопка мыши - Properties - Display. Вот видите, даже не ясно, нужно так отвечать или нет? Ответ отправлен: 11.05.2004, 19:55 Отправитель: Boriss
Вопрос № 1530
> Когда на форму ставишь RichEdit , то автоматически у него уже есть меню и работаюттгорячие клавиши. Скажите, пожалуйста, какие сообщения отсылает Ctrl+Ins, Ctrl+V и Paste в контекстном меню по правой кнопке мыши? Потому что это точно не WM_PASTE. > > > Вопрос отправлен: 09.05.2004, 01:43 > > Отвечает Boriss > > Добрый день, Lite! > 0) У меня атоматически нет :(( - не везет > 1) Ну уж контекстного меню у него по умолчанию нет. Так что какое используете Вы? > 2) И надо самому отрабатывать сообщения Что-то я не понял ответа. Или Вы не поняли вопроса. Объясняю более подробно: Borland C++ Builder 5.02. (win xp) Берете форму, кидаете на нее TEdit, комплилите, запускаете, подводите к Edit мышь, жмете правую кнопку - появляется контекстное меню (с пунктами Undo, Copy, Cut etc.). Меня интересует, какие сообщения отсылаются
при выборе одного из пунктов этого меню. Как вообще это отследить? Опытным путем выяснил, что это не WM_PASTE на выбор пункта Cut. Я как раз и хочу _сам_ обрабатывать эти сообщения.
Доброе время суток, Lite! Понять мудрено... 1) Вы не написали, что дело в C++Builder'e (Но это не важно - все равно отрабатывают Windows) 2) Вы написали, что RichEdit, а сейчас Edit Но все это не важно. Просто прошу поточнее формулировать вопрос. Давать больше информации 3) И как WM_PASTE может быть связано с Cut? Paste - оно и в Африке Paste (Вставить). Cut - вырезать Но тем не менее, сейчас вопрос ясен. Отвечаю {$EXTERNALSYM WM_CUT} WM_CUT = $0300; {$EXTERNALSYM WM_COPY} WM_COPY = $0301; {$EXTERNALSYM WM_PASTE} WM_PASTE = $0302; {$EXTERNALSYM WM_CLEAR} WM_CLEAR = $0303; {$EXTERNALSYM WM_UNDO} WM_UNDO = $0304;
Приложение: Ответ отправлен: 13.05.2004, 13:53 Отправитель: Boriss
Вопрос № 1531
Привет! Может кто-нибудь может дать ссылку на русский справочник по WinApi, только please не по именам функций, а по разделам(например "Окна ","Экран" ...) Thanks
Здравствуйте, Толик! Есть такая "Русская спpавка по Windows API". Если нужно давай мыло. Ответ отправлен: 15.05.2004, 20:45 Отправитель: Pawel Отвечает sir henry
Приветствую Вас, Толик! Если в переложении на Дельфи, то вот ссылка: http://www.soobcha.ru/rushelp лично мне нравиться :). Для Ьилдера вот: http://www.bcbdev.ru И тот и другой справочники неполные, но регулярно обновляются. Ответ отправлен: 12.05.2004, 07:32 Отправитель: sir henry Отвечает Boriss
Здравствуйте, Толик! Нарпример, Тарас Сорока делал перевод. Его сайт http://www.bcbdev.ru/ Он и рассылку делает http://anatolix.naumen.ru/win32books.htm http://mexmat.aaanet.ru/singlemusor.shtml?WinAPI Еще что-то было платное. Если нужно, то напишите - поищу адрес в архивах... Ответ отправлен: 14.05.2004, 11:21 Отправитель: Boriss
Вопрос № 1533
Здравсвтуйте!!! Я недавно начал учить С++ и С++ Builder и сегодня встретился с такой проблемой... Я хотел организовать работу с потоками, но у меня не получается создать объект класса TThread в BCB. Я не пойму почему. Объясните пожалуйта почему и как исправить ситуацию!
Здравствуйте, Dmitry! А как вы запускаете? Какие ошибки выдает компилятор (как вы поняли, что поток не запускается). -------------------------- -=Experts helper: testmode=- Ответ отправлен: 15.05.2004, 08:40 Отправитель: samum2000 Отвечает sir henry
Добрый день, Dmitry! Неизвестно каким образом Вы пытаетесь создать объект, поэтому и неизвестно, где Вы делаете ошибку. Вы руководствуетесь каким-то примером? Ответ отправлен: 13.05.2004, 10:35 Отправитель: sir henry Отвечает THE_PRO
Доброе время суток, Dmitry! A u tebya kakoy BCB? Neujeli 6.0 Ответ отправлен: 13.05.2004, 16:06 Отправитель: THE_PRO Отвечает CrackLab
Добрый день, Dmitry! Поробую объяснить как можно короче и понятнее. Когда вы пытаетесь создать объект класса TThread, вы наверно пишете: TThread *trd = new TThread(); В этом случае компилятор выдаст вам 2 ошибки, сказав, что во-первых, невозможно создать образец абстрактного класса TThread, и во во-вторых, что класс является абстрактным, потому что есть функция, определенная как: __fastcall TThread::Execute() = 0; Функция TThread::Execute() является чистой виртуальной функцией, т.е. не имеет тела (кода) внутри класса TThread. Чистая виртуальная функция объявляется как: ClassName::FuncName(params) = 0; Если в классе есть хотя бы одна виртуальная функция, то такой класс называется абстрактным. Невозможно создавать объекты абстрактного класса. Необходимо наследовать абстрактный класс, объявить в нем ту функцию, которая в родительском классе
является виртуальной, и при необходимости добавить конструктор, передающий параметры конструктору родительского класса. Поэтому мы должны унаследовать свой класс от TThread. В .h файле создадим такой класс: class TDerivedThread : public TThread { void __fastcall Execute(); }; и попытаемся динамически создать объект этого класса: TDerivedThread *trd = new TDerivedThread(); Увидим сообщение об ошибке, что компилятор не может сгенерировать конструктор по умолчанию для объекта класса TDerivedThread Создадим конструктор: class TDerivedThread : public TThread { void __fastcall Execute(); public: TDerivedThread() {}; }; Увидим сообщение об ошибке, что невозможно инициализировать базовый класс TThread. Это происходит потому, что при наследовании и создании объекта, будут вызываться конструкторы всех базовых классов, начиная со старшего. Т.е. в
нашем случае при создании объекта класса TDerivedThread будет вызван конструктор классса TThread. Конструктор класса TThread определен как: __fastcall TThread(bool CreateSuspended); Т.е. проблема в том, что он требует параметр bool CreateSuspended. Но при создании класса TDerivedThread мы этот параметр не передаем. Принято соглашение о том, как поступать в этой ситуации. Конструктору "самого дочернего" класса передаются все параметры, необходимые для передачи конструкторам базовых классах, и эти параметры передаются конструкторам базовых классов в такой форме (на примере TThread): TDerivedThread(bool CreateSuspended):TThread(CreateSuspended) { }; Т.е. ставится двоеточие, потом имя базового класса (оно же - имя конструктора базового класса) и в скобках необходимые параметры для передачи, которые берутся из параметров конструктора дочернего класса. После
такого объявления конструктора класса TDerivedThread и динимического создания объекта этого класса: TDerivedThread *trd = new TDerivedThread(false); Останется только реализовать тело функции Execute(), иначе мы получим ошибку (Linker Error) В теле функции Execute() и напишем код, который будет вызываться конструктором класса TThread (автоматически) и будет выполняться в отдельном потоке. Т.е. остается дописать: void __fastcall TDerivedThread::Execute() { // Наши действия } И программа будет работать. Надеюсь объяснил понятно =) Ответ отправлен: 12.05.2004, 19:02 Отправитель: CrackLab
Форма отправки вопроса
Внимание!
Мы рекомендуем открывать рассылку в программе Internet Explorer 5.0+
или отправлять вопросы с сайта по адресу:
http://rusfaq.ru/cgi-bin/Message.cgi.