|
| Redefinering af taster Fra : Niels Borg |
Dato : 16-10-02 08:04 |
|
Hej,
Jeg forsøger forgæves at redefinere key 107 (numerisk minus), 108 (numerisk
plus), 109 (numerisk enter) og 110 (numerisk komma) til at udføre kommandoer
i stedet for at skrive tegn.
De udfører korrect nok den commando jeg vil have dem til, men de skriver
også den relaterede karakter - hvilket jeg naturligvis gerne vil være fri
for.
Jeg har set det op som en KeyPreview
Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
If KeyCode = 107 Then
KeyAscii = 0
"command to perform"
End If
Men det virker altså ikke. Jeg ville blive meget glad om nogen kunne hjælpe
mig.
MVH
Niels Borg
| |
Mikkel Bundgaard (16-10-2002)
| Kommentar Fra : Mikkel Bundgaard |
Dato : 16-10-02 08:49 |
|
On Wed, 16 Oct 2002 09:04:04 +0200, Niels Borg wrote:
<SNIP>
> De udfører korrect nok den commando jeg vil have dem til, men de skriver
> også den relaterede karakter - hvilket jeg naturligvis gerne vil være
> fri for.
>
> Jeg har set det op som en KeyPreview
> Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
> If KeyCode = 107 Then
>' KeyAscii = 0
KeyCode = 0
> "command to perform"
> End If
>
> Men det virker altså ikke. Jeg ville blive meget glad om nogen kunne
> hjælpe mig.
>
> MVH
> Niels Borg
Hej Niels
Har du prøvet med KeyCode = 0 i stedet for KeyAscii = 0 ??
--
Mikkel Bundgaard
Student at IT University of Copenhagen
http://officehelp.gone.dk
Codito, Ergo Sum
| |
Niels Borg (16-10-2002)
| Kommentar Fra : Niels Borg |
Dato : 16-10-02 09:09 |
|
Hej Mikkel,
Tak for dit forslag, men resultatet er fortsat det samme: kommandoen
udføres, men karateren skrives også.
MVH
Niels Borg
"Mikkel Bundgaard" <mikkelbu@teliamail.dk> wrote in message
news:pan.2002.10.16.09.48.45.162921.2132@teliamail.dk...
> On Wed, 16 Oct 2002 09:04:04 +0200, Niels Borg wrote:
>
> <SNIP>
> > De udfører korrect nok den commando jeg vil have dem til, men de skriver
> > også den relaterede karakter - hvilket jeg naturligvis gerne vil være
> > fri for.
> >
> > Jeg har set det op som en KeyPreview
> > Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
> > If KeyCode = 107 Then
> >' KeyAscii = 0
> KeyCode = 0
> > "command to perform"
> > End If
> >
> > Men det virker altså ikke. Jeg ville blive meget glad om nogen kunne
> > hjælpe mig.
> >
> > MVH
> > Niels Borg
> Hej Niels
>
> Har du prøvet med KeyCode = 0 i stedet for KeyAscii = 0 ??
> --
> Mikkel Bundgaard
> Student at IT University of Copenhagen
> http://officehelp.gone.dk
> Codito, Ergo Sum
| |
Tomas Christiansen (16-10-2002)
| Kommentar Fra : Tomas Christiansen |
Dato : 16-10-02 10:00 |
|
Niels Borg skrev:
> Tak for dit forslag, men resultatet er fortsat det samme: kommandoen
> udføres, men karateren skrives også.
Det første du skal gøre er, at gå i Tools, Options og sætte et hak i "Require Variable Declaration", så du sikrer dig at der kommer
en "Option Explicit" i toppen af alle dine kildekode-filer.
Dernæst kan du godt glemme alt om at redefinere taster via KeyDown/KeyUp events.
Det lader sig kun gøre i et KeyPress event (hvilket fremgår, hvis man nærlæser dokumentationen).
Men så må du jo bare "snyde" VB til at opnå det ønskede resultat. For hver tastetryk, kan du i en variabel markere om tastetrykket
skal ignoreres eller ej!
Bemærk at det er bedre at bruge konstanten vbKeyAdd end koden 107.
Option Explicit
Private m_bIgnoreKey As Boolean
Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
If KeyCode = vbKeyAdd Then
m_bIgnoreKey = True
'Udfør kommando: Numerisk +
Else
m_bIgnoreKey = False
End If
End Sub
Private Sub Form_KeyPress(KeyAscii As Integer)
If m_bIgnoreKey Then
KeyAscii = 0
End If
End Sub
-------
Tomas
| |
Snedker (16-10-2002)
| Kommentar Fra : Snedker |
Dato : 16-10-02 09:39 |
|
On Wed, 16 Oct 2002 09:04:04 +0200, "Niels Borg"
<niels.borg@tdcadsl.dk> wrote:
Denne her benytter jeg selv - og den fungerer:
Private Sub Dato_KeyDown(KeyCode As Integer, Shift As Integer)
If IsDate(Me.Dato) Then
If KeyCode = 107 Then
Me.Dato = DateAdd("d", 1, Me.Dato)
KeyCode = 0
End If
If KeyCode = 109 Then
Me.Dato = DateAdd("d", -1, Me.Dato)
KeyCode = 0
End If
End If
End Sub
mvh /Snedker
---
Klip det citerede væk, du ikke besvarer
Besvar venligst under det citerede
| |
Tomas Christiansen (16-10-2002)
| Kommentar Fra : Tomas Christiansen |
Dato : 16-10-02 20:04 |
|
Snedker skrev:
> Denne her benytter jeg selv - og den fungerer:
>
> Private Sub Dato_KeyDown(KeyCode As Integer, Shift As Integer)
....
> Me.Dato = DateAdd("d", 1, Me.Dato)
Og HVAD er Me.Dato helt præcis? Det kan vist ikke være en textbox?
> KeyCode = 0
Denne linie har (jævnfør manualen og vises let ved et eksperiment)
INGEN effekt!
-------
Tomas
| |
Mikkel Bundgaard (16-10-2002)
| Kommentar Fra : Mikkel Bundgaard |
Dato : 16-10-02 21:03 |
|
On Wed, 16 Oct 2002 21:03:46 +0200, Tomas Christiansen wrote:
> Snedker skrev:
>> Denne her benytter jeg selv - og den fungerer:
>>
>> Private Sub Dato_KeyDown(KeyCode As Integer, Shift As Integer)
> ...
>> Me.Dato = DateAdd("d", 1, Me.Dato)
>
> Og HVAD er Me.Dato helt præcis? Det kan vist ikke være en textbox?
Jeg vil gætte på at Me er en formular i f.eks. Access og Dato er et
tekstfelt på denne formular.
>> KeyCode = 0
> Denne linie har (jævnfør manualen og vises let ved et eksperiment)
> INGEN effekt!
Det virker dog i de fleste udgaver af VBA . Jeg syntes ellers at VBA
og VB _plejer_ at opføre sig ganske ens ?
--
Mikkel Bundgaard
Student at IT University of Copenhagen
http://officehelp.gone.dk
Codito, Ergo Sum
| |
Tomas Christiansen (16-10-2002)
| Kommentar Fra : Tomas Christiansen |
Dato : 16-10-02 22:17 |
|
Mikkel Bundgaard skrev:
> Det virker dog i de fleste udgaver af VBA . Jeg syntes ellers at
VBA
> og VB _plejer_ at opføre sig ganske ens ?
Du er sikker på at du ikke forveksler med KeyPress eventet, hvor det
er dokumenteret at man kan sætte KeyAscii til 0?
-------
Tomas
| |
Mikkel Bundgaard (16-10-2002)
| Kommentar Fra : Mikkel Bundgaard |
Dato : 16-10-02 23:10 |
|
On Wed, 16 Oct 2002 23:17:27 +0200, Tomas Christiansen wrote:
> Mikkel Bundgaard skrev:
>> Det virker dog i de fleste udgaver af VBA . Jeg syntes ellers at
>> VBA og VB _plejer_ at opføre sig ganske ens ?
>
> Du er sikker på at du ikke forveksler med KeyPress eventet, hvor det er
> dokumenteret at man kan sætte KeyAscii til 0?
Jeps; jeg var dog ikke sikker, så jeg blev "nødt" til at boote min win98
og lave et lille eksempel. Ifølge Access 2000 Developers Handbook :
Volume 1 side 30 (Canceling Keystrokes)
"If you set the KeyCode parameter passed to your KeyDown event procedure
to 0, Access cancels the remaining events, and the keystroke will never
appear on the screen.
If you set the KeyAscii parameter passed to your KeyPress event procedure
to 0, Access cancels the Change event, and the keystroke will never
appear on the screen"
Desuden gav en søgning på 'KeyDown "KeyCode = 0"' flere hits det viste
samme metode, så der er nok bare tale om en forskel på VB og VBA.
--
Mikkel Bundgaard
Student at IT University of Copenhagen
http://officehelp.gone.dk
Codito, Ergo Sum
| |
Tomas Christiansen (17-10-2002)
| Kommentar Fra : Tomas Christiansen |
Dato : 17-10-02 08:55 |
|
Mikkel Bundgaard skrev:
> Jeps; jeg var dog ikke sikker, så jeg blev "nødt" til at boote min win98
> og lave et lille eksempel. Ifølge Access 2000 Developers Handbook :
> Volume 1 side 30 (Canceling Keystrokes)
....
> Desuden gav en søgning på 'KeyDown "KeyCode = 0"' flere hits det viste
> samme metode, så der er nok bare tale om en forskel på VB og VBA.
Interessant. Så lærte jeg også da noget i dag!
-------
Tomas
| |
|
|