![]() |
Модераторы: Snowy, Alexeis, MetalFan |
![]() ![]() ![]() |
|
serI |
|
||||
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 7.1.2008 Репутация: нет Всего: нет |
Добрый вечер.
Вообще проблема такая, пишу клон арканойда, задание в универе. Вот вроде сделал, осталось не так много. И столкнулся с тем что Canvas.Handle самопроизвольно меняется, возможно ошибка в структуре классов ![]() Кто может, гляньте пожалуйста код, может будут какие-нибудь рекомендации... Game -> New Game если смотреть в отладчике то
psbd.Canvas.Handle - тут имеет одно значение если нажать любую кнопку то
Это сообщение отредактировал(а) serI - 7.1.2008, 15:57 Присоединённый файл ( Кол-во скачиваний: 4 ) ![]() |
||||
|
|||||
MetalFan |
|
|||
![]() Аццкий Сотона ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3815 Регистрация: 2.10.2006 Где: Moscow Репутация: 5 Всего: 128 |
да, меняется. и что? оно и должно меняться
-------------------- There are always someone smarter than you... |
|||
|
||||
serI |
|
|||
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 7.1.2008 Репутация: нет Всего: нет |
Интересное кино, как же мне тогда передать ссылку на канву или битмап на котором bitblt сможет рисовать если hadnle постоянно меняется... |
|||
|
||||
MetalFan |
|
|||
![]() Аццкий Сотона ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3815 Регистрация: 2.10.2006 Где: Moscow Репутация: 5 Всего: 128 |
дык не постоянно... а периодически)
непойму в какой момент у тебя чего меняется -------------------- There are always someone smarter than you... |
|||
|
||||
maxim1000 |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3334 Регистрация: 11.1.2003 Где: Киев Репутация: 1 Всего: 110 |
так canvas же не меняется... меняется только handle: какое отношение это имеет к процессу передачи ссылок на canvas? Это сообщение отредактировал(а) maxim1000 - 8.1.2008, 00:37 -------------------- qqq |
|||
|
||||
Alexeis |
|
|||
![]() Амеба ![]() Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 55 Всего: 459 |
Canvas.Handle это DC - дескриптор который выдается на не продолжительное время, по прошествию которого становиться недействительным.
-------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
serI |
|
|||
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 7.1.2008 Репутация: нет Всего: нет |
Действительно объект должен оставаться самим собой, но если я взял canvas.handle и поместил его в myHandle и при этом не использовал trylock, чтобы заблокировать handle. Он изменится и где-то в коде где используется myHandle, а не вызов canvas.handle произойдет ошибка, точнее вывод будет в пустоту. Собствено тот факт, что handle у canvas меняется с учетом выше изложенного привел меня в замешательство. Значит Canvas обертка на DC, и включает в себя функции API MoveTo, LineTo... Просто когда используется чистое API там не каких TryLock нету, контекст он и в африке контекст Это сообщение отредактировал(а) serI - 8.1.2008, 10:06 |
|||
|
||||
MetalFan |
|
|||
![]() Аццкий Сотона ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3815 Регистрация: 2.10.2006 Где: Moscow Репутация: 5 Всего: 128 |
ну так и получай HDC перед отрисовкой... -------------------- There are always someone smarter than you... |
|||
|
||||
serI |
|
|||
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 7.1.2008 Репутация: нет Всего: нет |
Вообще спасибо всем кто откликнулся на зов о помощи. Разобрался вроде и сделал некоторые выводы:
Предположим у вас есть некоторая совокупность классов отражающая функциональность вашей программы. И вам требуется передавать своим классам указатель на TCanvas формы или друго обьекта со свойством Canvas. Рассмотрим возможные варианты: 1. Передать классу handle нужного canvas, но перед этим нужно обязательно заблокировать handle вызовом метода trylock или lock. 2. Передать TCanvas по ссылке и встречный вопрос
это одно и тоже? передача экземпляра класса по ссылке? тогда var получает издержки производства ![]() Существует ли какая-либо статья в которая ставит все точки над i в особенности реализации классов в Delphi и их отличия от C++? Это сообщение отредактировал(а) serI - 8.1.2008, 11:29 |
|||
|
||||
MetalFan |
|
|||
![]() Аццкий Сотона ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3815 Регистрация: 2.10.2006 Где: Moscow Репутация: 5 Всего: 128 |
-------------------- There are always someone smarter than you... |
|||
|
||||
ivan219 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1121 Регистрация: 19.11.2005 Где: Планета земля Репутация: 4 Всего: 12 |
Вот так будет правильнее так как cc это не обект а ссылка на обект. Правда есть один вопрос это копия ссылки или это таже самая ссылка??? |
|||
|
||||
Alexeis |
|
|||
![]() Амеба ![]() Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 55 Всего: 459 |
Ссылка это такое понятие, что копия ссылки это по сути та же самая ссылка, потому совершенно никакой разницы, хотя самой ссылкой тут и не пахнет, тут просто везде копируется указатель на объект. В делфи вообще нет понятия ссылки как сущности, можно передать объект по ссылке в функцию как var параметр, но ссылка создается неявно. -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Delphi: Звук, графика и видео" | |
|
Запрещено: 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делится вскрытыми компонентами
FAQ раздела лежит здесь! Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Girder, Snowy. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Delphi: Звук, графика и видео | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |