Autor Beitrag
noo.bee
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 120



BeitragVerfasst: Di 11.05.10 18:54 
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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19314
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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:
www.delphi-forum.de/...raenken_80205,0.html
noo.bee Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 120



BeitragVerfasst: Di 11.05.10 20:03 
sieht gut aus... aber ich habe 72 editfelder. die alle einzeln einzutippen wäre megaumständlich

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 194
Erhaltene Danke: 14

XP, Vista 32 Bit, Vista 64 Bit, Win 7 64 Bit
D7, BDS 2006, RAD Studio 2009+C++, Delphi XE2, XE3, VS 2010 Prof.
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1085
Erhaltene Danke: 53

WinXP, Win7, Win10
Delphi 7 Enterprise, XE
BeitragVerfasst: 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

_________________
Wenn jeder alles kann oder wüsste und keiner hätt' ne Frage mehr, omg, währe dieses Forum leer!
noo.bee Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 120



BeitragVerfasst: Di 11.05.10 20:18 
:gruebel: :gruebel: :gruebel: öhm ja - zuviel fürn neuling. muss mal brain restarten :D
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19314
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Di 11.05.10 20:37 
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1085
Erhaltene Danke: 53

WinXP, Win7, Win10
Delphi 7 Enterprise, XE
BeitragVerfasst: Di 11.05.10 20:45 
hier mal ein kleines Beispiel :wink:
allerdings musst Du noch Edit1-76 'Tag' mit laufender Nummer versehen!
ausblenden 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

_________________
Wenn jeder alles kann oder wüsste und keiner hätt' ne Frage mehr, omg, währe dieses Forum leer!
noo.bee Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 120



BeitragVerfasst: Do 13.05.10 17:50 
so, hab mich entschieden es nur auf einen zahlenbereich zu reduzieren (1-150). sieht jetzt so aus

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3747
Erhaltene Danke: 123

Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
BeitragVerfasst: Do 13.05.10 17:53 
Du könntest allen Edits den selben ereignishandler zuweisen und dann schreiben:

ausblenden 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

_________________
This Signature-Space is intentionally left blank.
Bei Beschwerden, bitte den Beschwerdebutton (gekennzeichnet mit PN) verwenden.