Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - Buchstaben dürfen nur einmal verwendet werden


Luzifer - Mo 10.08.09 15:22
Titel: Buchstaben dürfen nur einmal verwendet werden
Hi es geht mir um folgendes: Ich möchte ein Edit in welches man beliebigen Text eingeben kann, solange der Buchstaben noch nicht im Edit vorhanden ist, wobei Groß- und Kleinschreibung in der Hinsicht beachtet werden sollten, dass das große 'F' ebenfalls ausgeschlossen werden soll, wenn das kleine 'f' schon vorhanden ist.

Mein Lösungsansatz dafür ist folgender. (In der OnKeyPress vom Edit) Es funktioniert und is soweit wunderbar, aber die Frage: kann ich das noch eleganter lösen? Denn mal ehrlich: So schick sieht das nicht aus^^

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
for i:=1 to length(swort.text) do
  if
    ((ord(key)<91and ((key = swort.text[i]) or (chr(ord(key)+32) = swort.text[i])))
    or
    ((ord(key)>91and ((key = swort.text[i]) or (chr(ord(key)-32) = swort.text[i])))
  then begin
    Key:=#0;
    showmessage('Buchstabe schon vergeben');
    break;
end;

Erläuterungen:
swort ist mein Edit
Ich habe die Eingabe bereits im Vorwege auf einfache Klein- und Großbuchstaben begrenzt.

Danke für eure Hilfe!


elundril - Mo 10.08.09 15:31


Delphi-Quelltext
1:
2:
3:
4:
if pos(UpperCase(Key), Uppercase(swort.text)) > 0 then begin
  Key := #0;
  showmessage('Buchstabe schon vergeben');
end;


wäre eine möglichkeit ;)

lg elundril


Luzifer - Mo 10.08.09 15:40

ja na klar! danke dir! ich war mit meinen Gedanken weiter gewandert als ich zu den Uppercase-functionen kam, weil ich die Buchstaben ja nicht ändern wollte, aber es geht ja auch so^^


BenBE - Mo 10.08.09 17:25


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
var
    RemainingChars : set of Char;

{...}
if Key = #8 then 
begin
  RemainingChars := RemainingChars - [swort.text[Length(swort.text)]];
end
else if key in RemainingChars Then
begin
  ShowMessage('Already used!');
  key := #0;
end
else
begin
  RemainingChars := RemainingChars + [key];
end;


Narses - Mo 10.08.09 17:28

Moin!

Markierst du den Thread noch entsprechend, wenn dein Problem gelöst ist? Danke. ;)

cu
Narses


Luzifer - Mo 10.08.09 17:49

Auch eine sehr gute Lösung von Ben, danke dir!
na klar Narses^^