Strona: [  << <   1   > >>  ]  z  1     
Autor Temat: Czekanie na naciśnięcie Buttona
DJK



Typ: neutral
Postów: 871
Zarejestrowany: Feb 2004
Czekanie na naciśnięcie Buttona

Witam !!!

Mam pytanie:

Jakiego kodu muszę użyć aby program zatrzymywał się w odpowiednich momentach i czekał aż nacisnę Buttona ??

Chodzi mi o to że w ListBox wyświetla mi kolejne kroki pewnego algorytmu i co krok musi się zatrzymać i czekać aż nacisnę Buttona "Dalej", no chyba że nacisnę Buttona "Koniec" i kończy wypisywanie w ListBox

Czekam na propozycję i z Góry Dziękuję. Pozdrawiam


_____________________________________________
Jeśli można coś zrobić w sposób optymalny to czemu nie

27-06-2004 17:48
Pokaż profil DJK  Wyślij email do DJK   Odwiedź stronę DJK  
losmac
"profesorek"




Typ: neutral
Postów: 758
Zarejestrowany: May 2003

A możesz jaśniej?

Rozumiem, że masz jakiegoś kreatora z przyciskami Dalej, Wstecz, Zakończ.
W kolejnych krokach coś się dzieje...
A Ty chcesz żeby program w odpowiednich momentach zatrzymywał się... Tylko co rozumiesz pod pojęciem "w odpowiednich momentach"? - przejście do następnego kroku kreatora, czy jeszcze coś innego?

Abstrahując od tematu, najłatwiej zatrzymać kod wypisując na ekranie komunikat, typu:
retVal = MsgBox ("Czy chcesz kontynuować?",vbQuestion + vbYesNo + VBDefaultButton1, "Pytanie"
If retVal = vbYes then
    'kontynuujesz
Else
    'kończysz
End If

Proszę, podawaj więcej szczegółów, a łatwiej Ci bedzie pomóc...


_____________________________________________
POSTULATY STARUSZKA:
1) Ludzie, dbajcie o polszczyznę!!!
2) Ludzie, zadawajcie kompletne pytania, a nie rzucacie ochłapy i trzeba się domyślać o co chodzi!!!

Powodzenia
Maciej Łoś

27-06-2004 19:46
Pokaż profil losmac  Wyślij email do losmac   Odwiedź stronę losmac  
DJK



Typ: neutral
Postów: 871
Zarejestrowany: Feb 2004

W tym problem, że nie chce wykorzystywać MSGBOX'a

Tak jak napisałem mam ListBox, w którym podany jest pierwszy krok algorytmu.

Program "stopuje" i w momencie gdy nacisnę Buttona "Dalej" pojawia się kolejny krok algorytmu w ListBox

Chodzi o to jak dodawać kolejne linijki tekstu do ListBox w momencie kiedy nacisnę Button "Dalej"

Przykład:

ListBox pokazuje

String ----->  "1. Pierwszy Krok algorytmu"

I w tym momencie program "zatrzymuje się"

Naciskam Button "Dalej" i w ListBox dodana jest linijka:

String ----->  "2. Drugi Krok Algorytmu"

Jaśniej nie potrafię

Czekam na rady i z Góry THX. Pozdrawiam


_____________________________________________
Jeśli można coś zrobić w sposób optymalny to czemu nie

27-06-2004 21:35
Pokaż profil DJK  Wyślij email do DJK   Odwiedź stronę DJK  
m-a-x



Typ: neutral
Postów: 366
Zarejestrowany: Jan 2003

Można to zrobić na wiele sposobów. Nic nie potrzeba stopować bo to co Ty mowisz da sie np zrobić w ten sposób: tworzysz sobie resurce z stringami(tekstem/algorytmem który ma być pokazywany) a następnie wklepujesz kod

Private i As Integer

Private Sub Command1_Click()
i = i + 1
List1.AddItem LoadResString(i)
End Sub

Private Sub Form_Load()
i = 100
End Sub


To samo można zrobić przy pomocy jakiejś tablicy albo - bardziej "prymitywnie" - za pomocą CASE.


_____________________________________________

Problemem zazwyczaj nie jest brak osób znających odpowiedź a zadanie właściwego pytania!

28-06-2004 00:17
Pokaż profil m-a-x  Wyślij email do m-a-x   
anonim




Typ: Nie zarejestrowany

