AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Abfangen von Funktionstasten

Ein Thema von Hansa · begonnen am 25. Dez 2003 · letzter Beitrag vom 12. Jan 2004
Antwort Antwort
Seite 1 von 2  1 2      
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#1

Abfangen von Funktionstasten

  Alt 25. Dez 2003, 19:24
Aus dem anderen Thread http://www.delphipraxis.net/internal...ct.php?t=15582 ist noch etwas offen geblieben:

Delphi-Quellcode:
procedure TForm1.StringGrid1KeyPress(Sender: TObject; var Key: Char);
var ZulZeichen : set of char;
begin
  ZulZeichen := [];
  with StringGrid1 do begin
    if Col = 1 then
      ZulZeichen := [#48..#57,#8,#13,#27,chr (VK_F9),chr (VK_F10)]
    else if Col = 4 then
      ZulZeichen := [#48..#57,#8,#13,#27,chr (VK_F3)];
    if not (key in ZulZeichen) then
      key := #0;
  end;
end;
Es sollen nur Zahlen und die Funktionstasten F3 bzw. F9 und F10 akzeptiert werden. Das mit dem VK_F9 usw. scheint aber so nicht zu gehen. Drücke ich F9 oder F10, so komme ich in der Prozedur erst gar nicht an. Wieso das ? Werden die immer am OnKeyPress vorbeigeschleust ? Das ganze wirkt sich zwar im Moment bei mir nicht aus, aber nur, weil ich auf der Suche nach der anderen Frage im OnKeyDown die Spalten auch abgefangen habe.

Es wäre besser, die Tasten selber abfragen zu können. Bei obigem Code werden übrigens auch x und y angenommen. Vielleicht ist das ein Ansatzpunkt.

[edit=sakura] SID aus URL entfernt. Mfg, sakura[/edit]
Gruß
Hansa
  Mit Zitat antworten Zitat
Benutzerbild von Leuselator
Leuselator

Registriert seit: 18. Mär 2003
Ort: Berlin
589 Beiträge
 
Delphi 8 Architect
 
#2

Re: Abfangen von Funktionstasten

  Alt 26. Dez 2003, 11:26
das Probvlem ist das der Scancodes der Tastatur.
F9 und F10 z.B. haben die Scancodes 120 bzw. 121.
wenn Du diese mit chr() umwandelst, erhältst Du "x" bzw. "y" - daher Das oben geschilderte Verhalten.
Im Anhang findest Du (und der Rest der Gemeinde) ein PDF, welches ich mir angefertigt habe um den Spass vor Augen zu haben (ausdrucken und neben Bildschirm kleben ). In dieser Tabelle findest Du (fast) alles über die böse Tastatur
Gruß
Edit: Ach so - obere Tabelle zeigt die Scancodes (die Werte, die im OnKeyDown/OnKeyUp ankommen),
die mittlere zeigt die mit chr() umgewandelten CHAR's und die untere die VirtualKeyCodes
Angehängte Dateien
Dateityp: pdf keyboardlayout.pdf (18,8 KB, 352x aufgerufen)
Tim Leuschner
Programmierer = moderner Sysiphos: stets wenn er meint, den Stein seiner Dummheit auf den Berg des Wissens gewuchtet zu haben, erblickt er einen völlig neuen Aspekt und der Dummfels poltert mit Getöse zurück ins Tal der Unwissenheit...
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#3

Re: Abfangen von Funktionstasten

  Alt 26. Dez 2003, 12:10
Thx, schöne Tabelle. Aber trotzdem : wie unterdrücke ich die Eingabe eines x und lasse gleichzeitig F10 zu Wie du richtig sagst, geht das mit chr so nicht.
Gruß
Hansa
  Mit Zitat antworten Zitat
Benutzerbild von H4ndy
H4ndy

Registriert seit: 28. Jun 2003
Ort: Chemnitz
515 Beiträge
 
Delphi XE3 Professional
 
#4

Re: Abfangen von Funktionstasten

  Alt 26. Dez 2003, 12:13
Wie würde es neu-deutsch heißen:
Das finde ich echt sozial von dir

Sowas hab ich schon immer gesucht, Danke!
Manuel
  Mit Zitat antworten Zitat
Benutzerbild von Leuselator
Leuselator

Registriert seit: 18. Mär 2003
Ort: Berlin
589 Beiträge
 
Delphi 8 Architect
 
#5

Re: Abfangen von Funktionstasten

  Alt 26. Dez 2003, 12:23
muß erstmal Gans essen gehen - Antwort danach (wenn ich nicht 'nen Magenriss erleide )
Tim Leuschner
Programmierer = moderner Sysiphos: stets wenn er meint, den Stein seiner Dummheit auf den Berg des Wissens gewuchtet zu haben, erblickt er einen völlig neuen Aspekt und der Dummfels poltert mit Getöse zurück ins Tal der Unwissenheit...
  Mit Zitat antworten Zitat
Benutzerbild von Leuselator
Leuselator

Registriert seit: 18. Mär 2003
Ort: Berlin
589 Beiträge
 
Delphi 8 Architect
 
#6

Re: Abfangen von Funktionstasten

  Alt 26. Dez 2003, 22:10
Aua aua - das tat weh (Gans, viel)...

Also - ich mach es (mir) meist im OnKeyDown, denn dort sehe ich die Scancodes der Tasten und nicht ihre Umsetzung in Char und kann deshalb präzise differenzieren:
Delphi-Quellcode:
const
  cValidFKey : set of Byte = [112..121];
  cValidCmdKey : set of Byte = [8,13,33..40];
  cValidChrKey : set of Byte = [8,13,33..40,45..46,48..57,65..90,96..105,186,192,219,222];
  cValidNumKey : set of Byte = [8,13,33..40,45..46,48..57 ,96..105];
  cValidDateKey : set of Byte = [8,13,33..40,45..46,48..57 ,96..105,190];
implementation
procedure EditKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
  if not ((Key in cValidFKey) or (Key in cValidCmdKey) or (Key in cValidNumKey)) then begin
    sysutils.Beep;
    Key = $0;
  end;
end;
Gruß
Tim Leuschner
Programmierer = moderner Sysiphos: stets wenn er meint, den Stein seiner Dummheit auf den Berg des Wissens gewuchtet zu haben, erblickt er einen völlig neuen Aspekt und der Dummfels poltert mit Getöse zurück ins Tal der Unwissenheit...
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#7

Re: Abfangen von Funktionstasten

  Alt 31. Dez 2003, 11:02
Das sieht plausibel aus. Leider funktioniert es nicht. Das OnKeyDown läßt alle Eingaben trotzdem durch.
Gruß
Hansa
  Mit Zitat antworten Zitat
Benutzerbild von Leuselator
Leuselator

Registriert seit: 18. Mär 2003
Ort: Berlin
589 Beiträge
 
Delphi 8 Architect
 
#8

Re: Abfangen von Funktionstasten

  Alt 11. Jan 2004, 06:32
Hmm - lasse mich auch gerade ein bischen davon foppen. Also das setzen von Key:=0 im OnKeyDown verhindert nicht die Auslösung von OnKeyPress. Also muß man dort auch noch ansetzen. Habe Versuchsweise eine Komponente von TEdit abgeleitet und die Message WM_CHAR überschrieben. Dort kommt in Message.CharCode der übersetzte Wert von Key an, allerdings lösen nicht alle Tasten OnKeyPress aus.
[Edit]
Laut PSDK findet sich in den bits 16-23 von Message.KeyData der ScanCode. Dieser unterscheidet sich jedoch von den Werten von Key im OnKeyDown. Diese Werte finden sich in der untersten Tastaturschablone im Anhang.
[/Edit]

Lösung folgt sobald fertig. Bis dahin im Anhang aktualisierte und erweiterte Version der Tastaturtabelle
Angehängte Dateien
Dateityp: pdf keyboardlayout_152.pdf (24,3 KB, 111x aufgerufen)
Tim Leuschner
Programmierer = moderner Sysiphos: stets wenn er meint, den Stein seiner Dummheit auf den Berg des Wissens gewuchtet zu haben, erblickt er einen völlig neuen Aspekt und der Dummfels poltert mit Getöse zurück ins Tal der Unwissenheit...
  Mit Zitat antworten Zitat
Benutzerbild von Leuselator
Leuselator

Registriert seit: 18. Mär 2003
Ort: Berlin
589 Beiträge
 
Delphi 8 Architect
 
#9

Re: Abfangen von Funktionstasten

  Alt 11. Jan 2004, 07:10
Alsoooo:

Für Alle Tasten, die in der unteren Tabelle (siehe Anhang im vorangegangenen Post von mir) keine Zahlenwerte enthalten, wird kein OnKeyPress abgefeuert. Das bedeutet, das man sie im OnKeyDown mit Key := 0; wirksam abfangen kann. Abgesehen von Enter,Backspace und Escape lassen sich also alle Funktionstasten auf diese Weise unterbinden. Alles andere muß man im OnKeyPress klären. Dort kommen also wie schon bemerkt die übersetzten Scancodes als Zeichen an. Es macht also keinen Sinn dort Scancodes mit char(Scancode) als Prüfkriterium zu benutzen:
1. weil char(Scancode) <> Char(Ord(Zeichen)) (kann klappen-muß aber nicht-siehe Tabelle)
2. das erhoffte Abfangen von Funktions- & Steuertasten nicht klappt, da diese dort garnicht vorbeischauen
3. der Versuch mit char(Scancode) für VK_F3 z.B. dazu führt, dass "r" gefunden wird und man so bei nur erwünschten Ziffern z.B. einen eigentlich unerwünschten Buchstaben in die Suppe bekommt

Mit diesen und Infos sollte jeder Interessent in der Lage sein, sich den 3 Posts weiter oben vorgeschlagenen Unsinn selbst zu richten

Gruß
Tim Leuschner
Programmierer = moderner Sysiphos: stets wenn er meint, den Stein seiner Dummheit auf den Berg des Wissens gewuchtet zu haben, erblickt er einen völlig neuen Aspekt und der Dummfels poltert mit Getöse zurück ins Tal der Unwissenheit...
  Mit Zitat antworten Zitat
Benutzerbild von eddy
eddy

Registriert seit: 3. Jan 2003
Ort: Sachsen
573 Beiträge
 
Delphi 5 Professional
 
#10

Re: Abfangen von Funktionstasten

  Alt 11. Jan 2004, 18:16
Hallo Hansa,

falls es noch nicht gelöst ist:

Code:
procedure TForm.DBGridKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
  if (key = VK_F2) then ....;
  if (key = VK_F5) then ....;
end;
mfg
eddy
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:18 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz