![]() |
|
![]() ![]() ![]() |
|
petlyura |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 162 Регистрация: 30.1.2008 Где: Харьков Репутация: 2 Всего: 2 |
Здравствуйте, Винградовцы
![]() создаю свою цветную кнопку..
отсюда скопитырил http://www.cyberforum.ru/cpp-builder/thread183819-page2.html какая у меня беда. По закрытию формы удаляется объект, по ходу очищается память и вот этого указателя std::auto_ptr<TCanvas> Canvas_; и после этого я прилетаю в обработчик CNDrawItem. Ну и соответственно errorы пошли. Как избежать этой проблемы? Спасибо |
|||
|
||||
Dem_max |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1780 Регистрация: 12.4.2007 Репутация: 14 Всего: 39 |
-------------------- Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte") |
|||
|
||||
petlyura |
|
||||
Бывалый ![]() Профиль Группа: Участник Сообщений: 162 Регистрация: 30.1.2008 Где: Харьков Репутация: 2 Всего: 2 |
спасибо. код скопировать у меня вышло без проблем. Хватило ч.1. На его основе создал свой компонент через наследование. Короче, моя программа с высокой частотой проверяет различные условия и в зависимости от них меняет цвет, текст и т.д. Проблема происходит при закрытии формы. Т.е. с одной стороны я удаляю цветную кнопку (х.з., может безграмотно, но вижу что auto_ptr очищается), а потом почему-то прилетает сообщение CN_DRAWITEM. Так вот, я думаю, что нужно доработать в обработчике этого сообщения, чтобы понять, что ничего в нем уже делать не надо. Ошибка выскакивает вот здесь // bind Canvas_ to the target DC Canvas_->Handle = pDrawItem->hDC;
Canvas_ уже удален к тому времени. Но тупо проверка на if(Canvas_) не годится Это сообщение отредактировал(а) petlyura - 28.5.2013, 19:13 |
||||
|
|||||
Dem_max |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1780 Регистрация: 12.4.2007 Репутация: 14 Всего: 39 |
Если прилетает CNDrawItem то значит объект еще существует TColorButton
так как в WndProc окна идет проверка если TColorButton существует то вызвать CNDrawItem Это сообщение отредактировал(а) Dem_max - 28.5.2013, 19:24 -------------------- Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte") |
|||
|
||||
petlyura |
|
||||||||
Бывалый ![]() Профиль Группа: Участник Сообщений: 162 Регистрация: 30.1.2008 Где: Харьков Репутация: 2 Всего: 2 |
спасибо. я подумал, что надо правильно удалить компоненты. создавались компоненты где-то вот так, и добавлялись в ListDo типа TList*:
удалял я вот так:
сейчас переписал удаление след.образом:
я тут не совсем уверен, что удаляю сами объекты. Я их удаляю только из списка. Но ошибка уже не вылетает, в CNDrawItem после этого не захожу. И потом там еще форма удаляется (не главная форма программы, а просто один из кадров), и как я понимаю, вместе с ней все эти объекты. Покритикуйте. Спасибо |
||||||||
|
|||||||||
petlyura |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 162 Регистрация: 30.1.2008 Где: Харьков Репутация: 2 Всего: 2 |
Dem_max, еще есть одна проблема. Эта кнопка постоянно получает фокус ввода, а мне надо этого избежать. Что еще нужно дописать? и где? Раньше я создавал свои кнопки-компоненты на основе SpeedButton, там фокуса нет. Пока не возникла проблема, что кнопка должна и цвет текста и цвет фона менять, мне хватало speedbutton. Даже натягивал рисунок на speedbutton, но оформлять текст в виде рисунка на некотором фоне некомильфо, т.к. что часто нужно менять размеры кнопок, а соответственно плывет и текст (сжимается, растягивается). Пришлось создавать собств.цветную кнопку через TColorButton. Если есть приемлемый вариант для SpeedButton, буду тоже рад. |
|||
|
||||
petlyura |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 162 Регистрация: 30.1.2008 Где: Харьков Репутация: 2 Всего: 2 |
вот набросал что-то такое для эксперимента со SpeedButton. Рисунок появился на кнопке, а текст - нет :(
Почему не получилось? ![]()
|
|||
|
||||
petlyura |
|
||||
Бывалый ![]() Профиль Группа: Участник Сообщений: 162 Регистрация: 30.1.2008 Где: Харьков Репутация: 2 Всего: 2 |
потому что размер картинки меньше, чем текста, выводимого на канве ![]() так определенно лучше.
|
||||
|
|||||
petlyura |
|
||||
Бывалый ![]() Профиль Группа: Участник Сообщений: 162 Регистрация: 30.1.2008 Где: Харьков Репутация: 2 Всего: 2 |
спасибо, тему закрываю. Написал функцию, которая загружает фон и текст. Все работает
|
||||
|
|||||
![]() ![]() ![]() |
Правила форума "С++ Builder" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C++ Builder | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |