Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.11.27;
Скачать: 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 вся ветка

Текущий архив: 2003.11.27;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.019 c
14-90095
REA
2003-11-04 16:04
2003.11.27
Круговая порука


1-89843
dred
2003-11-16 01:46
2003.11.27
Работа со структурой данных


8-90002
S.A.S.
2003-07-31 17:43
2003.11.27
SkinEngine


6-90028
SPIRIT
2003-10-01 01:53
2003.11.27
Отправить письмо


3-89712
AndrewCh
2003-11-06 12:16
2003.11.27
D5+Sybase SQL Any + W2Kru - error