A nie da sie tych kolejnych krokow algorytmow napisac w oddzielnych procedurach i wykonywac je oddzielnie po kolei?
Moze nie zrozumialem ale jestem poczatkujacym i kiedys pisalem taki program obliczeniowy w ktorym bylo ponad 400 wzorow i w odpowiednich miejscach trzeba bylo dobierac wspolczynniki zaleznie od jakiejs wartosci obliczonej i po prostu podzielilem to na tyle czesci ile bylo tych doborow wspolczynnikow i po wpisaniu odpowiedniej wartosci wykonywalem nastepna procedure (kontynuacja obliczen) az do nastepnego doboru. Moze to zbyt prymitywne dla takich fachowcow jak wy programisci ale u mnie dzialalo.

28-06-2004 00:22
  
losmac
"profesorek"




Typ: neutral
Postów: 758
Zarejestrowany: May 2003
Można to zrobić tak:


'dodaj zmienną widzialną w całym module
Dim iKrok as Integer
Const iMinKrok as Integer = 0
Dim iMaxKrok as Integer = 5

Private Sub WypiszNastepnyKrok(ktory As Integer)

Select Case ktory
    Case iMinKrok
        ListBox->AddItem "Krok 1"
        'jakieś czynności
    Case 2
        ListBox->AddItem "Krok 2"
        'jakieś czynności
    Case 3
        ListBox->AddItem "Krok 3"
        'jakieś czynności
    Case 4
        ListBox->AddItem "Krok 3"
        'jakieś czynności
    Case iMaxKrok
        ListBox->AddItem "Krok 1"
        'jakieś czynności

End Select

End Sub



'przy naciśnięciu Przycisku Dalej:
Private Sub Dalej_Click()

If iKrok < iMaxKrok Then
    iKrok = iKrok + 1
    WypiszNastepnyKrok iKrok
End If

End Sub

'przy naciśnięciu Przycisku Dalej:
Private Sub Wstecz_Click()

If iKrok > iMinKrok Then
    iKrok = iKrok - 1
    WypiszNastepnyKrok iKrok
End If

End Sub


GOTOWE!!!


_____________________________________________
POSTULATY STARUSZKA:
1) Ludzie, dbajcie o polszczyznę!!!
2) Ludzie, zadawajcie kompletne pytania, a nie rzucacie ochłapy i trzeba się domyślać o co chodzi!!!

Powodzenia
Maciej Łoś

28-06-2004 05:58
Pokaż profil losmac  Wyślij email do losmac   Odwiedź stronę losmac  
DJK



Typ: neutral
Postów: 871
Zarejestrowany: Feb 2004

Witam

Kurcze chyba nikt mnie nie rozumie albo ja źle to opisuję

W tym problem, że nie da się tego zrobić CASEem bo

Naciskam jakiś button i wywoływana jest PROCEDURA NR 1

W tej procedurze znajdują się linijki które są wypisywane w LISTBOX (Krok1)

I problem w tym,że w PROCEDURA NR1 jest wywołanie następnej procedury PROCEDURA NR2, w której też znajdują się linijki wypisywane w LISTBOX (Krok2) itd.

Przykład:

Private Sub PROCEDURA1()
...
...
wypisywanie w ListBOX w zależności od wcześniejszych obliczeń w PROCEDURA 1

stop <------- i tu powinien się zatrzymać i czekać na naciśnięcie BUTTON "Dalej"
...
...
Call PROCEDURA2
...
End Sub


Private Sub PROCEDURA2()
...
...
wypisywanie w ListBOX w zależności od wcześniejszych obliczeń w PROCEDURA 2

stop <------- i tu powinien się zatrzymać i czekać na naciśnięcie BUTTON "Dalej"

...
...
Call PROCEDURA3
...
End Sub

itd.

Każda Procedura jest kolejnym krokiem algorytmu a wyniki są wypisywane w LISTBOX

I chodzi o to jak zatrzymać program po wypisaniu wyników po każdym kroku aby po naciśnięciu BUTTON "Dalej" wywoływana była następna procedura

Hmm yślę że teraz jest wszystko jasne

Pozdrawiam i czekam na porady


_____________________________________________
Jeśli można coś zrobić w sposób optymalny to czemu nie

28-06-2004 12:10
Pokaż profil DJK  Wyślij email do DJK   Odwiedź stronę DJK  
m-a-x



Typ: neutral
Postów: 366
Zarejestrowany: Jan 2003

Ponieważ to co tu napisałes (przynajmniej mi sie tak wydaje) nie ma sensu tzn nie wiem po co mialbyś pisać w ten sposob program. Można to pewnie zrobić za pomocą instrukcji warunkowych typu If/Else lub Case tylko sam jeszce o tym nie wiesz Poponuję Ci zebyś umieścił tu fragment kodu obydwu procedur (1 i 2).

