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

Инвестиции: Вопрос-Ответ

  Все выпуски  

C/C++ Вопрос-Ответ Выпуск № 7


Информационный Канал Subscribe.Ru

C/C++ Вопрос-Ответ

Выпуск № 7
Cайт : SoftMaker.com.ru
Архив рассылки : SoftMaker.com.ru
Количество подписчиков : 913
В этом выпуске
Анонс
Проект "Работа для тестировщиков и QA. Вакансии ведущих компаний."
(http://jobs.software-testing.ru) представляет свою рассылку.

Наша рассылка это:
  • -- Вакансии ведущих компаний
  • -- Работа для тестировщиков и инженеров качества
  • -- Работа в России, Белоруссии, Украине и странах Балтики
  • -- Проект сервера тестировщиков и инженеров качества (http://software-testing.ru)
Работа для тестировщиков и QA.
Вакансии ведущих компаний.

Подписаться по почте
От ведущего

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

С уважением, Вахтуров Виктор.

Подписчикам

Чтобы заранее разрешить возможные недоразумения, прошу Вас помнить, что вопросы публикуются в рассылке только один раз. Поэтому, если Вам не ответили в этом выпуске, или ваш вопрос не был опубликован, пришлите его еще раз. Не стоит отвечать на вопрос, который был задан в предыдущем выпуске (за исключением случая, когда он снова опубликован в этом).

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

Вопросы

Для того, чтобы задать свой вопрос, кликните этой ссылке (вопрос будет опубликован в следующем номере).
Вы можете задавать любые вопросы, касающиеся программирования на языке C и C++. Это могут быть вопросы, касающиеся как конструкций языка, применения библиотек классов, шаблонов (таких как MFC или STL), использования компиляторов, так и самой философии программирования на C или C++. Здесь нет ограничений - спрашивайте и получайте ответы.

Вопрос № 21 ( Валера )

Где бесплатно скачать C Builder 6 ?

Ответить на вопрос

Вопрос № 22 ( Yulia )

Здравствуйте,
Почему в с++ выскакивает окошко cpu при использовании двумерного
массива типа AnsiString a[1,20], когда он заполняется значениями.
Когда заполняется "первая часть" a[0,0]-a[0,20], то программа
выполняется нормально, когда "вторая часть" a[1,0]-a[1,20] то
выскакиивает это самое окно. Подскажите, что нужно делать?

Ответить на вопрос

Вопрос № 23 ( Denis Kravtsoff )

Glad to greet!

Наболевший вопрос, связанный с C++ Builder 6.
Имеется форма, на форме TImage. При любой отрисовке на Canvas этого
самого TImage можно заметить моргание всей области изображения
(попытка использовать внеэкранный буфер (второй TImage, на который всё
выводится, а потом копируется на форму) результатов не принесла -
всё то же мерцание). Также пробовал вызывать методы рисования из
FormPaint, но всё без изменений.
Судя по всему, при обновлении вся область под Canvas в начале
перерисовывается цветом форма, а затем поверх этого выводится всё
остальное. Где отловить этот момент, как отключить подобное
автоматическое обновление области формы?
Документация по BCB на этот счёт крайне скупа. Заранее спасибо.

ЗЫ Помогает включение transparent для TForm, но при этом общая
скорость перерисовки заметно падает, что в общем-то и понятно.
Т.е. такое решение не является приемлемым.

Alles Gute!

...In Code We Trust...

Ответить на вопрос

Вопрос № 24 ( atavin_ta )

Отправьте мне, пожалуйста, любой исходник на С/С++, использующий OpenGL.
Можно просто демо-программу, выводящую на экран одно какое-нибудь изменяющееся или движущееся изображение (водную гладь, вращающийся предмет, качающеееся лицо). Желательно с комментариями, чтобы я мог разобраться, как описать свое изображение и положение камеры. Тарас. atavin_ta@pochta.ru.

Ответить на вопрос

Вопрос № 25 ( atavin_ta )

Я немного не понимаю, как сделать не мерцающую анимацию в C++. Попробовал в событии WM_PAINT рисовать только новые кадры, а старые стирать с помощью InvalidateRect(hwnd,NULL,TRUE), но в результате начинает изображение начинает мерцать, причем мерцают больше неподвижные фрагменты, чем подвижные. Больше всего мерцает кайма вокруг анимируемой области. Попробовал поменять InvalidateRect(hwnd,NULL,TRUE) на InvalidateRect(hwnd,NULL,FALSE), в результате движущиеся объекты начинают оставлять следы. Взял готовый исходник, стираюший старое положение движущихся объектов перед их перерисовкой. после компиляции и запуска стали мерцать именно эти объекты, причем непрерывно, независимо от того, движутся ли они в данный момент, или остановились. Пробовал написать то же самое в делфи, получил вообще призраки движущихся объектов. их мерцание просматривается плохо, но зато частота мерцания такова, что сами объекты оказываются прозрачными. Задача -- прорисовка игрового поля информационного столбца за пределами игрового поля в арканоиде -- игре с прыгающим шариком, разбивающем ящики. Шарик отскакивает от верхней и боковых границ игрового поля, от ящиков и от узкой площадки в нижней части игрового поля, перемещаемой мышью. Площадка выпукла, что позволяет в зависимости от точки касания шарика изменять угол его отскока, либо площадка плоская, но при отскоке шарика от нее законы упругого соударения нарушаются виртуальным контактным полем рассеяния. Внешний вид главного окна программы задуман так, что возможность деления его на дочерние окна представляется сомнительной. Вкладываю два варианта заготовки *. В них еще нет шарика и ящиков, есть только площадка, поле и кайма вокруг него. После загрузки надо нажать . Двойное нажатие -- выход из программы. В Arc1 площадка оставляет след, в Arc2 наблюдается мерцание. Подскажите, как исправить описанные глюки. Тарас.

* Примечание ведущего.
  Как Вы можете догадаться, вложенные файлы, присылаемые с вопросами
  или ответами по  многим причинам не могут  быть приложены к письму
  рассылки, поэтому впредь  прошу такие файлы  выкладывать  где либо
  для скачивания, а в письмах давать ссылки на них.

Ответить на вопрос

Вопрос № 26 ( rasul yusupov )

Помогите! Как вычисляется значение формулы типа P2*(P3-P4)/P5 - P6,
если эта формула находится в какой-то поле базы данных.
Заранее спасибо!

Ответить на вопрос

Ответы

Ниже приведены вопросы предыдущего выпуска и ответы на них.

Вопрос № 17 ( Vladimir Vetlugin )

Добрый день!

Очень удобная штука - закладки для настройки каких либо параметров
программы, появляющиеся при выборе пункта меню "Свойства" иконки,
например IE6.
А как добавить новые закладки к стандартным для своей программы?
или вообще заменить вид этого пункта меню?
С builder 5.0.

С уважением, Владимир

Ответов нет
Вопрос № 18 ( Viktor Ko )

Добрый день!
Я недавно начал изучать Borland C++ Builder 6.0. И у меня такой вопрос к экспертам: после компиляции запускаю *. exe файл на другом компе и выдается сообщение , что не найден файл vcl60.bpl, rtl60.bpl, cc3260mt.dll и еще просит пару библиотек. Так вот, как сделать чтобы не выдавалось подобное сообщение, может в настройках компилятора, а может как-то можно включать эти библиотеки в исполняемый файл. Заранее благодарен.

Ответ ( Alexey Verlinger )

Нужно отменить следующие опции диалогового окна "Project\Options...":
- "Use Dynamic RTL" на закладке "Linker"
- "Build with runtime packages" на закладке "Packages"

Lexxa

Ответ ( mikle )

Меню Project->Options закладка Linker отключить Use dynamic RTL, закладка Packages отключить Build with runtime packages

Ответ ( NiRal )

Зайди в меню Project->Options->Compiler и нажми кнопку «Release» для того чтобы убрать отладочную информацию.
Потом зайди в Project->Options->Linker и убери флажок «Use dynamic RTL» чтобы отключить использование динамической библиотеки.
Последнее: в меню Project->Options->Packages сними флажок «Build whith runtime packages» для отключения использования пакетов времени выполнения.
Затем перекомпилируй проект: Project->Build <название проекта>
Все. Можешь запускать свой *.exe на любой машине, начиная с i486.
Но, необходимо учитывать, что в некоторых случаях выгоднее и правильнее будет поставлять приложение вместе с динамической библиотекой (RTL) или пакетами времени выполнения.
Алесей Л

Ответ ( Роман Самарченко )

Здравствуйте Viktor Ko !
Когда-то давно сталкивался с Borland C++ Builder 6.0 и делал следующие операции перед распространением своего приложения:
1) Так вот, делается следующее - заходим в Project --- Options --- Packages и там снимаем галочку с Build with runtime packages
2) Кроме этого, надо зайти в Project --- Options --- Linker и снимаем галочку с Use Dynamic RTL.
P.S. конечно же надо сделать проект Release

