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

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


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

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

Выпуск № 570
от 02.11.2006, 09:05

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


Вопрос № 60304: Здравствуйте, эксперты. Такой вопрос: создаю список CListBox со стилем owner draw fixed, переопределяю функцию DrawItem. В ней просто вывожу текст нужным цветом. Но почему-то все строки в списке оказываются одинаковыми, равными последней строке, введ...
Вопрос № 60346: Доброе время суток! Компилятор Borland C++ 5.02 выдал такое сообщение. (см. вложение) Модель памяти стояла и Large и Huge. ВЫставлял параметры на i386, i486 и на Pentium. Что там еще ему надо? Количество строк кода большое (> 2500...
Вопрос № 60380: По поводу ответа Bob'a Johnson'a на вопрос №59.664, У меня стоит WinXP SP2, хотел поставить MS Visual Studio 2005, но он упорно не ставится, матерится, не могу понять что нужно. могу отправить log на мыло если потребуется. Помогите пожалуйста!!!<br...
Вопрос № 60386: Подскажите, пожалуйста, как в Borland C++ Builder 6.0 сделать следующую вещь: есть компонент DBGrid, как сделать так, чтобы чтобы заголовки столбцов не умещающиеся на одной строке располагались на нескольких строках?...
Вопрос № 60387: Здравствуйте, пожалуйста, пришлите название WinAPI функции вместе с описанием ее параметров и возвращаемогозначения, которая определяет не открыт ли трей CD-ROMа в данный момент, а также имена *.h и *.lib файлов, в которых она описана....

Вопрос № 60.304
Здравствуйте, эксперты. Такой вопрос: создаю список CListBox со стилем owner draw fixed, переопределяю функцию DrawItem. В ней просто вывожу текст нужным цветом. Но почему-то все строки в списке оказываются одинаковыми, равными последней строке, введенной с помощью AddString.
Отправлен: 26.10.2006, 23:09
Вопрос задал: Selim (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Torsten
Здравствуйте, Selim!
У тебя ошибка в коде в DrawItem. Ты всегда используешь один и тот же указатель на строку.
Правильное получение строки должно быть таким:
LPCTSTR lpszText = (LPCTSTR) lpDrawItemStruct->itemData;
Теперь вот выводи как нужно lpszText.

А вообще для этих целей нужно использовать другую функцию.
=WM_CTL_COLOR - такой обработчик заведи в message handler
HBRUSH CMyCtrl::CtlColor(CDC* pDC, UINT nCtlColor)
{
pDC->SetBkMode(TRANSPARENT);
pDC->SetTextColor(m_text_color); // m_text_color = RGB(255,0,0) - например

return (HBRUSH)m_bg_brush; // это кисть для закраски фона
}
Если еще захочешь фон закрасить можно использовать свою кисть. Ее нужно иметь как экзепляр класса и предварительно создать.
class CMyCtrl {
...
CBrush m_bg_brush;
};

CMyCtrl::CMyCtrl () // конструктор
{
m_bg_brush.CreateSolidBrush( RGB(0,0,255) );
}

Если фон закрашивать не хочешь, то вызывай стандартный обработчик:
return CListBox::CtlColor(pDC, nCtlColor);

Для этого случая, кстати, даже свойство owner draw не нужно, но и свои ограничения есть. Для выделения другим цветом выделенного элемента нужно действовать через DrawItem.
---------
#define MAGIC_NUMBER 0xdeface
Ответ отправил: Torsten (статус: 2-ой класс)
Ответ отправлен: 27.10.2006, 09:38


Вопрос № 60.346
Доброе время суток!
Компилятор Borland C++ 5.02 выдал такое сообщение. (см. вложение)

Модель памяти стояла и Large и Huge. ВЫставлял параметры на i386, i486 и на Pentium.
Что там еще ему надо? Количество строк кода большое (> 25000...а будет еще больше).
Можно ли такую ошибку победить? Кроме этого нет никаких других. Даже предупреждений.
Правда, не знаю что будет в результате. Может все-таки повезет, и системный блок не взорвется)))))
Спасибо!!!

Приложение:

