Вниз
Скачать: CL | DM;

Небольшой и, должно быть, лёгкий вопросик по DelphiX   Найти похожие ветки 

← →
JohnJ ©   (2003-07-30 01:17) [0]

Мастера! Помогите пожалуйста! Изучаю сам DelphiX, и вот что делаю:
Кидаю на форму DXDraw и DXImageList. В DXImageList1 в свойстве DXDraw выбираю DXDraw1, а в свойство Items добавляю одну картинку. В DXDraw1 ставлю Align в alClient. И в процедуре TForm1.OnCreate пишу следующее:
DXImageList1.Items[0].Draw(DXDraw1.Surface,1,1,0);
Не рисует картинку... Почему? Вся форма просто чёрным закрашивается.


← →
A_n_t   (2003-07-30 05:19) [1]

Возьми штатный пример из компонентов DelphiX, там все просто и понятно.


← →
iXuSs   (2003-07-30 12:11) [2]

Не в OnCreate надо, а в OnShow формы или в OnActivate TDXDraw. При этом не забывай про TDXDraw.Flip, иначе ничего не увидишь.


← →
JohnJ ©   (2003-07-31 01:02) [3]

A_n_t: В том то и проблемма! Есть у меня такой пример, и описание как сделать... Пример работает, а когда я сам делал всё как там написано - комп вис!!! Когда я сверил все строчки - всё абсолютно идентично... Значит я где-то в свойствах что-то не то сделал? Вот и решил попробовать просто - вывести картнику... Комп не завис, но картинки всё-равно нет! :( Помоги, плиз!
iXuSs: Сделал так: Дописал перед выводом картинки строчку DXDraw1.Flip; Проверил - ничё нового. Тогда добавил на форму кнопку Button1, и на событие OnClick поставил процедуру FormCreate (сделал это в Object Inspector, а не динамически (это я чтобы лишние вопросы отмести)). Запускаю... Чёрная форма... Нажимаю один раз на кнопку - чёрная форма... Нажимаю ещё раз на кнопку - появляется картинка! В чём может быть причина, даже понятия не имею, объясните, плиз, и как этого избегать?


← →
A_n_t   (2003-07-31 01:23) [4]

Немного теории:
При обычной работе с графикой используется в памяти 2 surface(картинки):
1 – backbuffer
2 - primary
Видео карта постоянно с частотой монитора показывает primary,
а рисование новой графики происходит в backbuffer.

И самое главное: процедура DXDraw1.Flip меняет местами backbuffer и primary, то есть теперь показывается, то что нарисовали в backbuffer.

Поэтому DXDraw1.Flip необходимо ставить не перед рисованием картинки, а после.


← →
JohnJ ©   (2003-07-31 01:44) [5]

Ну вот! Теперь с первого нажатия на кнопку рисуется! :) Остаётся последний вопрос: А почему при создании формы не хочет???


← →
JohnJ ©   (2003-07-31 01:48) [6]

Кстати, спасибо A_n_t за теорию и iXuSs за "наталкивание" на Flip


← →
A_n_t   (2003-07-31 07:29) [7]

Если я правильно понимаю, то при создании формы происходит и инициализация DXDraw1, то есть создается все необходимое для работы с DirectX, поэтому и не рисует.


← →
iXuSs   (2003-07-31 22:10) [8]

> А почему при создании формы не хочет???

A_n_t правильно сказал. Раньше, чем TDXDraw.OnInitialize лучше вообще с ним ничего не делай.

Вот ещё на всякий случай ньанс. Если будешь использовать TDXTimer, не перепутай OnActivate и OnTimer - а то в простом таймере есть только OnTimer, а я машинально делаю двойной щелчок и порой не замечаю, что обрабатываю не то дело.


← →
JohnJ ©   (2003-08-02 01:21) [9]

Написал перед выводом на DXDraw1 картинки строчку DXDraw1.Initialize, и заработало!!! Спасибо! Теперь буду думать почему в моём "большом" проекте (игрушку пишу) всё-равно не работает, хотя как-то раз работало, а потом я решил чё-то изменить, и перестало работать... Вернул обратно - никакого эффекта... Ладно, пойду думать...


← →
iXuSs   (2003-08-02 20:13) [10]

Давай, если что - то спрашивай, только побольше кода, так легче понять.



Страницы: 1 вся ветка

Скачать: CL | DM;



Память: 0.47 MB
Время: 0.014 c
3-89695
Михаил
2003-11-06 10:06
2003.11.27
поле NUMERIC(15, 5) не работатет с 5-ым знаком после запятой


3-89687
GIL
2003-11-06 12:01
2003.11.27
неправильная дата


1-89985
Софейков Костя
2003-11-13 18:00
2003.11.27
Графики через массив...


1-89849
Cash
2003-11-16 17:12
2003.11.27
Как работать с RGB


11-89803
alfromorel
2003-03-19 10:38
2003.11.27
Как отлавить сообщения ухода мышки с компонента




   Наверх