Autor Beitrag
ruffy407
Hält's aus hier
Beiträge: 2



BeitragVerfasst: Mo 18.12.06 01:12 
Hey also ich hab gerade erst angefangen delphi zu lernen und muss eine große hausarbeit bald abgeben... ich bin aber echt am verzweifeln da ich mir das alles selber beibringen muss... hoffe ihr könnt mir helfen.
Also ich habe ein paar editfelder und möchte die eingegebenen daten in einer listbox widergeben.
das funktioniert auch soweit mittels der doppeltverketteten liste. Doch jetz habe ich das problem, dass ein editfeld körpergröße bestimmen soll (z.B. 1,70 m).
ich möchte dass wenn der benutzer eine ganzzahlige eingabe (z.b. 170) macht, ein warn fenster kommt mit der aufforderung es mit einem komma einzugeben.

ich habe mir gedacht ich könnte dies mit einer funktion lösen die sagt "wenn ein komma in der eingabe enthalten ist, gebe diese nachricht aus".
Es funktioniert aber noch gar nich.. vieleicht habei hc das ganze prinzip von funktionen noch nich verstanden. Naja hier der Quellcode Ausschnitt:



ausblenden volle Höhe 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:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
function kommawert(eingabe : string) : boolean;
var
i : integer;
begin
  for i:=1 to length(eingabe) do begin
    if eingabe[i]=',' then begin
      result := eingabe[i]=',';
    end
    else
      result := eingabe[i]<>',';
  end;
end;

procedure TMyFriend.EintragenClick(Sender: TObject);
var
komma : string;
Neu : Tknoten;
begin
  komma:= editgroesse.Text;
  if (editname.Text <>(''))
  and (editvorname.Text <>(''))
  and (editalter.Text <>(''))
  and (editgroesse.Text <>('')) then begin
    if (kommawert(komma)) then begin
      Neu := TKnoten.Init;
      neu.name := editname.Text;
      neu.vorname := editvorname.Text;
      try
        neu.alter := (strtoint(editalter.Text));
      except
        showmessage('"Alter" muss eine Zahl sein!') ;
        editalter.Clear;
        activecontrol := editalter;
        exit;
      end;

      try
        neu.groesse := (strtofloat(editgroesse.Text));
      except
        showmessage('"Größe" muss eine Zahl sein!');
        editgroesse.Clear;
        activecontrol := editgroesse;
        exit;
      end;

      Neu.Nach := Anfang.Nach;
      Neu.Nach.Vor := Neu;
      Anfang.nach := Neu;
      Neu.Vor := Anfang;

      editname.clear;
      editvorname.Clear;
      editalter.Clear;
      editgroesse.Clear;

      activecontrol := editname;
      anzeige;
      end
      else
      showmessage('Bitte eine Zahl mit kommestelle eingeben!');

    end
  else begin
    showmessage('Felder dürfen nicht leer sein!');
  end;
end;


Ich drehe mich hier echt im kreis und komme nicht weiter... ich bin so ideenlos als anfänger.

Kann mir bitte jemand sagen was ich an diesem quellcode alles anders machen muss ?
Danke euch!

Moderiert von user profile iconChristian S.: Code- durch Delphi-Tags ersetzt
Moderiert von user profile iconChristian S.: Topic aus Delphi Language (Object-Pascal) / CLX verschoben am Mo 18.12.2006 um 00:17


Zuletzt bearbeitet von ruffy407 am Mo 18.12.06 16:52, insgesamt 1-mal bearbeitet
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10181
Erhaltene Danke: 1254

W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Mo 18.12.06 01:44 
Moin und :welcome: im Forum!

Deine Funktion liefert praktisch nur den letzen Vergleich zurück, also ob das letzte Zeichen im String ein Komma ist. ;) Du kannst es mal so probieren, wenn du komplett auf eigenen Algorithmen aufbauen willst:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
function Kommawert(Eingabe: String): Boolean;  
  var  
    i: Integer;  
begin  
  Result := TRUE; // Standard: Komma enthalten
  for i := 1 to Length(Eingabe) do // über alle Zeichen im String
    if (Eingabe[i] = ','then // ist das aktuelle Zeichen in Komma?
      Exit; // ja, dann Funktion (und Schleife) abbrechen
  Result := FALSE; // alle Zeichen durch, aber kein Komma gefunden
end;

Diese Funktion ist nicht gerade nach dem "Muster" aufgebaut, wie Informatiklehrer sich sowas "wünschen", aber dafür performant (und die Delphi-Entwickler benutzen diese Konstruktion intern auch sehr gerne ;)).

Es geht aber auch noch sehr viel einfacher, wenn du auf eine Bibliotheksfunktion zurückgreifst:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
function Kommawert(Eingabe: String): Boolean;  
begin  
  Result := (Pos(',',Eingabe) > 0); // ist ein Komma enthalten, liefert Pos() einen Wert > 0
end;

Das jetzt in dein Programm zu integrieren, sollte dir wohl nicht mehr sehr schwer fallen. ;)

cu
Narses

_________________
There are 10 types of people - those who understand binary and those who don´t.
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Mo 18.12.06 01:49 
Hallo!

Zuerst einmal: Bitte wähle einen etwas aussagekräftigeren Titel. Der jetzige kann alles und nichts bedeuten ;-)

Dann zu diesem hier:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
   if eingabe[i]=',' then begin
      result := eingabe[i]=',';
    end
    else
      result := eingabe[i]<>',';


Du schaust, ob eingabe[i] = ',' "true" ist. Wenn ja, dann setzt Du result auf eingabe[i] = ',', von Du aber weißt, dass es "true" ist.

Im else-Zweig andersrum: Du weißt, dass der Vergleich der if-Abfrage "false" ist (sonst wärst Du nicht im else-Zweig). Dann muss aber eingabe[i]<>','; gerade "true" sein!

Fazit: Du setzt beide Male auf "true".

Außerdem durchläufst Du die Eingabe von vorne bis hinten, egal ob Du ein Komma findest oder nicht, das macht auch keinen Sinn. Wenn Du eines gefunden hast, musst Du aufhören.


Das alles kannst Du Dir aber sparen, wenn Du Dir die Funktion "Pos" ansiehst :-)

Grüße
Christian

//edit: Schade, zu langsam :-(

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
raiguen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 374

WIN 2000prof, WIN XP prof
D7EP, MSSQL, ABSDB
BeitragVerfasst: Mo 18.12.06 11:00 
Problem scheint hier gelöst zu sein...
ruffy407 Threadstarter
Hält's aus hier
Beiträge: 2



BeitragVerfasst: Mo 18.12.06 16:50 
Ich danke euch für die möglichkeiten mein problem zu lösen... so macht das delphi lernen wieder spass =)