Отправлен: 27.10.2006, 10:32
Вопрос задал: Joe Black (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Delph
Здравствуйте, Joe Black!

А как организована структура программы? Проекты такого масштаба обычно делят на части, например - готовят самодостаточные классы, каждый из которых можно скомпилить в свою библиотеку (если класс большой) или объединить с несколькими связанными по смыслу (только для небольших классов, и то не всегда). После этого можно досконально проверить каждый модуль, и если все они работают - объединять в цельный проект. Borland C++ 5.02 должен уметь создавать *.dll - библиотеки, должен уметь компилить и exe-шники, цепляющие dll. При таком подходе Вам будет намного проще локализовать ошибку, а локализовав - устранить (проверять и при необходимости изменять придётся относительно небольшие модули).
Ответ отправил: Delph (статус: 2-ой класс)
Ответ отправлен: 27.10.2006, 11:46

Отвечает: Vaga
Здравствуйте, Joe Black!
Как-то (непомню где) мелькала подобная ошибка. Было написано, что возникает это в следствие увеличения размера исходного кода. Думаю, что ошибку можно победить, если использовать динамические библиотеки.
---------
Ошибка становится ошибкой, когда рождается как истина. Станислав Ежи Лец
Ответ отправил: Vaga (статус: 5-ый класс)
Ответ отправлен: 27.10.2006, 20:01


Вопрос № 60.380
По поводу ответа Bob'a Johnson'a на вопрос №59.664, У меня стоит WinXP SP2, хотел поставить MS Visual Studio 2005, но он упорно не ставится, матерится, не могу понять что нужно. могу отправить log на мыло если потребуется. Помогите пожалуйста!!!
Отправлен: 27.10.2006, 17:06
Вопрос задал: Lamer (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: Jadd
Здравствуйте, Lamer!
Шлите. У меня примерно аналогичная конфигурация и студия стоит как вкопаная.
---------
Если в сердце дверь закрыта, нужно в печень постучаться
Ответ отправил: Jadd (статус: Профессионал)
Адрес: Санкт-Петербург
WWW: http://www.sport-diary.ru
ICQ: 28260749
----
Ответ отправлен: 27.10.2006, 17:12

Отвечает: Bob Johnson
Здравствуйте, Lamer!
ты лучше напиши, что именно "материт" студия? если ошибка "a problem has been encountered while loading the setup components. cancelling setup", то попробуй отключить DEP в системе (это делается с помощью редактирования boot.ini добавлением ключа /NoExecute=AlwaysOff в нужную конфигурацию, затем перезагрузка)
Ответ отправил: Bob Johnson (статус: Академик)
Россия, Калуга
WWW: Программирование
----
Ответ отправлен: 28.10.2006, 02:19
Оценка за ответ: 3
Комментарий оценки:
Вопрос для Bob'a Johnson'a
Говорит: MSVS 2005 has encoutered a problem during setup. Setup did not complete correctly.


Вопрос № 60.386
Подскажите, пожалуйста, как в Borland C++ Builder 6.0 сделать следующую вещь:
есть компонент DBGrid, как сделать так, чтобы чтобы заголовки столбцов не умещающиеся на одной строке располагались на нескольких строках?
Отправлен: 27.10.2006, 18:34
Вопрос задал: DelphiNbrk@mailru (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Vaga
Здравствуйте, DelphiNbrk@mailru!
Не уверен, что прав, но мне кажется, что стандартный DBGrid не обладает таким свойством. По крайней мере так было в пятом BCB.
Искать компоненты сторонних разработчиков.
---------
Ошибка становится ошибкой, когда рождается как истина. Станислав Ежи Лец
Ответ отправил: Vaga (статус: 5-ый класс)
Ответ отправлен: 27.10.2006, 19:49


Вопрос № 60.387
Здравствуйте, пожалуйста, пришлите название WinAPI функции
вместе с описанием ее параметров и возвращаемогозначения,
которая определяет не открыт ли трей CD-ROMа в данный момент,
а также имена *.h и *.lib файлов, в которых она описана.
Отправлен: 27.10.2006, 18:44
Вопрос задал: Galiulin Rishat Faimovich (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Mihasic
Здравствуйте, Galiulin Rishat Faimovich!
Копать нужно по функции mciSendComman (в МСДН лучше всего смотреть). Там есть и список команд устройствам.

А пример открытия-закрытия можно посмотреть здесь (хотя я скопировал его ниже):
http://www.codeguru.com/Cpp/W-P/system/cd-rom/article.php/c5775

Конкретнее я в данный момент не скажу, но думаю разобраться можно.

Приложение:

Ответ отправил: Mihasic (статус: 8-ой класс)
Ответ отправлен: 27.10.2006, 19:11

Отвечает: Решетник Д
Здравствуйте, Galiulin Rishat Faimovich!
Конечно же меня будут пинать за такой ответ....
Попробуйте такой код.
procedure TForm1.Button1Click(Sender: TObject);
var
s: array[0..64] of Char;
error: Cardinal;
Text: array[0..255] of Char;
begin
error := mciSendstring('open cdaudio alias geraet', nil, 0, Handle);
if error <> 0 then
begin
mciGetErrorstring(error, @Text, 255);
ShowMessage(Text);
mciSendstring('close geraet', nil, 0, Handle);
Exit;
end;

error := mciSendstring('status geraet mode', @s, SizeOf(s), Handle);
if error <> 0 then
begin
mciGetErrorstring(error, @Text, 255);
ShowMessage(Text);
mciSendstring('close geraet', nil, 0, Handle);
Exit;
end;

mciSendstring('close geraet', nil, 0, Handle);
ShowMessage('Message: ' + s);
end;

---------
Жизнь коротка, чтобы писать на ассемблере
Ответ отправил: Решетник Д (статус: 10-ый класс)
Ответ отправлен: 28.10.2006, 17:50
Оценка за ответ: 2
Комментарий оценки:
спосибо, но уже пробовал.


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

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

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

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

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала 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.37 от 04.10.2006
Яндекс Rambler's Top100

В избранное