Autor Beitrag
Pinkywesen
Hält's aus hier
Beiträge: 15



BeitragVerfasst: Fr 29.10.10 11:14 
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?
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: 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.

Für diesen Beitrag haben gedankt: Pinkywesen
Barret
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 156
Erhaltene Danke: 1

Win XP
D7 Ent
BeitragVerfasst: 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.

ausblenden 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

_________________
Wir könnten ja, wenn wir wollten aber wir wollen ja nicht.
It´s not a bug, it´s a feature.

Für diesen Beitrag haben gedankt: Pinkywesen
Nersgatt
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1581
Erhaltene Danke: 279


Delphi 10 Seattle Prof.
BeitragVerfasst: 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:

ausblenden 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.

_________________
Gruß, Jens
Zuerst ignorieren sie dich, dann lachen sie über dich, dann bekämpfen sie dich und dann gewinnst du. (Mahatma Gandhi)

Für diesen Beitrag haben gedankt: Pinkywesen
MaxWurzel
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 77
Erhaltene Danke: 10



BeitragVerfasst: 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:
ausblenden 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.

Für diesen Beitrag haben gedankt: Pinkywesen
Pinkywesen Threadstarter
Hält's aus hier
Beiträge: 15



BeitragVerfasst: 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.

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


Delphi 10 Seattle Prof.
BeitragVerfasst: 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

_________________
Gruß, Jens
Zuerst ignorieren sie dich, dann lachen sie über dich, dann bekämpfen sie dich und dann gewinnst du. (Mahatma Gandhi)

Für diesen Beitrag haben gedankt: Pinkywesen
Pinkywesen Threadstarter
Hält's aus hier
Beiträge: 15



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 121

Windowse, Linuxe
Delphi 3 Prof., D5 Enterprise, D6 Enterprise, Kylix, Delphi 2010
BeitragVerfasst: Fr 29.10.10 12:20 
nicht böse gemeint, aber:
www.delphi-treff.de/...che-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.
ausblenden 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:
ausblenden 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;


Zuletzt bearbeitet von yogo am Fr 29.10.10 13:36, insgesamt 1-mal bearbeitet
thepaine91
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 763
Erhaltene Danke: 27

Win XP, Windows 7, (Linux)
D6, D2010, C#, PHP, Java(Android), HTML/Js
BeitragVerfasst: 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
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 121

Windowse, Linuxe
Delphi 3 Prof., D5 Enterprise, D6 Enterprise, Kylix, Delphi 2010
BeitragVerfasst: Fr 29.10.10 13:34 
user profile iconthepaine91 hat folgendes geschrieben Zum zitierten Posting springen:

ausblenden 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?