Entwickler-Ecke

Grafische Benutzeroberflächen (VCL & FireMonkey) - Edit mit Wert füllen, aber nicht anzeigen


Pinkywesen - Fr 29.10.10 11:14
Titel: Edit mit Wert füllen, aber nicht anzeigen
Erneut einen schönen Guten Tag liebe Delphi-Forum.de Mitglieder,
ihr habt mir ja freundlichweise schon zweimal sehr schnell und gut geholfen. Aber leider muss ich eure Kapazitäten nochmal in Anspruch nehmen. Bin jetzt zwar ein bisschen weiter gekommen in Sachen Delphi Programmierung kann mir aber dennoch nicht bei jedem Problem alleine helfen. Nun aber zu meinem Problem:
Ich habe ein Programm das zwei Edit Komponenten beinhaltet. Diesen weise ich am Anfang den Wert "0" zu. Damit es keinen Fehler gibt wenn man versucht den Inhalt der Edits zu benutzen ohne einen Wert hinein zuschreiben. Jetzt möchte ich aber aus Design Gründen das diese Nullen nicht angzeigt werden. Wie heißt die Einstellung dazu, oder ist das irgendwie anders möglich?


Delete - Fr 29.10.10 11:17

Die gibt es nicht. Initialisiere deine Variablen vorher entsprechend oder sorge dafür, dass dein Programm nicht abstürzt, wenn da nichts drin steht.


Barret - Fr 29.10.10 11:21

Mach in der weiteren Verarbeitung vorher einfach ne abfrage was in den Edit-Feldern drin steht.
Dann Kannst du die Funktion ja abbrechen lassen oder eine Nachricht ausgeben.


Delphi-Quelltext
1:
2:
3:
if (Edit1.Text = '') or (Edit2.Text = '') then
  if (MessageDlg('Bitte füllen Sie die Pflichtfelder aus!', mtInformation, [mbOK], 0) = mrOk) then
    Exit;


Alternativ könntest du dann noch über KeyPress die Tasten einschränken die gedrückt werden dürfen.

Moderiert von user profile iconGausi: Highlight- durch Delphi-Tags ersetzt


Nersgatt - Fr 29.10.10 11:44

Klingt, als würdest Du den Wert als Integer behandeln. Dann kannst Du an der Stelle eingreifen, wo Du den Text umwandelst:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
Function MyStrToInt(AString : String) : Integer;
Begin
  IF AString = '' then
    result := 0
  else
    result := StrToInt(AString);
end;

(aus dem Handgelenk, ungetestet)

Jetzt nur noch alle Aufrufen von StrToInt durch MyStrToInt ersetzt und alle Leerstrings werden wie '0' behandelt.


MaxWurzel - Fr 29.10.10 11:44

Wenn das Nutzen der Inhalte der Edits über einen Button geschieht, kannst du den auch solange sperren, bis in beiden Editfeldern was drinsteht:

Delphi-Quelltext
1:
2:
3:
4:
procedure TForm1.Edit1Change(Sender: TObject);
begin
  button1.Enabled := ((edit1.Text <> '') and (edit2.Text <> ''));
end;

Die Prozedur muss dann beiden Editfeldern im OnChange-Ereignis zugewiesen werden. Der Button muss natürlich vorher auf enabled:= false stehen.


Pinkywesen - Fr 29.10.10 11:59

Habe es jetzt so gehandhabt. Aber wenn ich jetzt zwei Nullen eintrage gibt er mir zwar meine Fehlermeldung aus. Stürzt aber trotzdem ab.


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
procedure TForm1.Button1Click(Sender: TObject);
begin
 if (Zahlenfeld1a.Text = '') or (Zahlenfeld1b.Text = '') = true then
   begin
    Showmessage('Bitte zwei Zahlen eintragen!');
   end
  else
  a := StrToFloat(Zahlenfeld1a.Text);
  b := StrToFloat(Zahlenfeld1b.Text);
  case Rechenoperator of


Danke an alle für ihre schnelle und gute Hilfe!

Moderiert von user profile iconNarses: Code- durch Delphi-Tags ersetzt


Nersgatt - Fr 29.10.10 12:06

Das = true kannst Du Dir sparen.
Da fehlt im Else-Zweig sicherlich das BEGIN ... END.

Ps:
Zitat:
Danke an alle für ihre schnelle und gute Hilfe!

Hier ist eigentlich das "Du" üblich.

Moderiert von user profile iconMartok: Doppelpost beräumt


Pinkywesen - Fr 29.10.10 12:20

Moderiert von user profile iconNarses: Komplett-Zitat des letzten Beitrags entfernt.

Ja, ich mache es zum Verständnis aber trotzdem hin. Schadet doch nicht, oder?

oh. wie Peinlich. :oops:

Ok, danke das DU mich darauf hingewiesen hast. Wollte ja nur höflich sein. :wink:


yogo - Fr 29.10.10 12:20

nicht böse gemeint, aber:
http://www.delphi-treff.de/tutorials/objectpascal/programmierung-mit-boolean-werten/typische-anfaengerfehler/

jetzt müsstest du nur noch irgendwie zusehen, dass keine buchstaben in deinen string rutschen.(ich glaube in manchen versionen muss man auch zwischen komma und punkt als trennzeichen unterscheiden)
dafür kannst du dir eine funktion schreiben, die alle zeichen in dem editfeld durchgeht und überpfüft.

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
function TForm1.istedittextzahl(testedit: TEdit): boolean;
var zhlr: integer;
  tmpstr: string;
  inhaltboese: boolean;
begin
  tmpstr := testedit.Text;
  inhaltboese := false;
  for zhlr := 1 to Length(tmpstr) do
    if not ((tmpstr[zhlr] in ['0'..'9']) or (tmpstr[zhlr] = ',')) then
      inhaltboese := true;
  result := not (inhaltboese);
end;


bei dir sähe das dann so aus:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
     :
     :
  if (istedittextzahl(Edit1) and istedittextzahl(edit2)) then
  begin
    a := StrToFloat(Zahlenfeld1a.Text);
    b := StrToFloat(Zahlenfeld1b.Text);
    case Rechenoperator of
     :
     :
  end;


thepaine91 - Fr 29.10.10 12:22

Als Tipp würde ich nun noch für beide Edit felder dieses Onkeypress Ereignis erstellen bzw. zuweisen:
(Auf dein Edit1 klicken, dann F11 drücken, dann Reiter Ereignisse, bei Onkeypress doppelklicken ins Feld. Das selbe auch bei Edit2 nur in dem Fall kein Doppelklick sondern in der Dropdownliste Edit1KeyPress wählen)
Dann fügst du diesen Quellcode ein, danach werden nur noch Zahlen (und Backspace) als Eingabe akzeptiert und du kannst dir die spätere Prüfung auf Buchstaben sparen.
Quellcode wurde zwischenzeitlich Editiert

Delphi-Quelltext
1:
2:
3:
4:
5:
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
  if not (Key in ['0'..'9', #8]) then // Wenn keine Zahl oder Backspace gedrückt wird
    Key := #0;
end;


yogo - Fr 29.10.10 13:34

user profile iconthepaine91 hat folgendes geschrieben Zum zitierten Posting springen:


Delphi-Quelltext
1:
2:
3:
4:
5:
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
  if not (Key in ['0'..'9', #8]) then // Wenn keine Zahl oder Backspace gedrückt wird
    Key := #0;
end;


Wesentlich eleganter als meine Variante :lol:
Jetzt könnte man noch Punkte in Kommata umwandlen oder was man grade braucht.
Aber was passiert denn wenn man mit Copy und Paste mehrere Zeichen einfügt?