AutoIt3: Despre GUI-uri, cu calm (III)


Continuăm incursiunea în AutoIt3, capitolul GUI (interfaţa grafică). După cum v-aţi dat desigur seama, ceea ce încerc este să pun la dispoziţie diverse exemple care să acopere elementele principale (control-urile principale, gen button, input, slider, list ş.a.). Desigur, dacă v-aţi instalat AutoIt3 (altfel seria e doar teorie pură) aveţi deja multe exemple incluse în Help. Cred că e unul dintre lucrurile cele mai frumoase la AutoIt3: ai zeci de coduri reduse la esenţă, dar de unde poţi să îţi începi explorarea. Eu doar încerc să duc codurile puţin mai departe, în ceea ce pot să pară aplicaţii mai apropiate de nevoi reale. Iar acum începem cu un minus din articolul trecut: spuneam că GuiCtrlCreatePic merge cu JPG, GIF şi BMP, nu şi cu PNG-uri.

imagine

Şi totuşi mai sus vedeţi afişat un PNG (e cu transparenţă şi de aceea se vede bine peste fundalul cu culoarea implicită din Windows. Doar că pentru a afişa PNG-uri trebuie să trecem prin nişte complicaţii. Ne vom folosi de GDI pentru afişare, şi, după cum veţi vedea în cod, trebuie să fim atenţi la redesenarea ferestrei. Mda… codul e mai urât. Nici nu voi sta să îl explic prea mult. Vă arată doar că se poate şi cu PNG-uri, dacă chiar aveţi nevoie de ele. Rămâne mai simplu cu JPG-uri sau cu GIF-uri (pentru transparenţă). Ca să mai vorbim de un control GUI, am folosit un slider: l-am creat în linia 14, iar în linia 15 i-am indicat limitele (atenţie: se indică maximul şi apoi minimul). În fine, codul de mai jos introduce şi un array.

[PHP]#NoTrayIcon
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <GDIPlus.au3>
#Include <WinAPI.au3>
Opt(‘MustDeclareVars’, 1)
Local $msg,$slider,$hGUI,$hImage,$hGraphic
Local $imagini[5] = ["fluture", "aparat foto", "tastă", "scaun", "ceaşcă"]
$hGUI=GUICreate("CNet.ro – PNGuri",300,340)
_GDIPlus_StartUp()
$hImage = _GDIPlus_ImageLoadFromFile("1.png")
$hGraphic = _GDIPlus_GraphicsCreateFromHWND($hGUI)
GUIRegisterMsg($WM_PAINT, "MY_WM_PAINT")
$slider = GUICtrlCreateSlider(10, 10, 280, 40)
GUICtrlSetLimit(-1, 5, 1)
GuiCtrlCreateLabel("Imaginea " & GUICtrlRead($slider) & ": " & $imagini[GUICtrlRead($slider)-1],20,320,170,200)
GuiSetIcon("iconita2.ico")
GUISetState(@SW_SHOW)
While 1
$msg = GUIGetMsg()
Switch $Msg
Case $GUI_EVENT_CLOSE
ExitLoop
Case $slider
_GDIPlus_ImageDispose($hImage)
$hImage = _GDIPlus_ImageLoadFromFile(GUICtrlRead($slider) & ".png")
GuiCtrlCreateLabel("Imaginea " & GUICtrlRead($slider) & ": " & $imagini[GUICtrlRead($slider)-1],20,320,170,200)
_WinAPI_RedrawWindow($hGUI)
EndSwitch
WEnd
_GDIPlus_GraphicsDispose($hGraphic)
_GDIPlus_ImageDispose($hImage)
_GDIPlus_ShutDown()
Func MY_WM_PAINT($hWnd, $Msg, $wParam, $lParam)
_WinAPI_RedrawWindow($hGUI, 0, 0, $RDW_UPDATENOW)
_GDIPlus_GraphicsDrawImage($hGraphic, $hImage, 25, 60)
_WinAPI_RedrawWindow($hGUI, 0, 0, $RDW_VALIDATE)
Return $GUI_RUNDEFMSG
EndFunc
GUIDelete()[/PHP]

Lucrurile sunt desigur mai simple dacă folosim JPG-uri (asta până când AutoIt va suporta nativ PNG-urile). Am înlocuit slider-ul cu un control input cu săgeţi sus-jos la capăt. De asemenea am schimbat stilul ferestrei: nu mai are buton de închidere în bara de titlu, aşa că am adăugat un buton în interiorul ferestrei (totul în scop didactic).

imagine

Observaţi: codul de mai jos e mult mai scurt şi mai intuitiv. Şi nu cred că e nevoie de explicaţii. Am făcut doar o verificare ca numărul să fie între 1 şi 5 (câte imagini am pus eu în testul meu), astfel că dacă cineva scrie manual 10 sau abc să nu dea eroare. Din săgeţi nu se poate merge decât de la 1 la 5, dar manual poţi pune ce vrei (şi deci provoca erori).

[PHP]#NoTrayIcon
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
$hGUI=GUICreate("CNet.ro – JPGuri",320,300,-1,-1,$WS_BORDER)
$input = GUICtrlCreateInput("1", 10, 10, 50, 20)
$iesire = GUICtrlCreateButton("iesire", 210, 10, 100, 22)
$updown = GUICtrlCreateUpdown($input)
GUICtrlSetLimit($updown,5,1)
$img=GuiCtrlCreatePic("img1.jpg",10, 60,300,188)
GUISetState(@SW_SHOW)
While 1
$msg = GUIGetMsg()
Switch $Msg
Case $GUI_EVENT_CLOSE
ExitLoop
Case $input
$cat = GUICtrlRead($input)
If $cat>0 And $cat<6 Then
GUICtrlSetImage($img,"img" & $cat & ".jpg")
EndIf
Case $iesire
ExitLoop
EndSwitch
WEnd
GUIDelete()[/PHP]
PS: Toate fişierele acestei serii de tutoriale sunt publice şi descărcabile de aici. Exemplele de aici sunt fereastra06.au3 şi fereastra07.au3 (cu imaginile aferente).


Apreciază articolul:

1 stea2 stea3 stea4 stea5 stea (2 evaluări, media: 5,00 din 5)
Loading...Loading...

0 comentarii


Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile necesare sunt marcate *