Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz

Rekomendowane odpowiedzi

Opublikowano

moze ktos z was zobaczy gdzie mam blad;/ bo juz nie wiem co moze byc zle "twoja kwota" wynosci 10 a jak wpisze np 5 to wyskakuje blad;/

to gra w kubki:)

 

 

To jest ukryta treść, proszę

 

Do
$wiek+=1
Until ŻycieGetMsg() = -3

zbieram +

Opublikowano

ej ta gra jest bezsensu, bo nigdy nie będziesz miał jakiejkolwiek pewności że kwadrat (tu: kubek) będzie akurat na 3 miejscu a nie np. na 1.

550W OCZ Fatal1ty Modular SLI, AMD Phenom II X4 960T BOX (3.0GHz, Quad Core, 6MB, 95W, AM3), ASRock 870 870 Extreme3, DDR3 4GB 2000MHz PDP Patriot PGS Sector5 Low Voltage (2x2GB, DualDDR, CL9), Radeon HD6770 Sapphire 1024MB GDDR5, DP, HDMI, DVI, PCI-E 850/4800, SilentiumPC Brutus 410 Pure Black

wqdz690429546a.jpg Piszę poprawnie po polsku.

Opublikowano

ej ta gra jest bezsensu, bo nigdy nie będziesz miał jakiejkolwiek pewności że kwadrat (tu: kubek) będzie akurat na 3 miejscu a nie np. na 1.

 

w tej wersji nie miesza sie kubkami tylko "kolka" ktora powinna w nich byc:p

 

kubki sa 3 a pod jednym jest ukrty label(czerwony)

 

jesli chcesz wiedziec gdzie jest to odblokuj tooptip(94 linijka) bedzie w nim gdzie jest wygrana tzn pod ktorym butonem(kubkiem), labek ciagle tam jest ale schowanyi pokazuje sie po schowaniu butona

Do
$wiek+=1
Until ŻycieGetMsg() = -3

zbieram +

Opublikowano

Wywal sleepa z głównej pętli - GuIGetMsg() ma wbudowanego. Powodujesz tylko zacinki programu (jeśli kliknę [X] w momencie Sleep(100) - zero reakcji).

 

Co do WM_COMMAND:

 

When the user function is called then these 4 parameters have the following values:

Position Parameter Meaning

1 hWnd The Window handle of the GUI in which the message appears.

2 Msg The Windows message ID.

3 wParam The first message parameter as hex value.

4 lParam The second message parameter as hex value.

 

Zgadnij skąd? ZGADŁEŚ! Z AUTOITOWEGO HELPA, artykuł GuiRegisterMsg.

 

Drugiego parametru w AutoIt w ogóle nie używasz. W C/C++ pisanym pod WinApi jest tylko jedna funkcja odbierająca WinMsg's i tamtejszy odpowiednik drugiego parametru identyfikuję akcję przeprowadzoną przez użytkownika.

 

W AutoIcie każdą funkcję / akcję rejestrujesz osobno, więc dokładnie wiesz, co się właśnie dzieje, więc drugi parametr jest zbędny.

 

Pierwszy to hwnd okna z którego 'przyszła' wiadomość. Używasz przy większej liczbie okien.

 

wParam i lParam to dodatkowe informacje na temat akcji, co w nich będzie - dowiesz się na MSDN (wpisujesz w google nazwę Msg'a i znajdziesz). Na ten przykład:

http://msdn.microsoft.com/en-us/library/ms647591(v=vs.85).aspx

 

W tak prostym GUI tylko lParam zawiera ciekawą informację, to jest handle do Kontrolki GUI, na którą została przeprowadzona akcja.

 

I właśnie po lParam, to jest handle, powinno się interpretować tę informację.

 

Poprawny kod:

To jest ukryta treść, proszę

 

Działa? NIE DZIAŁA.

 

Hwnd do kontrolki, przekazywany w $lParam, jest w postaci Windowsowego HWND. Nie ma NIC wspólnego z wewnętrzną identyfikacją nadawaną przez Autoit (lizcby naturalne od 1 do 255).

 

Aby zadziałało, należy skorzystać z GuiCtrlGetHandle():

 

To jest ukryta treść, proszę

 

Wszystko pięknie? NIE.

 

Załóżmy, że masz bardziej skomplikowane GUI. Używasz w nim, powiedzmy, menu kontekstowego. Ładny przykład w: _GUICtrlMenu_CreatePopup

 

Aby rozróżnić, czy $wParam zawiera informacje na temat menu kontekstowego (które jest w zasadzie takim malutkim GUI tworzonym 'on the fly'), czy z głównego okna GUI, czy może z jakiejś popierdółki z Opcjami (jakiegoś Child Window), należy wcześniej rozpatrzyć parametry HWND oraz $lParam.

 

Jak widać na MSDN'ie

http://msdn.microsoft.com/en-us/library/ms647591(v=vs.85).aspx

 

$lParam zawiera dwie informacje: w HiWord jest to informacja, czy MSG nadchodzi z Menu, z kontrolki, czy z akceleratora ( nie każ mi mówić o akceleratorach...), zaś w LoWord jest to identyfikator wewnętrzny kontrolki/przycisku/akceleratoru/elementu menu.

 

Wyjaśnia się, dlaczego wcześniej kod rozpatrywany po $lParam działał (i to nawet bez użycia GuiCtrlGetHandle) - 'Control defined notification code' jest w AutoIcie zawsze równy zero, zaś ControlIdentifier to właśnie ID zwracane w AutoIcie przez funkcje GuICtrlCreate*. Wystarczyłoby jednak, abyś do swojego GUI dodał wspomniane kontekstowe menu, a wszystko by szlag trafił.

 

Aby 'wyłuskać' HiWord oraz LoWord z LongWord używasz funkcji _WinApi_HiWord oraz _WinApi_LoWord.

 

LongWord to słowo 16bitowe, High oraz Low to wysoki i niski 'wyraz' tego słowa, każdy jest 8 bitowy i zawiera inną informację.

 

Zawsze wParam składa się z HiWord oraz LoWord. Zawsze należy go tak rozbijać, rozpatrywać w zasadzie w postaci dwóch komunikatów w jednym.

 

Poprawny kod:

To jest ukryta treść, proszę

 

Oczywiście wypada dodać jeszcze po drodze

To jest ukryta treść, proszę

 

Zauważ, że zniknęły GuiCtrlGetHandle. To oczywiste uproszczenie - nie ma sensu 'zapytywać' przy każdym kliknięciu o odpowiednik windowsowego HWND. Wystarcz użyć raz, przy deklaracji zmiennych:

To jest ukryta treść, proszę

 

 

 

Macie swój cholerny poradnik!

 

 

 

Teraz mam nadzieję, że dodasz do tego poprawnie działające Menu Kontekstowe, i wkleisz tutaj kod.

Ta sygnatura jest pusta.

Opublikowano

drugi raz dzieki:P

 

czyli powinno tu u mnie wygladac tak?

To jest ukryta treść, proszę

 

tylko ze te "kubki"-butonu w formie nie znikaja po kliknieciu teraz;/

Do
$wiek+=1
Until ŻycieGetMsg() = -3

zbieram +

×
×
  • Dodaj nową pozycję...