Изменение формы Окна
Стандартное окно скомпилированного проекта имеет вид:Изменим его форму.
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
hBitmap = LoadImage(0, "image.bmp")
SkinWin(hWnd, hBitmap)
HideWindow(0,#False)
Repeat
Event=WaitWindowEvent()
Until Event=#PB_Event_CloseWindow
End
"image.bmp" - любой рисунок.
Прозрачный фон - это первый пиксель рисунка.
В данном примере я использую картинку :
Первый пиксель белый (#FFFFFF), всё что на картинке белого цвета - видно не будет.
У края получившегося окна могут наблюдаться огрызки белого цвета (на самом дели они не белые, а отличаются от #FFFFFF)
Чтобы их убрать надо внимательно поработать в Фотошопе с изображением.
Перемещение окна !
Стандартная рамка у окна отсутствует, а значит мы не можем наше окно передвигать по столу.Изменим код :
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
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
SendMessage_(hWnd,#WM_NCLBUTTONDOWN, #HTCAPTION,0)
EndIf
Until Event = #PB_Event_CloseWindow
End
Теперь окно передвигается по левому нажатии мыши.
Закрыть окно !
Вы уже заметили - новая проблема. Мы не можем закрыть окно! Исправим это:Создадим новый гаджет - кнопку.
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)
Repeat
Event=WaitWindowEvent()
If Event = #WM_LBUTTONDOWN
SendMessage_(hWnd,#WM_NCLBUTTONDOWN, #HTCAPTION,0)
EndIf
Until Event = #PB_Event_CloseWindow
End
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
Наша кнопка не реагирует на нажатие !
Допишем :
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
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
Event = #PB_Event_CloseWindow
EndIf
Until Event = #PB_Event_CloseWindow
End
В строке :
If Event=#PB_Event_Gadget And Gadget=1 последняя цифра идентификатор кнопки.
Скачать архив исходник
Вариант кода закрытия окна
; 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
; Размер окна должен соответствовать размеру рисунка!
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
Полупрозрачное окно !
Добавим после гаджет-кнопки код :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()
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
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
В результате всех этих манипуляций мы получили :
1. Нестандартная форма окна.
2. Возможность передвигать окно мышкой.
3. Кнопка закрыть окно.
4. Окно полупрозрачное.
Надевание скина на окно
Упрощенный вариант :
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
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
Полный вариант
Заменяем 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
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