Teraz np nie wiem czy po tym "stopie" w procedurze nr np 1 jest jakiś kod przed wywołaniem procedury 2? czy aby napewno te wszystkie procedury są potrzebne? Może wogóle da sie to wszystko zrobić bez nich - po co komplikować program? Tak wiec - umieść najlepiej fragment rzeczywistego kodu


_____________________________________________

Problemem zazwyczaj nie jest brak osób znających odpowiedź a zadanie właściwego pytania!

28-06-2004 15:56
Pokaż profil m-a-x  Wyślij email do m-a-x   
losmac
"profesorek"




Typ: neutral
Postów: 758
Zarejestrowany: May 2003

DJK, właśnie dostałeś odpowiedź na to, jak to rozwiązać, a Ty próbujesz upchać wszystko w jedną procedurę. Zlituj się i posłuchaj dobrych rad, czyli:
Private Sub WypiszNastepnyKrok(ktory As Integer)

Select Case ktory
    Case iMinKrok
        Procedura1
    Case 2
        Procedura2
    Case 3
        Procedura3
    Case 4
        Procedura4
    Case iMaxKrok
        Procedura5
End Select

End Sub

Jak czegoś nie rozumiesz, to wyślę Ci przykładowy kod w Excelu, by nie komplikować sprawy...


_____________________________________________
POSTULATY STARUSZKA:
1) Ludzie, dbajcie o polszczyznę!!!
2) Ludzie, zadawajcie kompletne pytania, a nie rzucacie ochłapy i trzeba się domyślać o co chodzi!!!

Powodzenia
Maciej Łoś

28-06-2004 18:00
Pokaż profil losmac  Wyślij email do losmac   Odwiedź stronę losmac  
andrey
Łódź



Typ: neutral
Postów: 295
Zarejestrowany: Mar 2003

Czytając post DJK chyba wiem o co mu chodzi.
Powiedzcie mi czy używacie breakpointów aby patrząc krok po kroku co się dzieje z kodem programu by moc wyeliminować błędy?
Jeżeli breakpointów macie jeden pod drugim to program będzie się zatrzymywał przy każdej linijce kodu i żeby kontynuować musicie naciskać przycisk start. Chyba o to chodzi DJK aby móc wykonywać kod krok po kroku Jezeli jeszcze nikt mnie nie zrozumial to dam przykład:
    If cos =ktos then jupi
    ' program czeka na nacisniecie przycisku dalej i przechodzi do nastepnej linijki kodu
    Select Case blah
    ' program czeka na nacisniecie przycisku dalej i przechodzi do nastepnej linijki kodu
    case 1
    ' program czeka na nacisniecie przycisku dalej i przechodzi do nastepnej linijki kodu
    case 2
    ' program czeka na nacisniecie przycisku dalej i przechodzi do nastepnej linijki kodu
    End Select
    ' program czeka na nacisniecie przycisku dalej i przechodzi do nastepnej linijki kodu
    ' itd

Na razie nie mam pomyslu jak cos takiego zrobic


_____________________________________________
http://www.carbondesign.pl/ - rowery poziome, trójkołówce, handbike-i, tuning, akcesoria

28-06-2004 23:39
Pokaż profil andrey  Wyślij email do andrey   Odwiedź stronę andrey       3078613
DJK



Typ: neutral
Postów: 871
Zarejestrowany: Feb 2004

FRAGEMENT KODU:

Private Sub BadanieTabBX(ByRef TabBX As MSFlexGrid, ByVal alfamax As Double, ByVal Klasa As Integer, ByVal Tryb As Integer)

If Tryb = 1 Then
        LstKrok.AddItem "4. Wyróżniamy atrybut warunkowy Ai, dla którego współczynnik ALFA ma wartość maksymalną:"
        LstKrok.AddItem ""
End If

If Tryb = 1 Then
    For X = 1 To TabBX.Cols - 1
            TabBX.Row = 3
            TabBX.Col = X
            If Trim(TabBX.Text) = alfamax Then
                                LstKrok.AddItem Space(3) & "- dla " & Trim(TabBX.TextMatrix(0, X)) & " alfa ma wartość maksymalną: " & alfamax
            End If
    Next X
LstKrok.AddItem ""

