![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Небольшой и, должно быть, лёгкий вопросик по DelphiX
JohnJ © (2003-07-30 01:17:00)
Мастера! Помогите пожалуйста! Изучаю сам DelphiX, и вот что делаю:
Кидаю на форму DXDraw и DXImageList. В DXImageList1 в свойстве DXDraw выбираю DXDraw1, а в свойство Items добавляю одну картинку. В DXDraw1 ставлю Align в alClient. И в процедуре TForm1.OnCreate пишу следующее:
DXImageList1.Items[0].Draw(DXDraw1.Surface,1,1,0);
Не рисует картинку... Почему? Вся форма просто чёрным закрашивается.
iXuSs (2003-08-02 20:13:00) [1]
Давай, если что - то спрашивай, только побольше кода, так легче понять.
JohnJ (2003-08-02 01:21:00) [2]
Написал перед выводом на DXDraw1 картинки строчку DXDraw1.Initialize, и заработало!!! Спасибо! Теперь буду думать почему в моём "большом" проекте (игрушку пишу) всё-равно не работает, хотя как-то раз работало, а потом я решил чё-то изменить, и перестало работать... Вернул обратно - никакого эффекта... Ладно, пойду думать...
iXuSs (2003-07-31 22:10:00) [3]
> А почему при создании формы не хочет???
A_n_t правильно сказал. Раньше, чем TDXDraw.OnInitialize лучше вообще с ним ничего не делай.
Вот ещё на всякий случай ньанс. Если будешь использовать TDXTimer, не перепутай OnActivate и OnTimer - а то в простом таймере есть только OnTimer, а я машинально делаю двойной щелчок и порой не замечаю, что обрабатываю не то дело.
A_n_t (2003-07-31 07:29:00) [4]
Если я правильно понимаю, то при создании формы происходит и инициализация DXDraw1, то есть создается все необходимое для работы с DirectX, поэтому и не рисует.
JohnJ (2003-07-31 01:48:00) [5]
Кстати, спасибо A_n_t за теорию и iXuSs за "наталкивание" на Flip
JohnJ (2003-07-31 01:44:00) [6]
Ну вот! Теперь с первого нажатия на кнопку рисуется! :) Остаётся последний вопрос: А почему при создании формы не хочет???
A_n_t (2003-07-31 01:23:00) [7]
Немного теории:
При обычной работе с графикой используется в памяти 2 surface(картинки):
1 – backbuffer
2 - primary
Видео карта постоянно с частотой монитора показывает primary,
а рисование новой графики происходит в backbuffer.
И самое главное: процедура DXDraw1.Flip меняет местами backbuffer и primary, то есть теперь показывается, то что нарисовали в backbuffer.
Поэтому DXDraw1.Flip необходимо ставить не перед рисованием картинки, а после.
JohnJ (2003-07-31 01:02:00) [8]
A_n_t: В том то и проблемма! Есть у меня такой пример, и описание как сделать... Пример работает, а когда я сам делал всё как там написано - комп вис!!! Когда я сверил все строчки - всё абсолютно идентично... Значит я где-то в свойствах что-то не то сделал? Вот и решил попробовать просто - вывести картнику... Комп не завис, но картинки всё-равно нет! :( Помоги, плиз!
iXuSs: Сделал так: Дописал перед выводом картинки строчку DXDraw1.Flip; Проверил - ничё нового. Тогда добавил на форму кнопку Button1, и на событие OnClick поставил процедуру FormCreate (сделал это в Object Inspector, а не динамически (это я чтобы лишние вопросы отмести)). Запускаю... Чёрная форма... Нажимаю один раз на кнопку - чёрная форма... Нажимаю ещё раз на кнопку - появляется картинка! В чём может быть причина, даже понятия не имею, объясните, плиз, и как этого избегать?
iXuSs (2003-07-30 12:11:00) [9]
Не в OnCreate надо, а в OnShow формы или в OnActivate TDXDraw. При этом не забывай про TDXDraw.Flip, иначе ничего не увидишь.
A_n_t (2003-07-30 05:19:00) [10]
Возьми штатный пример из компонентов DelphiX, там все просто и понятно.