Avatar billede Claus Mester
25. september 2000 - 08:27 Der er 23 kommentarer og
1 løsning

Sendkeys

Hejsa

Kan nogen forklare for mig, hvordan funktionen Sendkeys fungerer?

Jeg har prøvet på forskellige måder, men jeg forstår ikke funktionen!!

Jeg arbejder både i VB og VBA!!!
Avatar billede moses Praktikant
25. september 2000 - 08:51 #1
Det er fuldstændig, som når du trykker på tastaturet.
Der er et par koder, man kan benytte sig af.

Key      Code
---------------
SHIFT    +
CTRL      ^
ALT      %


Desuden er der betegnelser for specialtasterne.
Se Online-hjælpeteksterne.

F.eks.

SendKeys \"{ESC}\"

Trykker såmænd bare på escape tasten på tastaturet.

SendKeys \"%{F4}\"
Trykker på Alt-F4 og lukker dermed programmet.
Avatar billede Claus Mester
25. september 2000 - 10:26 #2
Ok! Det lyder jo meget let. Men hvis jeg nu i mit program vil teste, om der bliver tastet Alt + HOME og der derefter skal ske en hændelse defineret af mig ..., hvordan kodes det og hvor (keypress, click)?

Og igen. Hvis jeg nu vil kode således, at der efter skrivning i en textbox, skal slettes to bogstaver eller et ord bagud fra markørens standpunkt?

Eks1.
command1.(click, keypress)
If txtbox.txt = \"Der var engangre...\"
  (slet \"re\")
end if

Eks.2
command1.(click, keypress)
If txtbox.txt = \"Der var engang...\"
  (slet engang)
end if

Kan du komme med nogle eksempler på brugen?
Avatar billede theportal Nybegynder
25. september 2000 - 14:42 #3
Brug
txtbox.SelStart (markørens position)

... Med denne kan du jo selv bestemme hvor markøren skal stå når du gør brug af \"SendKeys\"

/The Portal
Avatar billede Claus Mester
25. september 2000 - 15:24 #4
Jeg har tærsket Sendkey igennem og forstår den nu ... DELVIST. Hvordan kan jeg tjekke runtime om de r f.eks. tastes ALT + HOME ( hvorefter min form skal lukke og en anden skal åbne ) ???

Mit udlæg:

If (sendkeys ??? ) = ??? then
  Form1.hide
end if

Derudover:

HVORFOR bliver min Numlock tast slået fra efter hver Sendkey \"session\"??
Avatar billede Claus Mester
26. september 2000 - 10:27 #5
Ok! Jeg har forøget pointsatsen med 20, så den nu ligger på 50 p.

Kan nogen hjælpe mig med mine spørgsmål:

1. Hvis ALT + HOME tastes, skal list1.listindex være = med list1.listindex + 1

2. Hvorfor slår min Numlock fra efter brugen af Sendkeys?
Avatar billede Claus Mester
26. september 2000 - 10:28 #6
I øvrigt:

Moses > Du har sikret dig point. Jeg skal bare lige have svar på det sidste :-)
Avatar billede moses Praktikant
02. oktober 2000 - 09:20 #7
Så er jeg her igen.

Det kan være lidt tricky med det keypress-halløj.

Sendkeys er kun til at ... sende tastetryk til applikationen; så det klarlagt.

Hvis du f.eks. vil have en tastekombination til f.eks. at lukke din applikation uanset, hvilken control der er aktiv på formen, så skal du først sørge for, at din form checker tastetrykket før de leveres videre til den aktive control på formen:

Me.KeyPreview = True

Herefter kan du bruge KeyPress, keyUp eller evt. KeyDown event\'ene for selve formen.

Avatar billede Claus Mester
03. oktober 2000 - 10:23 #8
Måske er det bare mig, men jeg forstår ikke helt hvad det er jeg skal gøre??!!

Kunne du ikke prøve at kreere et eksempel der indbefatter at kombinationen ALT + HOME lukker min form? - Så kan det være jeg forstår det.
Avatar billede moses Praktikant
03. oktober 2000 - 10:43 #9
Hvis du vil arbejde med Shift/Ctrl og Alt tasterne også, så er du nødt til at benytte enten KeyUp eller KeyDown, da KeyPress kun ser på, hvilken \"resultat\"-taste du har trykket - ikke hvilken shift taste.
Derfor kan funktionen se ud, som vist herunder:

Private Sub Form_KeyUp(KeyCode As Integer, Shift As Integer)
    MsgBox KeyCode & \", \" & Shift
    If (KeyCode = 36) And (Shift = 4) Then DoCmd.Close
End Sub

Du skal lige huske at sætte KeyPreview til true for selve formen.

Avatar billede moses Praktikant
03. oktober 2000 - 10:47 #10
Linien med msgbox kan du bruge til at finde talkombinationer til andre tastetryk.
Bemærk lige, at du skal fjerne boxen fra skærmen ved at klikke med musen - ellers får du ikke særlig meget ud af denne funktion !!

Den linie sletter du bare, når det ´hele skal køre.
36,4 er et tryk på Home-tasten med Alt holdt nede.

