[gelöst] set of char beinhaltet mehr Zeichen als ich eingebe?

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut
Antworten
Benutzeravatar
Niesi
Lazarusforum e. V.
Beiträge: 331
Registriert: So 26. Jun 2016, 19:44
OS, Lazarus, FPC: Linux Mint Cinnamon (Windows wenn notwendig), Lazarus 3.0 FPC 3.3.1

[gelöst] set of char beinhaltet mehr Zeichen als ich eingebe?

Beitrag von Niesi »

Hallo,

ich verstehe da was nicht: ich habe zwei set of char, in einem möchte ich den Punkt haben, in dem anderem nicht. Er ist aber in beiden sets, und noch besser, wenn ich ihn mit '.' eingebe, dann bekomme ich eine Fehlermeldung. Obwohl der Punkt im set InputIntChars nicht enthalten ist kann er im tEdit eingegeben werden - warum?

Code: Alles auswählen

const
  InputFloatChars: set of char = [',', '+', '-', 'e', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', char(vk_Back), char(vk_Delete) ];
  //InputFloatChars: set of char = ['.', ',', '-', 'e', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', char(vk_Back), char(vk_Delete) ];
  InputIntChars: set of char = ['+', '-', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', char(vk_Back), char(vk_Delete)];
  //InputIntChars: set of char = ['.', '+', '-', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', char(vk_Back), char(vk_Delete)];

{$R *.lfm}

{ TMainForm }

procedure TMainForm.IntInput(Sender: TObject; var Key: char);
begin
  if not ( Key in InputIntChars ) then Key := #0;
  //if Key = '.' then Key := #0;
  if Sender is tLabeledEdit then
  begin    
Ein Beispielprojekt ist im Anhang vorhanden.

Ich bekomme zwar hin, was ich haben will, aber ich habe die Angst, dass da was nicht stimmt ...

Weiß jemand mehr?

Herzlichen Gruß
Harald

P.S.: Lazarus 2.2 unter Windows 10 auf diversen Rechnern
Dateianhänge
Example.7z
(161.71 KiB) 61-mal heruntergeladen
Zuletzt geändert von Niesi am Di 5. Apr 2022, 02:04, insgesamt 4-mal geändert.
Wissen ist das einzige Gut, das sich vermehrt, wenn es geteilt wird ...

Benutzeravatar
Ally
Beiträge: 263
Registriert: Do 11. Jun 2009, 09:25
OS, Lazarus, FPC: Win und Lazarus Stable release
CPU-Target: x64

Re: set of char beinhaltet mehr Zeichen als ich eingebe

Beitrag von Ally »

Hallo Niesi,

ganz grob sollte es so gehen.

Code: Alles auswählen

var
  Allowed: String;
  .
  .
  Allowed := #3 + #8 + #13 + #22 + #24 + DefaultFormatSettings.DecimalSeparator + '-0123456789';
  .
  .
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: char);
begin
  if not Allowed.Contains(Key) then
    Key := #0;
end;
Wenn du etwas "fertiges" für die Eingabe von Zahlen suchst kann ich dir meine Komponente RhsPack aus dem Online Package Manager empfehlen.

Gruß Roland

Benutzeravatar
Niesi
Lazarusforum e. V.
Beiträge: 331
Registriert: So 26. Jun 2016, 19:44
OS, Lazarus, FPC: Linux Mint Cinnamon (Windows wenn notwendig), Lazarus 3.0 FPC 3.3.1

Re: set of char beinhaltet mehr Zeichen als ich eingebe

Beitrag von Niesi »

Hallo Roland,

Danke, aber ich möchte gern wissen, warum in den char sets der Punkt trotz Nichteinfügen enthalten ist ... das ist mein Hauptanliegen. Ich finde das unlogisch ...

Beste Grüße
Harald
Wissen ist das einzige Gut, das sich vermehrt, wenn es geteilt wird ...

Benutzeravatar
theo
Beiträge: 10467
Registriert: Mo 11. Sep 2006, 19:01

Re: set of char beinhaltet mehr Zeichen als ich eingebe

Beitrag von theo »

Weil VK_DELETE kein Buchstabe, sondern ein Tastencode ist.
Dez. 46 ist der "Punkt" auf der ASCII Tabelle sowie der Wert von VK_DELETE.
Diese Dinge darf man nicht verwechseln/vermischen.
Dasselbe gilt nat. für Char(VK_BACK), das ist Unsinn.

Benutzeravatar
Niesi
Lazarusforum e. V.
Beiträge: 331
Registriert: So 26. Jun 2016, 19:44
OS, Lazarus, FPC: Linux Mint Cinnamon (Windows wenn notwendig), Lazarus 3.0 FPC 3.3.1

Re: set of char beinhaltet mehr Zeichen als ich eingebe

Beitrag von Niesi »

Hallo Theo,

Danke, ich verstehe ...

Beste Grüße
Harald
Wissen ist das einzige Gut, das sich vermehrt, wenn es geteilt wird ...

Antworten