LstKrok.AddItem "5. Jeżeli wyróżniony atrybut Ai jest atrybutem, dla którego istnieje dolne przybliżenie Y" & Klasa + 1 & " to generowane"
LstKrok.AddItem Space(4) & "są reguły dla obiektów należących do dolnego przybliżenia."
LstKrok.AddItem ""
LstKrok.AddItem "6. Jeżeli dolne przybliżenie dla wybranego atrybutu Ai jest zbiorem pustym lub reguły zostały"
LstKrok.AddItem Space(4) & "wygenerowane to następuje redukcja obiektów X. Odrzucamy obiekty, które należą do dolnego"
LstKrok.AddItem Space(4) & "przybliżenia oraz te, które nie mają części wspólnej z rozpatrywaną klasą."
LstKrok.AddItem ""
End If


For X = 1 To TabBX.Cols - 1
    TabBX.Row = 3
    TabBX.Col = X
    If Trim(TabBX.Text) = alfamax Then
                        TabBX.Row = 2
                        If TabBX.Text = "" Then
                                                If Tryb = 1 Then
                                                LstKrok.AddItem Space(3) & "- dla " & Trim(TabBX.TextMatrix(0, X)) & " nie istnieje dolne przybliżenie, więc dokonujemy redukcji zbioru X:"
                                                LstKrok.AddItem ""
                                                End If
                                               
                                                Call Redukcja(TabBX, Klasa)
                                                'Call TestujX(Tryb)
                                                If TestujX(TabBX, Tryb, X) <> 0 Then
                                                                    If TabBX.Cols > 2 Then
                                                                                    Call Sklej(TabBX, Klasa, Tryb)
                                                                    End If
                                                                    Else
                                                                        Exit For
                                                End If
                                            Else
                                                If Tryb = 1 Then
                                                LstKrok.AddItem Space(3) & "- dla " & Trim(TabBX.TextMatrix(0, X)) & " istnieje dolne przybliżenie, więc generujemy reguły i dokonujemy redukcji zbioru X:"
                                                LstKrok.AddItem ""
                                                End If
                                               
                                                Call Reguly(TabBX, Klasa, X, Tryb)
                                                Call Redukcja(TabBX, Klasa)
                                                'Call TestujX(Tryb)
                                                If TestujX(TabBX, Tryb, X) <> 0 Then
                                                                    If TabBX.Cols > 2 Then
                                                                                    Call Sklej(TabBX, Klasa, Tryb)
                                                                    End If
                                                                    Else
                                                                        Exit For
                                                End If
                        End If
    End If
Next X

End Sub

Private Function TestujX(ByRef Flex As MSFlexGrid, ByVal Tryb As Integer, ByVal Kolumna As Integer) As Integer
Dim X, Tester As Integer
Dim Obiekty As String

Obiekty = ""

Tester = 0
For X = 0 To wiersz - 1
    If Matrix3(X) <> "" Then
                          Tester = 1
                          Exit For
    End If
Next X

If Tryb = 1 Then
                If Tester <> 0 Then
                                    For X = 0 To wiersz - 1
                                        If Matrix3(X) <> "" Then
                                                Obiekty = Obiekty & " " & Matrix3(X)
                                        End If
                                    Next X
                                    LstKrok.AddItem Space(3) & "X = {" & Trim(Obiekty) & "}"
                                Else
                                    LstKrok.AddItem Space(3) & "X = {-}"
                End If
LstKrok.AddItem ""
LstKrok.AddItem "7. Jeżeli po redukcji zbiór X jest zbiorem pustym, to klasa została w pełni opisana."
LstKrok.AddItem Space(4) & "Analizujemy następną klasę decyzyjną."
LstKrok.AddItem ""
LstKrok.AddItem "8. Jeżeli po redukcji zbiór X nie jest pusty, to usuwamy atrybuty, którymi była opisana klasa"
LstKrok.AddItem Space(4) & "decyzyjna i sprawdzamy zbiór atrybutów warunkowych."
LstKrok.AddItem ""
LstKrok.AddItem Space(3) & "- jeżeli zbiór C jest pusty to wystąpiła niejednoznaczność i można wygenerować jedynie reguły"
LstKrok.AddItem Space(5) & "niedeterministyczne."
LstKrok.AddItem ""
LstKrok.AddItem Space(3) & "- jeżeli zbiór C nie jest pusty to tworzymy zbiór {C - " & Trim(Flex.TextMatrix(0, Kolumna)) & "}"
LstKrok.AddItem ""
LstKrok.AddItem ""

