Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - eingabemöglichkeiten bei edit-feldern beschränken


noo.bee - Di 11.05.10 18:54
Titel: eingabemöglichkeiten bei edit-feldern beschränken
hallo

ich habe hier sehr viele edit-felder und wollte die nun soweit beschränken, dass man dort z.b. nur A-M oder 1-15 eingeben kann. es sit zwar möglich, edits auf nur zahlen zu reduzieren, dass würde mir aber nicht reichen. wie kann ich das weiter einschränken ?


jaenicke - Di 11.05.10 18:59

Du kannst in OnKeyPress prüfen ob die Eingabe gültig ist und sie ansonsten verwerfen.

Dazu gibt es auch viele Beiträge bereits, das Prinzip ist überall das gleiche:
http://www.delphi-forum.de/topic_Eingabe+im+Editfeld+beschraenken_80205,0.html


noo.bee - Di 11.05.10 20:03

sieht gut aus... aber ich habe 72 editfelder. die alle einzeln einzutippen wäre megaumständlich


Delphi-Quelltext
1:
2:
3:
4:
5:
case edit1.text of //und das ganze für 72 edits
  '0'..'49': ; // nothing
  >49: tue irgendwas // oder so ähnlich. 
  end
end;


Chemiker - Di 11.05.10 20:08

Hallo noo-bee,

dann erstell Dir doch eine eigene TEdit-Komponente und bau dir die Eingabeprüfung mit ein, eine andere alternative ist die Komponente TMaskEdit.

Bis bald Chemiker


ALF - Di 11.05.10 20:11

Du kannst alle onkeypress events auf ein editfeld setzen und fragst ab, von welchen editfeld die Eingabe kommt.
Nun kannst Du auch die Case-anweisung expliziet der jeweiligen Editkomponente zuweisen!

Gruss Alf


noo.bee - Di 11.05.10 20:18

:gruebel: :gruebel: :gruebel: öhm ja - zuviel fürn neuling. muss mal brain restarten :D


jaenicke - Di 11.05.10 20:37


Delphi-Quelltext
1:
2:
if Sender is TEdit then
  TEdit(Sender).Text ...
So kannst du das mit dem Edit machen, das das Ereignis ausgelöst hat. Und diese eine Ereignismethode stellst du für alle Edits ein.


ALF - Di 11.05.10 20:45

hier mal ein kleines Beispiel :wink:
allerdings musst Du noch Edit1-76 'Tag' mit laufender Nummer versehen!

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
function keyszahlen(key: char) :char;
begin
    case key of
      '0'..'9': ;
      else
      key := #0;
    end;
    result:= key;
 end;
function keysBuchstaben(key: char) :char;
begin
    case key of
      'a'..'z': ;
      else
      key := #0;
    end;
    result:= key;
 end;
begin

 case Tedit(sender).Tag of
      1..2: key:=keyszahlen(key);
      3:    key:=keysbuchstaben(key);
 end;
end;

gibt sicherlich auch noch ne schönere Lösung! Soll ja nur als Beispiel dienen :wink:

Gruss Alf


noo.bee - Do 13.05.10 17:50

so, hab mich entschieden es nur auf einen zahlenbereich zu reduzieren (1-150). sieht jetzt so aus


Delphi-Quelltext
1:
2:
3:
if strtoint(edit1.Text) > 150 then
ShowMessage('Was ist ' + edit1.text + ' für eine Zahl? Bitte Ergebnis löschen und neu checken');
edit1.Text := '0';


kann ich das nutzen und irgendwie für alle edits vereinfachen ? weil ich das bei meiner variante ja auch wieder für jedes edit eingeben muss.
gibts sowas wie

if strtoint(edit1.text .. edit150.text) > 150 then ?


elundril - Do 13.05.10 17:53

Du könntest allen Edits den selben ereignishandler zuweisen und dann schreiben:


Delphi-Quelltext
1:
2:
3:
4:
5:
if (Sender is TEdit) then begin
  if strtoint((Sender as TEdit).Text) > 150 then
    ShowMessage('Was ist ' + (Sender as TEdit).text + ' für eine Zahl? Bitte Ergebnis löschen und neu checken');
  (Sender as TEdit).Text := '0';
end;


Ereignisshandler weißt du so zu das du nicht doppelt in das feld beim Objektinspektor reinklickst, sonder auf den pfeil rechts daneben und die passende Methode aus der DropDown-Liste auswählst.

lg elundril