Стартовая картинка при загрузке
|
|
Billi_Jo | Дата: Четверг, 02.10.2014, 15:42 | Сообщение # 1 |
Сержант
Группа: Пользователи
Сообщений: 39
Статус: Offline
| Здравствуйте. Я новичок. Осваиваю FB. Вопрос: При запуске объемных приложений, вначале появляется картинка/логотип (без окна), на которой еще пишется какие модули программы загружены. Так вот, хотелось бы знать как это делается (конечно, для солидности только, никакого большого приложения я, пока, написать не могу). Из справки к библиотеке Windows 9, понял, что это нужно делать примерно так: Код #include "window9.bi" var hwnd=GetDesktopWindow()
WindowStartDraw(hwnd,200,200,,,1) ImageDraw(Load_image("1.png"),0,0) StopDraw
Do Loop until GetAsyncKeyState(&h1B)<0 ' клавиша Esc для выхода Однако, при этом, изображение начинает "затираться", если производить какие-нибудь действия поверх него. Подскажите, пожалуйста, как быть?
Сообщение отредактировал Billi_Jo - Четверг, 02.10.2014, 15:43 |
|
| |
haav | Дата: Четверг, 02.10.2014, 17:24 | Сообщение # 2 |
Генералиссимус
Группа: Администраторы
Сообщений: 1361
Статус: Offline
| Способов такое сделать масса. Когда есть определенный логотип для нескольких приложений\игр , то чаще код выносят в DLL. Потом загружают DLL на время загрузки логотипа. И далее выгружают, экономя при этом память. Если так для примера, вот что-то подобное:
Код #Include "window9.bi"
Dim Shared As HWND hw,hw1 ' хендлы 2 окон Dim Shared As Any Ptr img ' хендл картинки img = Load_imageA("1.png") ' загружаем изображение ' процедура рисования 1 окна Sub DrawOnWindow() Static As Integer C ' счетчик милисекунд 100*30 = 3 секунды WindowStartDrawA(hw) ' начинаем рисование ImageDrawA(img,0,0) ' рисуем картинку StopDrawA ' Заканчиваем рисование C+=1 ' увеличиваем счетчик If C >=30 Then ' если с момента старта программы прошло 3 секунды, то: KillTimer(hw,1) ' останавливаем таймер Close_Window(hw)' закрываем первое окно SetWindowStyle(hw1,WS_VISIBLE Or WS_OVERLAPPEDWINDOW) ' поменяли стиль у второго окна, теперь оно видимо FreeGpBitmap(img) ' освобождаем память изображения, картинка больше не нужна EndIf End Sub
hw=OpenWindow("",100,100,300,300,WS_VISIBLE Or WS_POPUP,&H80000) ' создаем первое окно CenterWindow(hw) ' первое окно по центру SetWindowTop(hw,1)' первое окно поверх всех окон SetLayeredWindowAttributes(hw, &hf0f0f0, 0, LWA_COLORKEY) ' создаем у окна прозрачные пиксели &hf0f0f0 SetTimer(hw,1,100,Cast(Any Ptr,@DrawOnWindow())) ' запускаем рисование первого окна hw1=OpenWindow("Главное окно",200,200,273,100,0) ' создаем второе окно невидимым SetWindowTop(hw1,1) ' второе окно поверх всех окон
Do:Loop Until WaitEvent()= eventclose ' цикл событий Здесь логотип выводится на три секунды, потом исчезает и появляется как бы главное окно. Рисунок лучше взять PNG с прозрачными пикселями, так покрасивее, хотя конечно можно любую картинку. Размер окна выставлен небольшой; должен подбираться по размеру изначально, либо программно можно сначала узнать размер рисунка, а потом по этим размерам ставить размеры окна.
Поскольку тема касается библиотеки window9, позднее перенесу ее в другой раздел. Удачи!
Вы сохраняете власть над людьми покуда оставляете им что-то…Отберите у человека все, и этот человек уже будет неподвластен вам…
|
|
| |
Billi_Jo | Дата: Пятница, 03.10.2014, 13:12 | Сообщение # 3 |
Сержант
Группа: Пользователи
Сообщений: 39
Статус: Offline
| Спасибо! Буду разбираться Добавлено (03.10.2014, 13:12) --------------------------------------------- Дайте, пожалуйста, описание команд: Код SetLayeredWindowAttributes() и в справке библиотеки нет их
|
|
| |
haav | Дата: Пятница, 03.10.2014, 13:55 | Сообщение # 4 |
Генералиссимус
Группа: Администраторы
Сообщений: 1361
Статус: Offline
| SetLayeredWindowAttributes или на русском
SetTimer или на русском
Вы сохраняете власть над людьми покуда оставляете им что-то…Отберите у человека все, и этот человек уже будет неподвластен вам…
|
|
| |
Billi_Jo | Дата: Суббота, 04.10.2014, 09:51 | Сообщение # 5 |
Сержант
Группа: Пользователи
Сообщений: 39
Статус: Offline
| haav, спс
|
|
| |
|