Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RusFAQ.ru: Программирование на C / C++


РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / C/C++

Выпуск № 473
от 23.07.2006, 00:05

Администратор:Калашников О.А.
В рассылке:Подписчиков: 347, Экспертов: 42
В номере:Вопросов: 5, Ответов: 9


Вопрос № 49358: У меня есть IDispatch одного объекта я вызываю на нём GetIDsOfNames и спокойно нахожу ID, если я это делаю в отдельном созданном потоке, то он у меня ничего не находит!!! Такое ощущение что прав не хватает... в чём проблема не могу понять.... Pleaz, ...
Вопрос № 49370: Здравствуйте!!! Имеется обработчик события FormResize для Form2 void __fastcall TForm2::FormResize(TObject *Sender) { ClientWidth=907; if (ClientHeight<100) ClientHeight=300; } У меня в приложении 10 форм как сдел...
Вопрос № 49406: Уважаемые эксперты я начинающий программист на Си. У меня такой вопрос:Как сделать так, чтобы в поле Edit я при клике на элемент UpDown соответственно получала значение на единицу больше и меньше ранее существующего. Может есть другое поле которое по...
Вопрос № 49413: Здраствуйте. Где можно найти стандартный справочник об ошибках для с++ 3.0 что за ошибка?? abnormal program termination?? где ее искать и как исправлять???...
Вопрос № 49414: Добрый вечер! Подскажите пожалуйста, начал изучать С++, в Visual C++ 6 , пишу пример с книги, но когда запускаю после компиляции то что написал на русском языке в "cout << ..." выводит адбру-кадабру, может надо где-то что добавить...

Вопрос № 49.358
У меня есть IDispatch одного объекта я вызываю на нём GetIDsOfNames и спокойно нахожу ID, если я это делаю в отдельном созданном потоке, то он у меня ничего не находит!!! Такое ощущение что прав не хватает... в чём проблема не могу понять.... Pleaz, HELP!
Отправлен: 17.07.2006, 13:10
Вопрос задал: Sid123 (статус: 1-ый класс)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Татьяна
Здравствуйте, Sid123!
Тут дело не в правах.
Проблема в том, в какой модели создан сам объект.
Т.е. если объект создан в модели Single или ApartMent - его можно использовать исключительно в том потоке, в котором он был создан - иначе он работать не будет!
Работать из разных потоков можно только в том случае, если он создан MultiThreaded.
Еще особенность - создается он реально не при вызове конструктора, а при первом вызове любого метода этого объекта.
Причем, еще особенность, если вы все-таки решили использовать объект из другого потока (не из главного). Необходимо жестко в этом потоке указать модель работы, указывается это примерно так:
CoInitializeEx(NULL,COINIT_APARTMENTTHREADED); - главное указать это в самом начале

---------
Возможно все. И ничего возможно тоже.
Ответ отправила: Татьяна (статус: Студент)
Ответ отправлен: 17.07.2006, 14:03
Оценка за ответ: 5


Вопрос № 49.370
Здравствуйте!!! Имеется обработчик события FormResize для Form2

void __fastcall TForm2::FormResize(TObject *Sender)
{
ClientWidth=907;
if (ClientHeight<100) ClientHeight=300;
}

У меня в приложении 10 форм как сделать так чтобы код этого
обработчика работал для всех 10 форм, чтобы не копировать его
каждый раз в обработчик новой формы FormResize
Отправлен: 17.07.2006, 14:34
Вопрос задал: Rewer8 (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: Rodion
Здравствуйте, Rewer8!

Вообще, у каждой формы, должен быть свой обработчик событий, но если сильно
нужно, то можно вот так:

1) Создаем обработчик события для одного из окон, например Form1

2) Выбираем другую форму, жмем ALT+F11 (вставить хэдр), и выбираем Form1

3) Создаем обработчик события, но в нем пишем только вызов обработчика первого окна: Form1->FormResize(Sender);

Повторяем шаги 2 и 3 для всех окон

Код, общего обработчика у вас немного изменится, смотрите переделаный ваш пример. Код проверить не могу, но думаю сама идея будет ясна.

Приложение:

Ответ отправил: Rodion (статус: 1-ый класс)
Ответ отправлен: 17.07.2006, 20:13

Отвечает: Etenity
Здравствуйте, Rewer8!

Можно вариант Rodion, но тут есть проблемка. Если другие окна не созданы, то делать с ними ничего не получиться.
Я придлагаю вариант с ini файлом. Я всегда люблю его использовать. Плюс тут появляется приемущество, когда програма будет открыта во второй раз, то размеры окон будут прежними.

Для етого нужно подключить inifiles.hpp

#include <inifiles.hpp>

TIniFile *f=new TIniFile(GetCurrentDir()+"\setup.ini"); //по умолчанию ини файл будет сохранятся в каталоге виндовса

А далее спомощю f-> можно работать с файлом.
Типа:
String sss=ff->ReadString("Corect","Minus","5");
ff->WriteString("Corect","Minus",sss);

---------
Вибачте за мій російський...
Ответ отправил: Etenity (статус: 7-ой класс)
Ответ отправлен: 18.07.2006, 02:09


Вопрос № 49.406
Уважаемые эксперты я начинающий программист на Си. У меня такой вопрос:Как сделать так, чтобы в поле Edit я при клике на элемент UpDown соответственно получала значение на единицу больше и меньше ранее существующего. Может есть другое поле которое позволяет менять значени е не только программно но и вручную..? Спасибо за совет...
Отправлен: 17.07.2006, 22:40
Вопрос задала: Koran (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Etenity
Здравствуйте, Koran!
Такое есть в других нестандартных визуальных компонентах например LMD. Их надо устанавливать отдельно. Где взять? Незнаю, у меня на диске были.
А можно так.

Edit1->Text=IntToStr(StrToInt(Edit1->Text)+1);
---------
Вибачте за мій російський...
Ответ отправил: Etenity (статус: 7-ой класс)
Ответ отправлен: 18.07.2006, 02:14
Оценка за ответ: 4

Отвечает: Santana
Здравствуйте, Koran!
Может я не совсем понял суть вопроса (тогда прошу извинения) но мне кажется проше использовать стандартную компоненту Спин
Ответ отправил: Santana (статус: 4-ый класс)
Ответ отправлен: 18.07.2006, 10:51
Оценка за ответ: 5


Вопрос № 49.413
Здраствуйте. Где можно найти стандартный справочник об ошибках для с++ 3.0
что за ошибка?? abnormal program termination??
где ее искать и как исправлять???
Отправлен: 17.07.2006, 23:22
Вопрос задал: HITY (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: gitter
Здравствуйте, HITY!
Abnormal program termination (Аварийное завершение программы)
обычно, появляется когда выделяется недостаточно памяти под динамические массивы.
Сообщения об ошибках можно посмотреть, например, здесь http://chg.fatal.ru/misc/prog-cpp/index.html в 7-й главе
"Как искать и исправлять" - необходимо пошагово пройтись по программе (в отладчике, с помощью пунктов меню "Trace Into" (войти в блок, функцию) , "Step Over" (шаг через блок, функцию), просматривать значения переменных необходимо с помощью пункта меню Watches->Add Watch и указать имя переменной) и посмотреть в какой именно ситуации возникает ошибка.

Удачи!
Ответ отправил: gitter (статус: Студент)
Ответ отправлен: 18.07.2006, 10:34
Оценка за ответ: 5


Вопрос № 49.414
Добрый вечер!
Подскажите пожалуйста, начал изучать С++, в Visual C++ 6 , пишу пример с книги, но когда запускаю после компиляции то что написал на русском языке в "cout << ..." выводит адбру-кадабру, может надо где-то что добавить, или в настройках поменять что бы по русски выводило.
Заранее спасибо.
С уважением Евгений.

Приложение:

Отправлен: 17.07.2006, 23:29
Вопрос задал: МИТРОФАНОВ Е.В. (статус: Посетитель)
Всего ответов: 3
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Etenity
Здравствуйте, МИТРОФАНОВ Е.В.!
Тебе надо програмку keyrus.com. Поищи в инете. Ее надо запускать перед запуском твоей программы в консоле. Но если у тя виндовс на основе NT, тогда могут быть проблемы. Кстати недавно описывали здесь про ету прогу (смотри вопрос 48706

http://redirect.subscribe.ru/comp.soft.prog.cplus,17689/20060715203606/t6=8603=4979/m3794242/-/rusfaq.ru?Step=info&Action=Question&ID=48706

).
---------
Вибачте за мій російський...
Ответ отправил: Etenity (статус: 7-ой класс)
Ответ отправлен: 18.07.2006, 02:25
Оценка за ответ: 5
Комментарий оценки:
Спасибо, скачал буду пробовать (а так стоит ХР-2).

Отвечает: Physicist
Здравствуйте, МИТРОФАНОВ Е.В.!

Просто в консольном приложении текст выводится в OEM кодировке, в то время как в среде VisualStudio он набирается в кодировке Ansi. Есть два выхода из этой ситуации:
1. Набирать текст в любом редакторе, поддерживающем OEM кодировку (кажется, Bred3 поддерживает, может есть еще).
2. При выводе на экран перекодировать текст:

#include "windows.h"
#include "iostream.h"

LPSTR A2O(LPCTSTR text)
{
static TCHAR buffer[1000]; //Думаю, 1000 символов хватит, в консольные приложениях редко выводятся более длинные строки
CharToOem(text,buffer);
return buffer;
);

main()
{
cout<<A2O("Проверка");
}
Ответ отправил: Physicist (статус: 6-ой класс)
Ответ отправлен: 18.07.2006, 09:25
Оценка за ответ: 5
Комментарий оценки:
Спасибо большое за ответ, но если не затруднительно можно этот кусок программы вставить в мою, а я потом посмотрю как должно быть, а то что-то ошибки он выдает, может я не туда вставляю.

Отвечает: arctic
Здравствуйте, МИТРОФАНОВ Е.В.!
Можно поступить таким способом:
...
const int MessageCount = 2;
char Msg[MessageCount][50] = {
"Среднее значение равно: ",
"Оценки не введены"
};
//Русификация сообщений
for(int i=0; i<MessageCount; i++){
CharToOem(Msg[i], Msg[i]);
}
...
cout << Msg[0]; //Выведет русский текст
...
Наверное ето единственний способ решить вашу проблему.
Ответ отправил: arctic (статус: 1-ый класс)
Ответ отправлен: 19.07.2006, 11:36
Оценка за ответ: 5
Комментарий оценки:
Спасибо большое за ответ, но если не затруднительно то можно полностью программу с вашей доработкой, а я потом посмотрю как должно быть.


Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2006, Портал RusFAQ.ru, Россия, Москва.
Идея, дизайн, программирование: Калашников О.А.
Email: adm@rusfaq.ru, Тел.: +7 (926) 535-23-31
Авторские права | Реклама на портале
Версия системы: 4.34 от 01.06.2006
Яндекс Rambler's Top100

В избранное