BackSpace Taste und Andere mit Delphi abfangen

Diskutiere BackSpace Taste und Andere mit Delphi abfangen im Developer Network Forum im Bereich Hardware & Software Forum; Hallo, ich versuche gerade in einem Stringgrid nur Zahlen zur eingabe zuzulassen. Das funktioniert perfect. Als zweites dürfen die Zahlen, die...
  • BackSpace Taste und Andere mit Delphi abfangen Beitrag #1
N

Nastarowje

Bekanntes Mitglied
Dabei seit
19.04.1999
Beiträge
378
Reaktionspunkte
0
Ort
Erfurt / Thüringen
Hallo,

ich versuche gerade in einem Stringgrid nur Zahlen zur eingabe zuzulassen. Das funktioniert perfect.

Als zweites dürfen die Zahlen, die eingetragen werden nicht größer als 99 sein.

Nun meine Frage :

Kann es sein, das meine Tastatur anders vom Ascii Zeichensatz belegt ist? Wenn ich unten stehenden Code ausführe, dann wird die Rücktaste nicht berücksichtigt. Ich kann also eine Eingabe 54 oder 99 oder oder oder nicht mit der Rücktaste löschen. Und auch andere Zellen sind nicht mehr löschbar. Wenn ich aber die Pfeiltasten benutze und dann Entfernen drücke, kann ich wieder löschen.


// Wenn Rücktaste gedrückt, dann soll er die ganz normal ausführen.

Code:
  if Key=#08 then Else if (StrToInt(Steuern_Grid.Cells[a,1])>10) then Key:=#0;


Für Tips und eventuelle aufdeckung von Denkfehlern bin ich dankbar.



Schöne Grüße

Nastarowje

Achja : ich benutze die KeyPressed Prozedur
 
  • BackSpace Taste und Andere mit Delphi abfangen Beitrag #2
Data

Data

Bekanntes Mitglied
Dabei seit
01.04.2006
Beiträge
399
Reaktionspunkte
0
Das KeyPressed-Ereignis tritt auf, wenn eine Taste gedrückt wurde. Möglicherweise hast du in einem davor statt findenden Ereignis (z. B. KeyUp, KeyDown) Key auf NULL gesetzt. In deiner merkwürdig (es sei denn du hast hier für das Problem Unwesentliches absichtlich ausgelassen) geposteten Quellcode-Zeile würde die if-Bedingung dann nicht erfüllt, folglich die Rücktaste auch keine Wirkung erzielen, da diese auf NULL gesetzt wurde (natürlich nicht die Taste, sondern ihr übergebener Wert).

Tipp: wähle nur ein Key-Ereignis zur Behandlung aus, sonst können schnell Konflikte auftreten.
 
Zuletzt bearbeitet:
  • BackSpace Taste und Andere mit Delphi abfangen Beitrag #3
N

Nastarowje

Bekanntes Mitglied
Dabei seit
19.04.1999
Beiträge
378
Reaktionspunkte
0
Ort
Erfurt / Thüringen
Hallo,


nein ich habe nix zu verbergen :cool: , Da nicht wesentlich mehr in der Prozedur steht habe ich drauf verzichtet.

Hier mal komplett :

Code:
procedure TListen.Steuern_GridKeyPress(Sender: TObject; var Key: Char);
var a : integer;    // Diese Variable wird benutzt, um die aktuell bearbeitete Zelle raus zu bekommen
begin
   a:= Steuern_Grid.Row;
  // hier muss eine Prüfung rein, die den aktuellen Steuersatz nur als Zahl
      eingeben lässt
  // Wichtig - diese Abfrage darf nur für die Steuersatzspalte gelten
  if (Key < #48) or (Key > #57) and (Steuern_Grid.Col = 1) then Key:=#0;
  if (Steuern_Grid.Cells[a,1] = '') Then Exit Else
  if Key=#08 then Else if (StrToInt(Steuern_Grid.Cells[a,1])>10) then Key:=#0;
end;


Hinweise : Die Tabelle soll Steuersätze erfassen. Sie erhält eine Spalte Beschreibung und eine Tabele mit dem Steuersatz. Nun kann in der Spalte Beschreibung beliebig eingegeben werden. In der Spalte Steuersatz soll aber nur eine 2 stellige Zahl eingegeben werden - was ja auch funktioniert. Wenn aber eine zweistellige Zahl drinnen steht, kann ich die nicht mehr mit Backspace löschen. Diese Taste scheint er vollständig zu ignorieren.

Vielleicht hast du ja noch hinweise.


Schöne Grüße

Nastarowje
 
  • BackSpace Taste und Andere mit Delphi abfangen Beitrag #4
N

Nastarowje

Bekanntes Mitglied
Dabei seit
19.04.1999
Beiträge
378
Reaktionspunkte
0
Ort
Erfurt / Thüringen
Hallo,


nein ich habe nix zu verbergen :cool: , Da nicht wesentlich mehr in der Prozedur steht habe ich drauf verzichtet.

Hier mal komplett :

Code:
procedure TListen.Steuern_GridKeyPress(Sender: TObject; var Key: Char);
var a : integer;    // Diese Variable wird benutzt, um die aktuell bearbeitete Zelle raus zu bekommen
begin
   a:= Steuern_Grid.Row;
  // hier muss eine Prüfung rein, die den aktuellen Steuersatz nur als Zahl
      eingeben lässt
  // Wichtig - diese Abfrage darf nur für die Steuersatzspalte gelten
  if (Key < #48) or (Key > #57) and (Steuern_Grid.Col = 1) then Key:=#0;
  if (Steuern_Grid.Cells[a,1] = '') Then Exit Else
  if Key=#08 then Else if (StrToInt(Steuern_Grid.Cells[a,1])>10) then Key:=#0;
end;


Hinweise : Die Tabelle soll Steuersätze erfassen. Sie erhält eine Spalte Beschreibung und eine Tabele mit dem Steuersatz. Nun kann in der Spalte Beschreibung beliebig eingegeben werden. In der Spalte Steuersatz soll aber nur eine 2 stellige Zahl eingegeben werden - was ja auch funktioniert. Wenn aber eine zweistellige Zahl drinnen steht, kann ich die nicht mehr mit Backspace löschen. Diese Taste scheint er vollständig zu ignorieren.

Vielleicht hast du ja noch hinweise.


Schöne Grüße

Nastarowje


--- Schei.... ich habs gefunden. Ich beschränke das Abfangen nur auf die Zahlen. #08 wird gar nicht weiter gegeben. Also - schön das wir darüber gesprochen haben. Man bin ich blind.


Nichts für ungut

Danke

Nastarowje
 
Thema:

BackSpace Taste und Andere mit Delphi abfangen

ANGEBOTE & SPONSOREN

https://www.mofapower.de/

Statistik des Forums

Themen
213.180
Beiträge
1.579.174
Mitglieder
55.879
Neuestes Mitglied
stonetreck
Oben