Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   AutoIt (http://forum.oszone.net/forumdisplay.php?f=103)
-   -   [решено] Красивый интерфейс GUI (http://forum.oszone.net/showthread.php?t=147363)

Nik_rus 07-08-2009 12:26 1188026

Красивый интерфейс GUI
 
Часто бывает что для клиента важна "оболочка" программы.
Столкнулся с проблемой - нужно сделать КНОПКУ (причем работающую :shout: ) из PNG файла. ( не помешало бы и другие типа edit и label...)
Но там мне "практически" ясно все (GDI udf...)
Но опять-же проблема - при сворачивании окна или становления его же неактивным картинки пропадают :shot:
Что делать ? Я пытался отлавливать сворачивание окна и прорисовывать заного, но иногда не срабатывало =( .
Я в упадке

FlatX007 07-08-2009 16:02 1188281

Цитата:

Цитата Nik_rus
Столкнулся с проблемой - нужно сделать КНОПКУ (причем работающую ) из PNG файла. »

В GUI окна в качестве изображений кнопок вставляются BMP картинки а не PNG

Гдето тут
http://forum.oszone.net/thread-143513.html

Nik_rus 07-08-2009 16:12 1188290

Вложений: 1
Дело в том что мне нужно сделать края кнопки прозрачными :(

FlatX007 07-08-2009 16:19 1188296

Выложи скрипта который ты уже написал ...

Nik_rus 07-08-2009 16:21 1188300

Код:

#include <GUIConstants.au3>
#Include <GuiEdit.au3>
#include <GuiListBox.au3>
#include <GDIPlus.au3>
$dd="DarkDragon"
_GDIPlus_StartUp()
_CreateGuiFace($dd)
Func _CreateGuiFace($title)
        Global $main = GuiCreate($title, 640, 480)
        GuiSetState()
        ;---Объявление и прорисовка---
        _DrawImgs()
        ;---Рисуем фейс---
        _DrawCtrl()
        ;---Loop---
        While 1
                If GUIGetMsg() = $GUI_EVENT_RESTORE Then
                        Sleep(100)
                        _DrawImgs()
                EndIf
                If GUIGetMsg() = $GUI_EVENT_CLOSE Then
                        _ProgShutdown()
                EndIf
        WEnd
        ;----------
EndFunc

Func _DrawImgs()
        Global $hGraphic = _GDIPlus_GraphicsCreateFromHWND($main)
        Global $bg = _GDIPlus_ImageLoadFromFile("Style\bg.png")
        _GDIPlus_GraphicsDrawImage($hGraphic, $bg, 0, 0)
        Global $plistbg = _GDIPlus_ImageLoadFromFile("Style\plist.png")
        _GDIPlus_GraphicsDrawImage($hGraphic, $plistbg, 485, 25)
        Global $bgchat = _GDIPlus_ImageLoadFromFile("Style\bgchat.png")
        _GDIPlus_GraphicsDrawImage($hGraphic, $bgchat, 26, 25)
        Global $messguibg = _GDIPlus_ImageLoadFromFile("Style\mess.png")
        _GDIPlus_GraphicsDrawImage($hGraphic, $messguibg, 26, 419)
        Global $but = GUICtrlCreateButton("Send", 545, 425,45,22)
        GUICtrlSetBkColor($but,0xb0b0b0)
        Global $butbg = _GDIPlus_ImageLoadFromFile("Style\but.png")
        _GDIPlus_GraphicsDrawImage($hGraphic, $butbg, 530, 420)
EndFunc

Func _DrawCtrl()
        Global $plist = GUICtrlCreateList( "Nik(rus)", 495, 35 ,110,365,0,2)
        _GUICtrlListBox_AddString($plist,"1234")
        GUICtrlSetBkColor($plist,0xb0b0b0)
        Global $editchat = GUICtrlCreateEdit("123", 35, 35, 410, 365,0x0040+0x0004+0x0800)
        GuiCtrlSetBkColor($editchat,0xb0b0b0)
        Global $messgui = GUICtrlCreateEdit("Message here", 44, 427, 445, 19,0)
        GUICtrlSetBkColor($messgui,0xb0b0b0)
EndFunc

Func _GDI_Shutdown()
        _GDIPlus_GraphicsDispose($hGraphic)
        _GDIPlus_ImageDispose($bg)
        _GDIPlus_ImageDispose($plistbg)
        _GDIPlus_ImageDispose($bgchat)
        _GDIPlus_ImageDispose($messguibg)
        _GDIPlus_ImageDispose($butbg)
        GUICtrlDelete($but)
EndFunc

Func _GUI_Shutdown()
        GUICtrlDelete($plist)
        GUICtrlDelete($editchat)
        GUICtrlDelete($messgui)
EndFunc

Func _ProgShutdown()
        _GDI_Shutdown()
        _GDIPlus_ShutDown()
        GUIDelete()
        Exit
EndFunc


Nik_rus 07-08-2009 16:30 1188314

Вложений: 1
Вот вся папка со стилем

FlatX007 07-08-2009 17:01 1188337

Ой даже незнаю ты тут наворотил функций UDF ... я фиг знаю что с ними делать.

Помойму проще нарисовать ОбщийБэкграунд одним файлом , задисабить его (отключить) чтобы кнопки срабатывали которые поверх картинки и прорисовать всё остальное ...

Nik_rus 07-08-2009 17:45 1188380

А как его собсно задисабить ?
Ну допустим я это сделал... но ведь если я нажму на кнопку она появится !
+ если свернуть то рисунок пропадет... как я раньше писал

FlatX007 07-08-2009 20:36 1188480

Тут ... =)

Nik_rus 07-08-2009 21:09 1188492

Ну вы видимо прониклись идеей проекта.
Однако самая важная проблема - кнопка та тут как тут (нужно чтобы её заменяла картинка или чтоб её не было видно, но она функционировала)

SyDr 07-08-2009 23:26 1188522

Может быть просто не использовать кнопку?
А вместо этого обрабатывать клик по "кнопке" вручную?

FlatX007 07-08-2009 23:40 1188532

Возможно таг ? больше ничё путного предложить немогу

Belfigor 08-08-2009 03:10 1188624

Вложений: 2
А реально ли превратить окно из 1 в 2?

Nik_rus 08-08-2009 12:21 1188715

Belfigor, сомневаюсь.
FlatX007, видимо придется отказаться от закругленных краев...и заюзать bmp =)
А за пример - спасибо

FlatX007 08-08-2009 19:18 1188908

Цитата:

Цитата Belfigor
А реально ли превратить окно из 1 в 2? »

Можно - причём относительно просто =)

crashtuak 08-08-2009 20:21 1188960

Нашлось решение: http://www.autoitscript.com/forum/in...howtopic=92675. Штука помогает обычным GUICtrlCreatePic создать на форме png рисунок, и никаких заморочок с GDIPlus. Дальше на событиях мышки можно строить полупрозрачные кнопки.

Nik_rus 08-08-2009 21:08 1188986

Да, действительно работает... СПАСИБО :)


Время: 18:09.

Время: 18:09.
© OSzone.net 2001-