Archiwum
- LATANIE W KATARZE
- Sterowanie systemem Windows za pomocą programu NirCmd (Windows XP, Vista, 7)
- Jak zablokować ostrzeżenie pojawiające się przy uruchamianiu pobranych programów? (Wi
- Alternatywa dla Nero. Test najlepszych programów do nagrywania płyt
- Toshiba uruchamia w Polsce program CRU dla posiadaczy notebooków
- TEST: 20 programów antywirusowych. Który najlepszy?
- Live Essentials 11 - programowy niezbędnik Windows
- NVIDIA 3D Vision w programie Mars 500
- New: quentinex Other: quentinex,xomer96Pl859,tomo5513,rafaello,Mathik [IP]
- Dr.Web 6.00.0.05310 dla Windows
- New: bartek8712 Other: bartek8712,Coldar,Kasai9710,dominik8895,HST73,marc inekxx95x [IP]
- zanotowane.pl
- doc.pisz.pl
- pdf.pisz.pl
- robsoft.keep.pl
Cytat
Długie szaty krępują ciało, a bogactwa duszę. Sokrates
I byłem królem. Lecz sen przepadł rankiem. William Szekspir (właść. William Shakespeare, 1564 - 1616)
Dalsza krewna: Czy śmierć to krewna? - życia pytasz się kochanie, tak krewna, ale dalsza, już na ostatnim planie. Sztaudynger Jan
Dla aktywnego człowieka świat jest tym, czym powinien być, to znaczy pełen przeciwności. Luc de Clapiers de Vauvenargues (1715 - 1747)
A ludzie rzekną, że nieba szaleją, a nieba rzekną: że przyszedł dzień Wiary. Cyprian Kamil Norwid (1821-1883)
aaaaLATANIE W KATARZEaaaa
Witam ponownie!Co to my dzisiaj mieliśmy? Ach tak! Okienka :). No więc dzisiaj nauczymy się tworzyć okienka. Jak się do tego zabierzemy? A no w bardzo prosty sposób. Na początek standardowo puste okienko:
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
GuiCreate("Puste okno", 100, 100, -1,-1, $WS_POPUP, -1, 0)
GuiSetState()
while 1
$msg=GuiGetmsg()
WEnd
Ależ ja jestem wredny :). Dałem wam okno, którego nie da się zamknąć. Nie martwcie się jednak. Zamkniecie je bezproblemowo jeśli użyjecie tray'a. Ale nie chodziło mi o to, żeby was zdenerwować. Chciałem wam po prostu pokazać, że isnieją inne okna niż te standardowe, które widzicie na codzień. Ale po kolei:
Pierwszy argument funkcji (jak zapewne się domyśliliście), to nic innego jak tytuł okna. Następne dwa to szerokość i wysokość okna. Potem mamy położenie okna(Myślę, że tego nie trzeba tłumaczyć). Następnie mamy nasz styl okna(czyli to o co nam chodziło), styl rozszerzony i przynależność okna. -1 oznacza oczywiście wartość domyślną :).
Styl okna to jest oczywiście wygląd naszego tworu. I reasumując możemy tworzyć okna bez paska tytułowego, tylko z przyciskiem zamknięcia, czyli 'X' i wiele wiele innych.
Styl rozszerzony, to prawie to samo, tylko, że wymaga więcej deklaracji. Są to po prostu style rozszerzone.
Przynależność okna interesuje nas tylko w przypadku, gdy mamy więcej niż jedno okno, a więc narazie nas nie interesje :). Niżej mamy funkcję GuiSetState(), która w magiczny sposób sprawia, że nasze okienko jest widoczne. Za pomocą tej funkcji możemy też zrobić wiele innych rzeczy z naszym okienkiem. Ukryć je używając argumenty '@SW_HIDE', wyłączyć - '@SW_DISABLE', pokazać - '@SW_SHOW'(domyślny argument), czy włączyć - '@SW_ENABLE'. Jak zwykle odsyłam do dokumentacji AutoIT.
Kolejna konstrukcja, to pętla komunikatów, w której zmiennej $msg przypisyjemy wartość zwracaną przez funkcję GuiGetmsg(). Do czego ona służy? Zobaczmy dodając do naszego pustego okienka prosty przycisk:
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
GuiCreate("Puste okno", 100, 100, -1,-1, $WS_POPUP, -1, 0)
$przycisk=GuiCtrlCreateButton("Nie naciskaj mnie!", 100/2-50/2, 100/2-20/2, 50, 20)
GuiSetState()
while 1
$msg=GuiGetmsg()
Switch $msg
Case $przycisk
msgbox(0, "NIEEEEE!", "Miałeś nie wciskać!")
ExitLoop
EndSwitch
WEnd
msgbox(0,@Script_name, "Skrypt zakończył działanie!")
Exit
Trochę skomplikowałem ten skrypt, ale chciałem wam przy okazji pokazać 2 sposoby wyjścia z programu. Teraz po kolei: pierwszą nową linijką jest dodanie naszego przycisku:
$przycisk=GuiCtrlCreateButton("Nie naciskaj mnie!", 100/2-50/2, 100/2-20/2, 50, 20)
Jak widzimy wartość zwracana przez przycisk zostaje przypisana zmiennej przycisk. Wartość ta, to nic innego jak ID przycisku. Mam nadzieję, ze rozumiecie argumenty(kolejno): napis na przycisku, odległość od lewej krawędzi okna, odległość od górnej krawędzi okna(tutaj wyśrodkowane), szerokość przycisku, wysokość przycisku(dalej są jeszcze style, ale musicie się w końcu nauczyć zaglądać do pomocy, przy każdej nowej funkcji ;)).
Dalej jest tylko nasza pętla komunikatów i tutaj właśnie postaramy się zrozumieć, co ona robi. Jeśli ktoś jest ciekawy, to może ją usunąć z programu. Co się stanie? Program się nie uruchomi(teoretycznie). Dla pewności przekształćmy trochę nasz kod i sprawdźmy jak zadziała w takiej postaci:
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
GuiCreate("Puste okno", 100, 100, -1,-1, $WS_POPUP, -1, 0)
$przycisk=GuiCtrlCreateButton("Nie naciskaj mnie!", 100/2-50/2, 100/2-20/2, 50, 20)
GuiSetState()
Sleep(3000)
Okno pojawi się i zniknie po 3 sekundach. A to ci ciekawa rzecz :). Zastanówmy się zatem co musi robić nasza pętla komunikatów. Najpierw w podstawowej wersji:
while 1
$msg=GuiGetmsg()
WEnd
Żeby już nie proponować wam kolejnych złowrogich eksperymentów na biednym komputerze, powiem wam, co robi konkstrukcja While warunek WEnd.
While można przetłumaczyć jak: "podczas, gdy; dopóki". Od razu domyślamy się, co znaczy nasza konstrukcja. Warunek, może być wartością logiczną($a=$b, Not($a=$b), Not(($a=$b) And ($a=5))), zmienną($a), lub właśnie liczbą(1). Warunek jest fałszywy tylko i wyłącznie kiedy warunek=0. No więc (dla tych, którzy się nie domyślili): Konstrukcja ta, będzie wykonywała wszystkie instrukcje zawarte między whiile i WEnd, do momentu, gdy warunek będzie równy 0, lub do napotkania funkcji przerywającej pętlę(bo taka konstrukcja nazywana jest pętlą). Tak więc(dla maksymalnie opornych): Nasze okienko zostanie wyświetlone, a zmiennej $msg bez przerwy przypisywana będzie wartość zwracana przez funkcję GuiGetmsg() (Uff... zmęczyłem się).
O nie! Następna konstrukcja! Ale się wrobiłem :P. No więc zobaczmy co tu mamy:
while 1
$msg=GuiGetmsg()
Switch $msg
Case $przycisk
msgbox(0, "NIEEEEE!", "Miałeś nie wciskać!")
ExitLoop
EndSwitch
WEnd
msgbox(0,@Script_name, "Skrypt zakończył działanie!")
Exit
Widzimy tajemnicze wyrażenia 'Switch', 'Case', 'ExitLoop' i 'EndSwitch'. Pozostała część powinna nam być znana :). No więc(w kółko tylko: 'No więc po kolei') zaczynając od początku ;). "Konstrukcja przyjmuje budowę: Switch wartość(zmienna), {[Case wartosc, instrukcje],[Case wartosc, instrukcje],[..]}, EndSwitch. Tłumacząc: Wybierz wartość,{[jeśli wartość=wartośc, zrób to],[jeśli wartość=wartośc, zrób to],[...]},EndSwitch
Teraz powiemy sobie co daje nam GuiGetmsg(). W innych językach daje nam bardzo dużo informacji, a że to jest okrojony język tutaj GuiGetmsg zwraca nam ID użytej kontrolki(dlatego powtarzane jest tyle razy). Inne informacje pobieramy za pomocą innych funkcji (MouseGetPos()) ;).
Wracając do naszej konstrukcji Switch: Konstrukcja ta pobiera wartość podaną po słowie Switch i wykonuję instrukcje zawarte po Case z tą właśnie wartością. Możemy też dodać (po ostatnim Case) słowo else - 'Case else'. Ten zestaw instrukcji wykona się w przypadku, gdy wartosć nie zostanie znaleziona (w przypadku pętli komunikatów co każde 0,05s w których nic nie zrobimy.
U nas dzieje się tak: Switch zapamiętuję wartość $msg(Id ostatnio użytej kontrolki), sprawdza w kolejnych Case, czy jest dla niego robota, jeśli nie, nie robi nic. W przypadku gdy wciśniesz przycisk, $msg=$przycisk. Switch od razu to zauważa i wykonuje instrukcje zawarte po Case $przycisk aż do następnego Case, bądź do EndSwitch (jeśli nie znajdzie Case). Wtedy wyświetli zaiste błyskotliwy komunikat, po czym wykona ExitLoop (przerwie aktualnie wykonywaną pętlę, czyli pójdzie sobie za WEnd). Za WEnd znajdzie dwie instrukcje. W mesejdżboksie widzimy magiczne wyrażenie: @Script_name, co zwróci nam nazwę naszego exe'ka. Dalej mamy słowo Exit. W zasadzie to i bez niego program zakończyłby działanie, bo nie znalazłby linijek do wykonywania. Zobaczmy teraz różnicę między ExitLoop, a Exit. Jeśli chcemy, żeby jakaś instrukcja wykonywała się bezwzględnie, po zakończeniu programu, we wszystkich funkcjach zamykających zamiast Exit, piszemy ExitLoop, a instrukcje zawieramy za pętlą komunikatów (może to być naprzykład drugie okno, pamiętając o zamknięciu pierwszego ;))
Jak wyglądała by nasza funkcja, gdyby było kilka przycisków i styl okna byłby inny(z przyciskiem 'X')? A tak:
while 1
$msg=GuiGetmsg()
Switch $msg
Case $przycisk1
msgbox(0, @Script_name, "Wcisnąłeś przycisk 1")
Case $przycisk2
msgbox(0, @Script_name, "Wcisnąłeś przycisk 2")
Case $GUI_EVENT_CLOSE ;~// Tak nazywa się przycisk 'X'
ExitLoop
EndSwitch
WEnd
Zauważmy, jak niechlujnie by to wyglądało, gdyby jeden przycisk wykonywał 500 linijek kodu? Między innymi dlatego właśnie powstała możliwość tworzenia funkcji przez użytkownika, czyli coś przez co będę musiał nieźle się nagłowić, bo zapomniałem napisać poradnik o podstawowych instrukcjach i funkcjach (pętle, ify - te sprawy). Tak więc następne poradniki to - Druga część tworzenia okien, czyli nie tylko buttony i poradnik o numerze 2,5 - Podstawowe instrukcje i konstrukcje w AutoIT :)
Wszystkie operatory opisane są w pomocy AutoIt pod hasłem 'Operators'. Życzę udanego programowania :)
Byłbym niezmiernie wdzięczny, gdyby ktoś zechciał wrzucić Screeny, bo informatycy, to z natury leniwe bestie :].
Zezwalam na kopiowanie poradnika tylko z dołączonym linkiem i BANNEREM swiata gier! (tego serwisu) i oczywiście tylko i wyłącznie z tym dopiskiem.
Pozdrawiam:
WaY