Tuli vaan mieleen et miteen vs:ssä saa sillee et jos painaa
vaik näppäintä A, niin ohjelma käsittää sen niin että käyttäjä painoi näppäintä P?(esim:)
Keypress-tapahtumaan
If KeyAscii = Asc("A") Then keyAscii = Asc("P")
Kiitti, toimiiks toi sillee et jos sil "A" näppäimel on joku toiminto määrätty ni ohittaako se senki? esim. jos painaa A, ni sit MsgBox=Moi?
Riippuu mihin tapahtumaan se koodataan. KeyDown suoritetaan tietenkin ennen keyPressiä ja viimeisenä KeyUp. Tai jos koodaat sen samaan tapahtumaan. Siis
If KeyAscii = Asc("A") Then MsgBox "Moi !" KeyAscii = Asc("P") End If
Siis ei ohita, paitsi jos käytät KeyCodea, muutat sen KeyDown-tapahtumassa ja tuon MsgBoxin koodaat sitten KeyUp-tapahtumaan. Parasta vielä tarkistaa, saako KeyCoden muutettua. Ei muutu koodilla ainakaan VB5:ssä. Siis ei voi ohittaa. Miksi se pitäisi ohittaa tai mihin itseasiassa pyrit???
Tulipa tuohon nyt söhellettyä mutta vähän lisää. Jos näppäinpainallus kohdistuu textBoxiin esim. Text1, voit Form_Keypress-taphtumassa muuttaa koodia ja jos tuo MsgBox-juttu on sitten Text1_Keypress-tapahtumassa, silloin tuo MsgBox voidaan ohittaa. Toivottavasti asia selkis, ainakin itselleni se nyt selkis. Formin KeyPreview pitää olla tällöin tilassa true.
Tuo asia jäi sen verran vaivaamaan että tein seuraavan testin:
Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer) Debug.Print "FormDown"; KeyCode KeyCode = KeyCode + 1 End Sub Private Sub Form_KeyPress(KeyAscii As Integer) Debug.Print "FormPress"; KeyAscii KeyAscii = KeyAscii + 1 End Sub Private Sub Form_KeyUp(KeyCode As Integer, Shift As Integer) Debug.Print "FormUp"; KeyCode KeyCode = KeyCode + 1 End Sub Private Sub Text1_Change() Debug.Print "TextChange"; Asc(Right(Text1, 1)) End Sub Private Sub Text1_KeyDown(KeyCode As Integer, Shift As Integer) Debug.Print "TextDown"; KeyCode KeyCode = KeyCode + 1 End Sub Private Sub Text1_KeyPress(KeyAscii As Integer) Debug.Print "TextPress"; KeyAscii KeyAscii = KeyAscii + 1 End Sub Private Sub Text1_KeyUp(KeyCode As Integer, Shift As Integer) Debug.Print "TextUp"; KeyCode KeyCode = KeyCode + 1 End Sub
Capslock on päällä ja painan A. Immediateikkunaan tulostuu:
FormDown 65
TextDown 66
FormPress 65
TextPress 66
TextChange 67
FormUp 65
TextUp 66
Eihän siinä muuta yllättävää ole kuin tapahtumien järjestys.
Eikös se ole ihan loogista.
No jokseenkin, mutta tuo Changen paikka selviää vain kokeilemalla. Samoin Press ja Up, kumpikin tapahtuu näppäimen vapautuessa ja Changekin vielä.
hmm.... en nyt tiedä oikein miten sen saisin kun tuli niin paljon asiaa =). Tarkoituksenani oli tehdä pilailuohjelma
joka avautuu ruudulle ja lähtee vasta kun timerin aika loppuu. Mutta ongelmana on että sen saa lopetettua jo ennen
timerin loppua (alt+ctrl+del).... ja se pitäisi saada niin ettei se toimisi ennen timerin loppua :D... osaisitko semmoses neuvoo? sen timerin oon saanu jo tehtyy.
https://www.ohjelmointiputka.net/koodivinkit/
Tuo kaiketi auttaa ctrl+alt+del yhdistelmän lukittamisessa ja Keyasciin voi ohittaa:
If Keyode = vbkey? Then ---- End If
Itse teen aina noin :).
joo, kiitti :D
mut en kyl saaa toimii tota... :(
sendkeyssitä kokoajan esciä ;)
... lol
hei, se toimii, Puhveli sai koneensa jumiin silleen koulussa ;D eikä toimi edes ctrlaltdel!
Joo, Sendkeys toimii, vaikka loopissa on DoEvents! Kaikkee te keksittekin ;)
Miten se sendkeys juttu menee ku en oo oikeestaan hirveesti
käyttäny sitä? :D
Jos kaikkien teidän tähän näppiksen sotkemiseen käytetyt miestyötunnit olisi käytetty tuottavaan työhön olisitte luultavasti äveriäitä kavereita ;D
Aihe on jo aika vanha, joten et voi enää vastata siihen.