Shift = 1
Ctrl = 2
Alt = 4
Det er bitmæssigt implementeret, så

(Shift og Alt) = (1 AND 4) = 5
Avatar billede Claus Mester
03. oktober 2000 - 13:21 #11
Den er bare helt fjong. Det virker.

Men én ting til:

Jeg har eksperimenteret mig lidt frem og forsøgt at skrive følgende kode;

    If (KeyCode = 66) And (Ctrl = 2) Then End
Dvs. ved tryk på \"b\" samtidig med \"Ctrl\" skulle programmet lukke. Men intet sker???


Avatar billede moses Praktikant
09. oktober 2000 - 11:08 #12
HOV HOV

if-then strukturen ser sådan ud:

if x=y then
...
else
...
endif

Jeg tror at java også kan nøjes med end istedet for endif, så du har faktisk lavet en if sætning, der ikke laver noget, hvis udtrykket er falsk - og heller ikke laver noget, hvis udtrykket er sandt.

Du skal skrive:

If (KeyCode = 66) And (Ctrl = 2) Then DoCmd.Close
Avatar billede Claus Mester
09. oktober 2000 - 11:29 #13
Funger ikke :-(

VBA fortæller at den ikke kender metoden \"Me.KeyPreview = True\" (altså keypreview)

Derforuden kender den heller ikke docmd.close!!

Hvad hulen gør jeg forkert eller hvad gør jeg ikke ????
Avatar billede moses Praktikant
09. oktober 2000 - 11:39 #14
Med hensyn til både Me.KeyPreview og DoCmd kommandoerne, så gælder de sikkert kun i VBA.

Jeg er ikke klar over, hvad du kan bruge i VB.
Avatar billede Claus Mester
09. oktober 2000 - 12:47 #15
Det er i VBA jeg arbejder med lige netop denne kode.
Avatar billede moses Praktikant
09. oktober 2000 - 13:46 #16
Og det er i koden for en form du laver det ??

Me.KeyPreview

Henviser til Me, som er formen.

DoCmd kommandoen er helt sikkert til stede !!

Du må gøre noget forkert !!
Avatar billede Claus Mester
09. oktober 2000 - 14:07 #17
Private Sub UserForm_KeyUp(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)

If (KeyCode = 66) And (Ctrl = 2) Then  DoCmd.Close

End Sub

Jeg har også prøvet med;

Private Sub Form_KeyUp(KeyCode As Integer, Shift As Integer)
    MsgBox KeyCode & \", \" & Shift
    If (KeyCode = 36) And (Shift = 4) Then DoCmd.Close
End Sub

Det virker simpelthen bare ikke.

Me.Keypreview = True VIL VBA bare ikke acceptere.
Iøvrigt skrev jeg koden (Me..) i Userform1.Activate

Det er muligt jeg gør noget forkert, men hvad???
Avatar billede moses Praktikant
09. oktober 2000 - 14:44 #18
Enten vælger du:

Private Sub Form_Open(Cancel As Integer)
    Me.KeyPreview = True
End Sub

Eller også:

- Åben formen i design view.
- Vælg event fanebladet i properties vinduet.
- Rul ned til feltet \"Key Preview\"
- Sæt det til \"Yes\"

Avatar billede Claus Mester
09. oktober 2000 - 15:13 #19
Keypreview findes hverken i min properties eller open for Userform\'en!!!

Hvis du har en mail adresse (og du gider) kan vi fortsætte din lille udfordring pr. mail. og min lille hovedpine Så kan jeg sende dig et skærmdump af hvad jeg har ???

( Løser du mit problem giver jeg dig 100 p. for ulejligheden, ok? )
Avatar billede moses Praktikant
10. oktober 2000 - 10:20 #20
moses_hill@bigfoot.com
Avatar billede juks Novice
07. februar 2002 - 15:33 #21
hvordan kan man sende keys i vbsript ved du også det. jeg skal lave en lille popup der "vent" også lukker igen if et eller andet ....
Avatar billede Claus Mester
08. februar 2002 - 12:34 #22
Jeg forstår ikke helt dit spørgsmål?

nicolaus
Avatar billede juks Novice
08. februar 2002 - 14:29 #23
jeg ville gerne vise en popup der siger please wait , indtil scriptet er udført ... også lukke popup boksen automatisk
Avatar billede Claus Mester
08. februar 2002 - 17:50 #24
Den har jeg også været ude efter, men har indtil nu ikke haft held til at kode det eller få et bud på hvordan det skal gøres.

Jeg har dog for lang tid siden fået forklaret, at det ikke kan lade sig gøre i VBA, kun i VB, idet VBA ikke har kontrollen Time.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester

Seneste spørgsmål Seneste aktivitet
I går 21:00 Libre Office Impress Af Frank i Andre styresystemer
I går 11:47 VB script Af Jenshentze i Word
I går 11:21 Popup ved opstart Af mort1 i Windows
04/0918:50 Slet lokal konto Af ErikHg i Windows
04/0916:05 Ændre tal i en celle Af xvid i Excel