Ответ ( Maria Shpileva )

У меня перед глазами нет в данный момент Builder' а, поэтому поробую ответить так. Ваше приложение может, скажем так, иметь две версии - отладочную(debug) и конечную (release). По умолчанию - отладочная. При этом компилятор генерирует различные дополнительные файлы, без которых программа выполняться не сможет. Для отладки это нужно и удобно. В деталях не будем сейчас об этом. Когда Вам, наконец, потребуется получить конечную версию программы, необходимо особым образом собрать проект. Для этого найдите в меню опции проекта. Там в одной из закладок будут кнопки "Debug" и "Release". Кроме того, ещё некоторые опции. Но Ваш проект, насколько я понимаю, пока достаточно прост, так что не обращайте внимания на эти опции и просто нажмите кнопку "Release".
Ваш проект после этого должен запуститься на др машине :). Если нет, попробуйте поразбираться с опциями, но скорее всего это не потребуется. Учтите, что если Вашему приложению требуются какие-то файлы - текстовый файл для ввода данных, например - Вы должны его поставлять вместе с .ехе файлом приложения. Путь к этому доп файлу надо прописать относительный.

С уважением, Шпилёва Мария

Ответ ( Wlad )

Меню: Project | Options | Packages снять галочку Build With runtime packages;
Меню: Project | Options | Lincer снять галочку Use dinamic RTL Перекомпилить
Wlad См. по Borland http://wladm.narod.ru