If Tester <> 0 Then
                    LstKrok.AddItem "Zbiór C nie jest pusty, więc:"
                    LstKrok.AddItem ""
                    Obiekty = ""
                    For X = 1 To Flex.Cols - 1
                                If X <> Kolumna Then
                                Obiekty = Obiekty & " " & Trim(Flex.TextMatrix(0, X))
                                End If
                    Next X
                    LstKrok.AddItem Space(3) & "C' = {C - " & Trim(Flex.TextMatrix(0, Kolumna)) & "} = {" & Trim(Obiekty) & "}"
                    LstKrok.AddItem ""
                    LstKrok.AddItem "9. Wykonujemy następną iterację algorytmu dla zmodyfikowanego zbioru atrybutów warunkowych"
                    LstKrok.AddItem ""
                Else
                    LstKrok.AddItem "Zbiór X jest pusty, więc analizujemy następną klasę decyzyjną."
                    LstKrok.AddItem ""
End If
End If

TestujX = Tester
End Function

ANDREY dokładnie o to mi chodzi


_____________________________________________
Jeśli można coś zrobić w sposób optymalny to czemu nie

28-06-2004 23:43
Pokaż profil DJK  Wyślij email do DJK   Odwiedź stronę DJK  
DJK



Typ: neutral
Postów: 871
Zarejestrowany: Feb 2004

Do Losmac - spójrz na ten fragment kodu i powiedz mi jak to zrobić za pomocą CASE bo jakoś nie wydaje mi się żeby w tym przypadku to było możliwe szczególnie że poszczególne wywołania funkcji i procedur są w pętlach (patrz wywołanie funkcji TESTUJX)

Pozdrawiam


_____________________________________________
Jeśli można coś zrobić w sposób optymalny to czemu nie

29-06-2004 10:16
Pokaż profil DJK  Wyślij email do DJK   Odwiedź stronę DJK  
losmac
"profesorek"




Typ: neutral
Postów: 758
Zarejestrowany: May 2003

Myślę, że się da to zrobić za pomocą instrukcji Select case, choć nie dokonywałem dokładnej analizy kodu. Z pobieżnej - podkreślam - z pobieżnej analizy wynika, że da się to zrobić.
Zauważ, że Twoja funkcja TestujX zwraca wynik w postaci jakiejś liczby. Może od tego wyniku należałoby uzależnić dalsze przechodzenie Twojego kodu.
Ponadto, myślę, że to, co wykonujesz w pętli dałby się dostosować tak, by w zależności od trybu (najczęściej 1) i wyniku zwracanego przez funkcję TestujX można było wykonywać za pomocą instrukcji Select case. Zauważ, że najczęściej dopisujesz coś do listbox'a jak tryb ma wartość 1.

Nie znając i nie zagłębiając się mocniej w temat - trudno jest cokolwiek więcej powiedzieć. Przyznaję, że na pewno wymagać to będzie trochę pracy...


_____________________________________________
POSTULATY STARUSZKA:
1) Ludzie, dbajcie o polszczyznę!!!
2) Ludzie, zadawajcie kompletne pytania, a nie rzucacie ochłapy i trzeba się domyślać o co chodzi!!!

Powodzenia
Maciej Łoś

01-07-2004 23:31
Pokaż profil losmac  Wyślij email do losmac   Odwiedź stronę losmac  
Knight Lore''FC




Typ: neutral
Postów: 240
Zarejestrowany: Jan 2003

moze nie za bardzo eleganckie ale dziala:


Dim Dalej As Boolean
'-----------------------------


Private Sub Command1_Click()
    'nasz klawsz dalej
    'kliknieto !!
    Dalej = True
End Sub



'
'-----------------------------
Sub moja_procedura()

Dalej = False

'opisujemy (liczymy) krok 1
List1.AddItem "krok 1"
'czekamy na KLIK
While Dalej = False
    Command1.SetFocus
    DoEvents
Wend
Dalej = False


'opisujemy (liczymy) krok 2
List1.AddItem "Krok 2"
'czekamy na KLIK
While Dalej = False
    Command1.SetFocus
    DoEvents
Wend
Dalej = False


'opisujemy (liczymy) krok 3
List1.AddItem "Krok 3"
'czekamy na KLIK
While Dalej = False
    Command1.SetFocus
    DoEvents
Wend
Dalej = False


'itd...

End Sub

02-07-2004 22:55
Pokaż profil Knight Lore  Wyślij email do Knight Lore        1065423
Wszystkich odpowiedzi: 13 :: Maxymalnie na stronę: 20
Strona: [  << <   1   > >>  ]  z  1