AutoCAD VBA egyetlen karakter bekérése

AutoCAD VBA egyetlen karakter bekérése
2012-10-01T14:22:11+02:00
2012-10-02T14:53:24+02:00
2022-11-27T00:41:55+01:00
keresztapuuu
Üdvözletem!

Segítséget kérnék az AutoCAD VBA programozásával kapcsolatban. Eddig nem találtam rá választ (google sem segített)...

A következő kódrészletet szeretném módosítani:


Dim InputParancs As String

InputParancs = ThisDrawing.Utility.GetString(False, "a = alsó, k = középső ")
If InputParancs = "a" Then Elhelyezes = "Alsó"
If InputParancs = "k" Then Elhelyezes = "Középső"

A problémám az, hogy miután beírjuk a karaktert, entert kell ütni. Van-e olyan megoldás, ahol csak egyetlen karaktert kér, és már tovább is lép, miután a felhasználó ezt megadta?

A cél az lenne, hogy egy olyan ciklusban futtassam, ami akkor ér véget, ha a bekért karakter "q". De addig viszont pörögne, enter nélkül is.

A válaszokat előre is köszönöm!
Mutasd a teljes hozzászólást!
A keypress az egy eseménykezelő. Az akkor fog lefutni, ha az input fókusz a textbox-on van és lenyomsz egy billentyűt. Nem neked kell meghívni.

A többi nagyjából oké lenne, csak a cikluson belülre tegyél egy doevents sort, mert különben az életben nem fog lefutni az eseménykezelő (VBA az egyszálú programot hoz létre, a ciklus és a GUI is ugyanabban a szálban fut).
Mutasd a teljes hozzászólást!

  • Készíts egy userform-ot, amin van egy textbox. A textbox keypress eseménykezelőjében egy globális változót állíts be a lenyomott billentyű értékére.

    A ciklust úgy írd meg, hogy a ciklus feltételben ellenőrizze a kérdéses változó értékét és lépjen ki, ha annak értéke a q (pl. while akarmi<>'q'). Minimum a ciklus végén, de ha egy ciklus elég komplex akkor rendszeresen menet közben is legyen doevents hívás. A ciklus elkezdése előtt a userform-ot jelenítsed meg nem modális módon. A ciklus lefutása után meg zárd be.
    Mutasd a teljes hozzászólást!
  • Köszönöm szépen a gyors választ!

    Azonban még nem egészen értem...
    Van egy modul, ebben deklaráltam a Parancs nevű változót

    Global Parancs as String

    Van egy Userform, ahol a textboxba a következőt írtam:

    Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
    Parancs = KeyAscii
    End Sub

    És van egy alprogram, ahová nem egészen tudom mit kellene írni :)

    Sub Proba()

    UserForm1.Show vbModeless
    Do
    Call TextBox1_KeyPress
    Loop Until Parancs = "q"
    UserForm1.Hide

    End Sub


    Csak próbálkoztam, és persze nem is jó. Mit csinálok rosszul?
    Mutasd a teljes hozzászólást!
  • A keypress az egy eseménykezelő. Az akkor fog lefutni, ha az input fókusz a textbox-on van és lenyomsz egy billentyűt. Nem neked kell meghívni.

    A többi nagyjából oké lenne, csak a cikluson belülre tegyél egy doevents sort, mert különben az életben nem fog lefutni az eseménykezelő (VBA az egyszálú programot hoz létre, a ciklus és a GUI is ugyanabban a szálban fut).
    Mutasd a teljes hozzászólást!
  • Köszönöm a választ, próbálkoztam tovább. Az eredmény ez lett:

    A modulban:

    Sub Proba()
    UserForm1.Show vbModeless
    Do
    DoEvents
    Loop Until Parancs = 113
    UserForm1.Hide
    End Sub


    A form-on:

    Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
    Parancs = KeyAscii
    TextBox1.Text = ""
    End Sub

    Így az ablak ugyan ott van :( , viszont elfogadja az egyszeri leütést.
    Köszönöm a segítséget!
    Mutasd a teljes hozzászólást!
Tetszett amit olvastál? Szeretnél a jövőben is értesülni a hasonló érdekességekről?
abcd