FreeBasic
Главная
Вход
Регистрация
Четверг, 28.03.2024, 16:56Приветствую Вас Гость | RSS
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Форум » Freebasic » Вопросы по языку FreeBasic » Стартовая картинка при загрузке
Стартовая картинка при загрузке
Billi_JoДата: Четверг, 02.10.2014, 15:42 | Сообщение # 1
Сержант
Группа: Пользователи
Сообщений: 39
Репутация: 0
Статус: 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
Репутация: 49
Статус: 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
Репутация: 0
Статус: Offline
Спасибо! Буду разбираться

Добавлено (03.10.2014, 13:12)
---------------------------------------------
Дайте, пожалуйста, описание команд:


Код
SetLayeredWindowAttributes()
и
Код
SetTimer()
в справке библиотеки нет их
 
haavДата: Пятница, 03.10.2014, 13:55 | Сообщение # 4
Генералиссимус
Группа: Администраторы
Сообщений: 1361
Репутация: 49
Статус: Offline
SetLayeredWindowAttributes или на русском

SetTimer или на русском


Вы сохраняете власть над людьми покуда оставляете им что-то…Отберите у человека все, и этот человек уже будет неподвластен вам…
 
Billi_JoДата: Суббота, 04.10.2014, 09:51 | Сообщение # 5
Сержант
Группа: Пользователи
Сообщений: 39
Репутация: 0
Статус: Offline
haav, спс
 
Форум » Freebasic » Вопросы по языку FreeBasic » Стартовая картинка при загрузке
  • Страница 1 из 1
  • 1
Поиск: