Уроки PureBasic

Categories

Other Sites

Other Sites



             Поиск по сайту

     

                


    Оставить мне сообщение:



Изменение формы Окна

Стандартное окно скомпилированного проекта имеет вид:

Уроки PureBasic



Изменим его форму.

hWnd = OpenWindow(0,100,100, 500, 300, "Window Name",#PB_Window_BorderLess )

hBitmap = LoadImage(0, "image.bmp")
SkinWin(hWnd, hBitmap)
HideWindow(0,#False)


Repeat
Event=WaitWindowEvent()
Until Event=#PB_Event_CloseWindow
End


"image.bmp" - любой рисунок.

Прозрачный фон - это первый пиксель рисунка.

В данном примере я использую картинку :

Уроки PureBasic



Первый пиксель белый (#FFFFFF), всё что на картинке белого цвета - видно не будет.

У края получившегося окна могут наблюдаться огрызки белого цвета (на самом дели они не белые, а отличаются от #FFFFFF)

Чтобы их убрать надо внимательно поработать в Фотошопе с изображением.

Уроки PureBasic

Перемещение окна !

Стандартная рамка у окна отсутствует, а значит мы не можем наше окно передвигать по столу.

Изменим код :

hWnd = OpenWindow(0,100,100, 500, 300, "Window Name",#PB_Window_BorderLess )

hBitmap = LoadImage(0, "image.bmp")
SkinWin(hWnd, hBitmap)
HideWindow(0,#False)


Repeat
Event=WaitWindowEvent()

If Event = #WM_LBUTTONDOWN
SendMessage_(hWnd,#WM_NCLBUTTONDOWN, #HTCAPTION,0)
EndIf

Until Event = #PB_Event_CloseWindow
End



Теперь окно передвигается по левому нажатии мыши.

Уроки PureBasic

Закрыть окно !

Вы уже заметили - новая проблема. Мы не можем закрыть окно! Исправим это:

Создадим новый гаджет - кнопку.


ButtonGadget(1, 464, 16, 20, 20, "X")


1 - уникальный идентификатор , любое целое неотрицательное число

464 - координаты верхнего левого угла окна в пикселях по оси X

16 - координаты верхнего левого угла окна в пикселях по оси Y

20 - ширина кнопки

20 - высота кнопки

X - текст на кнопки

hWnd = OpenWindow(0,100,100, 500, 300, "Window Name",#PB_Window_BorderLess )

hBitmap = LoadImage(0, "image.bmp")
SkinWin(hWnd, hBitmap)
HideWindow(0,#False)

ButtonGadget(1, 464, 16, 20, 20, "X")

Repeat
Event=WaitWindowEvent()

If Event = #WM_LBUTTONDOWN
SendMessage_(hWnd,#WM_NCLBUTTONDOWN, #HTCAPTION,0)
EndIf


Until Event = #PB_Event_CloseWindow
End



Уроки PureBasic

Наша кнопка не реагирует на нажатие !

Допишем :

hWnd = OpenWindow(0,100,100, 500, 300, "Window Name",#PB_Window_BorderLess )

hBitmap = LoadImage(0, "image.bmp")
SkinWin(hWnd, hBitmap)
HideWindow(0,#False)

ButtonGadget(1, 464, 16, 20, 20, "X")

Repeat
Event=WaitWindowEvent()

Gadget=EventGadget()

If Event = #WM_LBUTTONDOWN
SendMessage_(hWnd,#WM_NCLBUTTONDOWN, #HTCAPTION,0)
EndIf


If Event=#PB_Event_Gadget And Gadget=1
Event = #PB_Event_CloseWindow
EndIf

Until Event = #PB_Event_CloseWindow
End



В строке :

If Event=#PB_Event_Gadget And Gadget=1 последняя цифра идентификатор кнопки.

Уроки PureBasic

Скачать архив исходник

Уроки PureBasic

Вариант кода закрытия окна

; kvitaliy for PB v4.01
; Размер окна должен соответствовать размеру рисунка!


hWnd = OpenWindow(0,100,100, 500, 300, "Window Name", #WS_POPUP|#PB_Window_Invisible)

; окно будет в виде любого рисунка, прозрачный фон - это первый пиксель рисунка

hBitmap = LoadImage(0, "image.bmp") ; тут для уменьшения исходного файла можно применить png файл с UsePNGImageDecoder()

SkinWin(hWnd, hBitmap)
HideWindow(0,#False)
Repeat

Select WaitWindowEvent()

; нажатие левой кнопки мыши

Case #WM_LBUTTONDOWN
SendMessage_(WindowID(0),#WM_NCLBUTTONDOWN, #HTCAPTION,0) ; Это что бы передвигать окно мышкой.

Case #PB_Event_CloseWindow ; Alt+F4 для выхода ...
Quit = 1
EndSelect
Until Quit = 1

End


Уроки PureBasic

Полупрозрачное окно !

Добавим после гаджет-кнопки код :

SetWindowsTransparency(hWnd, 180)

Наше окно стало полупрозрачное.

hWnd = OpenWindow(0,100,100, 500, 300, "Window Name",#PB_Window_BorderLess )

hBitmap = LoadImage(0, "image.bmp")
SkinWin(hWnd, hBitmap)
HideWindow(0,#False)

ButtonGadget(1, 464, 16, 20, 20, "X")

Repeat
Event=WaitWindowEvent()

Gadget=EventGadget()

SetWindowsTransparency(hWnd, 180)

If Event = #WM_LBUTTONDOWN
SendMessage_(hWnd,#WM_NCLBUTTONDOWN, #HTCAPTION,0)
EndIf


If Event=#PB_Event_Gadget And Gadget=1
Event = #PB_Event_CloseWindow
EndIf

Until Event = #PB_Event_CloseWindow
End



Уроки PureBasic

В результате всех этих манипуляций мы получили :

1. Нестандартная форма окна.
2. Возможность передвигать окно мышкой.
3. Кнопка закрыть окно.
4. Окно полупрозрачное.
Уроки PureBasic

Уроки PureBasic


Уроки PureBasic

Надевание скина на окно



Упрощенный вариант :

hWnd = OpenWindow(0,100,100, 700, 420, "Window Name", #WS_POPUP|#PB_Window_Invisible )

hBitmap = LoadImage(0, "PB_Skin5.bmp")
SkinWin(hWnd, hBitmap)
HideWindow(0,#False)

Repeat
Select WaitWindowEvent()

Case #PB_Event_CloseWindow ; Alt+F4 для выхода ...
Quit = 1
EndSelect
Until Quit = 1

End



Уроки PureBasic

Полный вариант

Заменяем bmp на png изображение.
Присваиваем окну имя (если код большой, проще разобраться).
Добавляем возможность перетаскивать окно по столу.

UsePNGImageDecoder() ; Декодер png изоброжения

CatchImage(0, ?Im, ?ImEnd-?Im) ; Загрузка рисунков из памяти

Enumeration
#Window_0
EndEnumeration

hWnd = OpenWindow(#Window_0,100,100, 700, 420, "Window Name", #WS_POPUP|#PB_Window_ScreenCentered|#PB_Window_Invisible )

SkinWin(hWnd, ImageID(0))
HideWindow(0,#False)

Repeat
Select WaitWindowEvent()

Case #WM_LBUTTONDOWN
SendMessage_(WindowID(0),#WM_NCLBUTTONDOWN, #HTCAPTION,0) ; тут можно мышкой картинку двигать!

Case #PB_Event_CloseWindow ; Alt+F4 для выхода ...
Quit = 1
EndSelect
Until Quit = 1

End

DataSection ; Сохранение рисунка в исполняемом файле на этапе компиляции
Im:
IncludeBinary "PB_Skin5.png" ; фон окна
ImEnd:
EndDataSection


Уроки PureBasic

Используются технологии uCoz