Ответ ( Белов Н.С. )

Hello Viktor Ko,

Зайди Project->Options->Закладка Packages
и сними галочку Build with runtime packages
Вопрос № 19 ( Vlad )

Будет ли продолжение линейки C++ Builder 6?
Спасибо.

Ответов нет
Вопрос № 20 ( Den_AZ )

Здравствуйте !
Рад что могу задать вопрос по C++.
Я пишу (точнее только учусь писать) на VC.
Возникла проблема с RichEdit.
Я создаю приложеине на основе диалога и добавляю в диалог
rich edit и кнопки. Когда приложение компилируется - то
ошибок нет вообще. Но само приложение не запускается.
То есть окно даже не показывается (и его нет в диспетчере задач).
Но что интересно (это я выяснил экспериментальным путем)
если убрать Rich Edit из диалога, то приложение запускается.
Буду очень благодарен, если кто нибудь подскажет в чем тут
дело и что я неправильно делаю.

Да, кстати, я пробовал создавать переменную для этого RichEdit-а
Class Wizard-ом. Но все равно ничего не получилось.

Ответ ( Лисенок )

RichEdit требует загрузки одной из библиотек riched32.dll (1.0),
riched20.dll (2.0).
Если использовать апи, то перед созданием окна вызовите
LoadLibrary("riched32.dll"), не забудьте в конце работы ее выгрузить.
В MFC есть функции AfxInitRichEdit() - это для версии 1.0 Ричэдита, и
AfxInitRichEdit2() - для версии 2.0.

С уважением, Лисенок.

Ответ ( CPS )

BOOL C********App::InitInstance()
{
AfxEnableControlContainer();
#ifdef _AFXDLL
        Enable3dControls();
#else
        Enable3dControlsStatic();
#endif
        AfxInitRichEdit();//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!Надо добавить
        //вызов этой функции
        CQqqDlg dlg;
        m_pMainWnd = &dlg;
        int nResponse = dlg.DoModal();
        if (nResponse == IDOK){ }
        else if (nResponse == IDCANCEL){ }
        return FALSE;
}

С уважением, CPS

Ответ ( Azdar Mamaev )

Привет
Нужно инициализировать контрол(Richedit)
В функции InitInstance() (файл ИМЯТВОЕЙПРОГИ.H)
Вызови функцию AfxInitRichEdit( );
И все будет ОК

Ответ ( aLeXx )

Попробуй перед созданием окна/диалога вставить следующий код:

#if (_RICHEDIT_VER >= 0x0200)
       ::LoadLibrary(_T("RICHED20.DLL"));
#else
       ::LoadLibrary(_T("RICHED32.DLL"));
#endif

Ответ ( mikle )

Необходимо вызвать AfxInitRichEdit( ), например, в InitInstance()

Ответ ( mikle )

Если Вы хотите писать на VC, зайдите на sources.ru или codeguru.com там много чего есть интересного.
В общем случае попробуйте поискать на, скажем, aport.ru слово RichEdit.
Удачи!

Калашников Михаил

Ответ ( _ser_oviont )

в msdn написано, что надо перед отображением диалога вызвать функцию AfxInitRichEdit

Ответ ( Maxim Zhigadlo )

Читайте MSDN, ибо он есть рулез.

To use a RichEdit control, you must first call AfxInitRichEdit2 to load the RichEdit 2.0 Control (RICHED20.DLL), or call AfxInitRichEdit to load the older RichEdit 1.0 Control (RICHED32.DLL).

Для не знающий английский, перед использованием надо вызвать
AfxInitRichEdit2() либо
AfxInitRichEdit()

Для 2-ой и 1-ой версии RichEdit-ов соответственно.

Делать это необходимо до создания окна диалога.

Всегда Ваш, Maxim

Ответ ( bvb )

Передлагаю попробовать следующий вариат
RichEdit добавить программно а не с панели инструментов
В производном классе от CDialog в заголовке определи переменную
CRichEditCtrl ed;
а впроцедуре инициализации диалога активируй переменную

.....::OnInitDialog();
{
 .
 .
 .
   ed.Create(WS_CHILD|WS_VISIBLE|WS_BORDER|ES_AUTOVSCROLL|ES_MULTILINE,
   CRect(10,85,880,320),this,IDC_RICHEDIT_ED);
 .
 .
}

Не забудь определить ресурс IDC_RICHEDIT_ED

Best regards, bvb
Всего доброго. До встречи в следующем номере.

http://subscribe.ru/
http://subscribe.ru/feedback/
Подписан адрес:
Код этой рассылки: comp.soft.prog.cppqa
Отписаться

В избранное