while Schleife mit beliebingem Tastendruck beenden...nur wie???

  • VB6

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von Hariboo83.

    while Schleife mit beliebingem Tastendruck beenden...nur wie???

    HI Leute, ne frage:



    Ich möchte mit VB6 eine while Schleife mit einer Tastatureingabe beenden, dabei soll es egal sein, welche Taste gedrückt wird, z.B. in C kann das so realisiert werden:

    while (!kbhit())

    d.h. die Schleife wird solange durchlaufen, bis irgendeine Taste gedrückt wird.

    Ist das mit VB6 auch so einfach möglich?

    Also:

    while(irgendwas)







    wend

    Hintergrund der ganzen Geschichte, ich lese alle 0,5s einen A/D-Wandler aus, der Wert wird dann in einem Lable angezeigt,

    bei einem bestimmten Wert soll mittels Tastendruck die Schleife verlassen werden, da wäre mir diese Funktion so wie es sie

    im c gibt ganz nützlich. Es soll aber nicht nach erreichen des Wertes automatisch weiter gesprungen werden! Das wäre ja dann

    einfacher, sondern erst über einen beliebigen Tastendruck auf der Tastatur.

    Für sachdienliche Hinweise bin ich sehr dankbar!



    Dann wünsche ich euch allen ein schönes Wochenende...



    Noch eine Frage: Warum ist denn hier der Zeilenabstand so groß?



    Hariboo83
    Hallo & herzlich willkommen im Forum!

    das ist eigentlich recht einfach: du bringst ein KeyDown-Ereignis in deine Form ein, in dem du ne globale Boolean-Variable z.B. auf true stellst, und die fragst du dann in deiner Schleife ab. Das einzige was ich jetzt nicht weiß, ist was "Application.DoEvents" (VB.Net) in VB6 ist, das müsstest du noch in die Schleife einbauen, damit das Programm nicht "stillsteht".
    Und der Zeilenabstand ist so groß, weil du einfach ne andere Schriftgröße genommen hast und viele Zeilenumbrüche drinhast ^^ benutz am besten den Quellcode-Editor, dadrin passts dann immer ;)

    vG,
    Lupus
    Mit einer Schleife

    Eigenschaft KeyPreview der Form auf True setzen

    Visual Basic-Quellcode

    1. Option Explicit
    2. Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
    3. Private MbooStop As Boolean
    4. Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
    5. '// Timer stoppen
    6. MbooStop = True
    7. End Sub
    8. Private Sub Command1_Click()
    9. '// Schleife starten
    10. Do Until MbooStop
    11. DoEvents
    12. Sleep 500
    13. Me.Label1.Caption = ""
    14. Loop
    15. Me.Label1.Caption = "stop"
    16. End Sub


    oder mit einem Timer

    Visual Basic-Quellcode

    1. Option Explicit
    2. Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
    3. Me.Timer1.Enabled = False
    4. End Sub
    5. Private Sub Command2_Click()
    6. '// Timer starten
    7. Me.Timer1.Intervall = 500
    8. Me.Timer1.Enabled = True
    9. End Sub
    10. Private Sub Timer1_Timer()
    11. Me.Label1.Caption = ""
    12. End Sub
    Hi Leute es funktioniert alles ohne Probleme, genau so hab ich mir das Vorgestellt!

    Es funktioniert mit allen Tasten, ausser mit den Pfeiltasten, das ist nicht so schlimm... mit beiden ENTER Tasten gehts auch nicht, schön wäre es, wenn man diese auch noch aktivieren könnte.

    Hier mal mein Code:

    Visual Basic-Quellcode

    1. Option Explicit
    2. Private Taste As Boolean
    3. Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
    4. Taste = True
    5. End Sub
    6. Private Sub cmdSPG_3V3_Click()
    7. cmdDummy.SetFocus
    8. Dim Spannung As Double
    9. Frequenzzähler_weg
    10. Verzoegerung 0.25
    11. Pruefspitze_an
    12. Spannungsteiler_ein
    13. KeyPreview = True
    14. Do Until Taste
    15. DoEvents
    16. Verzoegerung 0.5
    17. Spannung = AD_Wandlung_Kanal(3) * 2
    18. Spannung = Round(Strom, 2)
    19. lblIstwert4.Caption = Format(Spannung, "0.00" & " V")
    20. Loop
    21. Taste = False
    22. KeyPreview = False
    23. End Sub

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Hariboo83“ ()