Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Problem ze znikającym oknem po puszczeniu klawisza lub wyjechaniu poza obszar

Ostatnio zmodyfikowano 2008-09-22 22:01
Autor Wiadomość
Patzick
Temat założony przez niniejszego użytkownika
Problem ze znikającym oknem po puszczeniu klawisza lub wyjechaniu poza obszar
» 2008-09-22 18:11:09
Robię organizer, i mam pewien problem, chcę, aby menu było po lewej a kolejne rzeczy wykonywały się w okienku po prawej. Napisałem taką funkcję

C/C++
if( mx < 157 && my > 89 && my < 137 )
{
    blit( men1_1, bufor, 0, 0, 0, 89, 157, 48 );
    if( mb == 1 )
    {
        do {
            oceny();
        } while( !( mx < 157 && my > 139 && my < 89 ) && mb != 1 );
       
    };
};

pierwsze działa rewelacyjnie, po najechaniu myszką grafika się zmienia, dalej zaczynają się schodki. Po wciśnięciu lewego klawisza myszki funkcja Oceny(), która na razie ma tylko wyświetlić tabelkę się pojawia, lecz po puszczeniu bądź wyjściu myszką poza teren mx<157 && my>89 && my<137 wraca wszystko do pierwotnej postaci. Czy to wina warunku czy po prostu trzeba jakiegoś innego sposobu, by po wciśnięciu tego włączała się funkcja i wyłączała się dopiero po użyciu innej opcji menu? Dzięki za odpowiedzi :)
P-1656
DejaVu
» 2008-09-22 21:31:21
Z tego co zrozumiałem to kliknięcie działa tak jak chcesz... tylko, że zamyka się okienko z ocenami po puszczeniu klawisza. Powód jest prosty - warunek przestaje być spełniony. W związku z powyższym obecny mechanizm powinieneś zmodyfikować tak, że jeśli przycisk został kliknięty, to zapisujesz informację o tym fakcie (np. w zmiennej typu bool).

Przykładowe rozwiązanie problemu:
C/C++
bool bUruchomioneOceny = false; //inicjacja zmiennej gdzieś na początku programu, PRZED pętlą
//...
if( WcisnietoKlawiszMyszy( 100, 100, 200, 200 ) == true )
{
    bUruchomioneOceny = true;
}

if( bUruchomioneOceny == true )
{
    Oceny();
}
P-1657
Patzick
Temat założony przez niniejszego użytkownika
» 2008-09-22 21:54:44
Pomysł jest super bo już działa, tylko coś było nie tak z samym warunkiem bool, bo efekt był taki sam, znaczy po spełnianiu warunku znów chyba się na false zmieniało. Ale na podstawie Twojego pomysłu dałem zmienną int i wygląda to teraz tak

C/C++
int uruchomoc;

if( mx < 157 && my > 89 && my < 137 ) { blit( men1_1, bufor, 0, 0, 0, 89, 157, 48 ); if( mb == 1 ) { uruchomoc = 1; }; };
if( uruchomoc == 1 ) { oceny(); };

potem przy innym warunku zmienię zmienną int na inną cyfrę, i kolejną funkcję ułożę dzięki temu :)
I tak bez Twojego pomysłu jeszcze bym kluczył w miejscu, wielkie dzięki, chyba, że jeszcze masz pomysł dlaczego to bool nie działa, czy dobrze to wywnioskowałem?
P-1658
DejaVu
» 2008-09-22 22:01:32
Jeśli ustawiałeś wartość zmiennej tuż przed zajściem warunku, a warunek jest umieszczony w pętli to za każdym razem przed wejściem w warunek ustawi Ci wartość = false, więc status flagi gdy przycisk był wciśnięty zostanie wykasowany.

/edit:
Dlatego w komentarzu napisałem, że zmienna musi być zadeklarowana i zainicjowana PRZED pętlą główną programu.
P-1659
« 1 »
  Strona 1 z 1