| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Звук, графика и видео > Изображение и WinAPI |
| Автор: Borland_Delphi_6 3.7.2004, 21:42 |
| Решил попробовать написать что-нибудь на WinAPI. Форму создавать научился. Не подскажите ли, как теперь нарисовать на форме картинку из файла? |
| Автор: maxim1000 3.7.2004, 22:25 | ||
как-то надо было вывести картинку в консольном приложении, написал вот это (правда не на Delphi, а в VC, но это же WinAPI
только не надо ругать меня за использование SetPixel - просто лень было разбираться с функциями типа GetDIBits да и вообще все это написано на скорую руку... |
| Автор: Borland_Delphi_6 3.7.2004, 23:01 |
| maxim1000 Спасибо конечно, но т.к. я VС в глаза не видел... |
| Автор: maxim1000 4.7.2004, 12:10 | ||||
а вся суть в том, какие функции и с какими параметрами вызывать, а синтаксис вызова функции на C и Delphi довольно-таки похож... а вообще для изучения WinAPI C очень не помешал бы у меня у самого к Delphi довольно теплые чувства, но когда дело касается WinAPI тут я безоговорочно перехожу на C: все примеры обычно приводятся на нем... --- ну, если попытаться переписать, получится что-то вроде этого:
|
| Автор: Borland_Delphi_6 4.7.2004, 12:47 |
| maxim1000 Спасибо, попробую. Просто мне надо одну прогу на API написать, что бы она маленькая и шустрая была. |
| Автор: Borland_Delphi_6 4.7.2004, 13:13 | ||
| maxim1000 Спасибо еще раз, уже кое-что получается Только я вот не пойму, зачем эта строчка:
Она привела мою прогу к зависанию, без нее все работает хорошо... |
| Автор: maxim1000 4.7.2004, 19:51 | ||||
когда консольное приложение закрывается, окно, которое оно создало уничтожается цикл в конце предназначен, чтобы можно было успеть что-нибдуь увидеть а когда надоест смотреть - Ctrl-C |
| Автор: Borland_Delphi_6 4.7.2004, 21:07 |
| maxim1000 Ааа... Понятно. Просто я то твой код в неконсольное вставил |
| Автор: RA 5.7.2004, 03:45 |
| Вообще разрабатывать визуальные программы на вин апи это очень геморно, но если уж позарез нужен маленький размер приложения то можно написать его используя компонеты Kol и MCK http://bonanzas.rinet.ru |
| Автор: dm9 5.7.2004, 17:08 |
| RAdmin, да нет, для саморазвития полезно очень даже |
| Автор: Borland_Delphi_6 5.7.2004, 21:50 |
| maxim1000 А ты не подскажешь, как по событию таймера мне перерисовать пикчур? Таймер у меня уже есть. |
| Автор: dm9 5.7.2004, 23:10 |
| Borland_Delphi_6, я ж тебе пример кидал. Смотри что там написано на обработке WM_PAINT. Подумать самому и почитать справочку тоже иногда полезно |
| Автор: Borland_Delphi_6 6.7.2004, 00:16 |
| dm9 Уже думал, так нифига не вышло |
| Автор: RA 6.7.2004, 01:51 | ||
Вообще из кода Maxi1000 надо убрать строчку
|
| Автор: Borland_Delphi_6 6.7.2004, 12:59 |
| RAdmin Да я понимаю, не дурак |
| Автор: Borland_Delphi_6 6.7.2004, 17:28 |
| Всем спасибо! Прога работает, даже почти без глюков! |
| Автор: dm9 7.7.2004, 04:31 |
| Покажи |
| Автор: Borland_Delphi_6 7.7.2004, 11:40 |
| dm9 Покожу, вот только ядро проги-то уже 20 кб, что есть гуд, а вот загружаемая картинка - 650 кб |
| Автор: Borland_Delphi_6 9.7.2004, 14:56 |
| Показываю... из-за того, что заметил глюк. Хорошо проявляется на маленькой пикчуре. Если не сложно, посмотрите файлик (около 25 кб). -- Аттач удален |
| Автор: maxim1000 9.7.2004, 17:25 |
| похоже, некорректно стирается предыдущее изображение правда, вылечить это можно даже без изменения кода надо сделать по границе рисунка рамку цвета фона (т.е. черного) я попробовал - хвост исчезает |
| Автор: Borland_Delphi_6 9.7.2004, 21:55 |
| maxim1000 Э-э-э... Че-то я не въехал, так ведь на рисунке фон черный весь... Или как? |
| Автор: maxim1000 10.7.2004, 00:37 |
| да не совсем... насколько я понял передвижение картинки происходит так: она просто рисуется на новом месте (если старое изображение и стирается, то, как мне кажется, там засел глюк) дело в том, что в правой верхней части картинки цветная (нечерная) область подходит вплотную к границе, поэтому, когда картинка сдвигается влево-вниз (насколько я понял, это тот случай, когда глюк заметен больше всего), эта область остается нестертой. чтобы проиллюстрировать это можно попробовать следующее (именно это я имел в виду, когда сказал, что это можно вылечить без изменения кода): 1. увеличить размеры рисунка на два пиксела с каждой стороны 2. исходный рисунок расположить по середине получившегося 3. закрасить границы черным (короче, взять рисунок в черную рамку) я попробовал - все нормально... P.S. правда правильнее было бы назвать это не лечением, а залечиванием: стоит увеличить шаг продвижения картинки и рамку придется увеличивать... |
| Автор: Borland_Delphi_6 10.7.2004, 13:47 |
| maxim1000 Ок, увеличу пикчур. |
| Автор: Borland_Delphi_6 10.7.2004, 20:30 |
| Вроде все работает |