/ Forside / Teknologi / Udvikling / VB/Basic / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
VB/Basic
#NavnPoint
berpox 2425
pete 1435
CADmageren 1251
gibson 1230
Phylock 887
gandalf 836
AntonV 790
strarup 750
Benjamin... 700
10  tom.kise 610
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


Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408925
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste