Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - wert und ASCII Zeichenkette


toxicmaster - Fr 08.04.05 20:48
Titel: wert und ASCII Zeichenkette
hi,
ich will, wenn ich ein edit, ein memo und einen button habe, dass wenn ich in das editfeld eine zahl eintrage und den button drücke, dass das in dem memofeld steht:
1. Wert: 12 V
2. Wert: 145 V
3. Wert: 32 V

-Also die nummerierung soll mit der ASCII zeichenkette nummeriert werden.
+
-dann kommt '. Wert: '
+
-dann kommt edit1.text
+
- dann kommt ' V'

ic habe schonmal was geschrieben, aber er fängt mit der nummerierung nicht mit 1 an sondern mit 9


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
var
zaehler:integer;
ausgabe:string;

procedure TForm1.bteingabeClick(Sender: TObject);
begin

     for zaehler:= 48 to 57 do
     ausgabe:=(char(zaehler)) + '. Wert: ' + edwert.Text + ' V';
     memo1.Lines.Add(ausgabe);

end;


delfiphan - Fr 08.04.05 21:14

Wie wär's hiermit:


Delphi-Quelltext
1:
2:
For I := 1 to ...
 Memo1.Lines.Add(Format('%d. Wert: %s V',[I,edwert.Text]));


Lannes - Fr 08.04.05 21:21

Hallo,
user profile icontoxicmaster hat folgendes geschrieben:
...aber er fängt mit der nummerierung nicht mit 1 an sondern mit 9

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
var
zaehler:integer;
ausgabe:string;

procedure TForm1.bteingabeClick(Sender: TObject);
begin
  for zaehler:= 48 to 57 do
    begin//  <<Lannes  
    ausgabe:=(char(zaehler)) + '. Wert: ' + edwert.Text + ' V';//wird 10x ausgeführt
    memo1.Lines.Add(ausgabe);
    end;//  <<Lannes
end;

ausgabe:=(... wird 10 mal ausgeführt
memo1.Lines.Add nur nach Ende der Schleife >> Char(57) ist '9'
begin und end fehlt, habs eingebaut.


toxicmaster - Sa 09.04.05 07:38

aber es soll ja nicht 10 mal ausgeführt werden.
das sollen messwerte sein, die man in das edit eingibt und bei jeder eingabe soll dann halt ne neue zeile benutzt werden.Also es soll immer nur eine zeile gemacht werden. die nummerierung ist ja nur falsch


Holgerwa - Sa 09.04.05 08:26

Hallo,

dafür brauchst Du doch gar keine Schleife. Initialisiere die Variable zaehler, z.B. im OnShow-Event, und dann fügst Du beim OnClick eine einzige Zeile zum Memo hinzu:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
var
zaehler:integer;
ausgabe:string;

procedure TForm1.FormShow(Sender: TObject);
begin
  zaehler := 0;
end;

procedure TForm1.bteingabeClick(Sender: TObject);
begin
  inc (zaehler);
  ausgabe := Format ('%d. Wert: %s V', [zaehler, edwert.Text]));
  Memo1.Lines.Add (ausgabe);
end;

Holger


toxicmaster - Sa 09.04.05 12:17

ja ich weiß, aber ich würde gern das benutzen was ich oben habe.
aber da muss ne klitzekleine sache fehlen und dann funzt es.
das hatte ich so in der schule im unterricht.
wollte es nur zuhause nomma abschreiben habe es aber nicht mehr ganz zusammen bekommen.


wdbee - Sa 09.04.05 12:47


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
procedure TForm1.FormCreate(Sender: TObject);  
begin
  Zaehler := 48// Char(48) = 0
end;

procedure TForm1.BteingabeClick(Sender: TObject);  
begin  
  Inc(Zaehler); // Nächste Nummer verwenden
  Ausgabe := (Char(Zaehler)) + '. Wert: ' + EdWert.Text + ' V';  
  Memo1.Lines.Add(ausgabe);  
end;


Holgerwa - Sa 09.04.05 13:51

user profile icontoxicmaster hat folgendes geschrieben:
ja ich weiß, aber ich würde gern das benutzen was ich oben habe.

Überleg doch mal: Du möchtest EINE Zeile zum Memo hinzufügen, richtig?
Warum würdest Du dann eine Schleife 10 mal durchlaufen, nur um einer Variablen 10 mal einen anderen Wert zuzuweisen?
Danach benutzt Du doch sowieso nur die letzte Zuweisung, also die mit zaehler=57.
Vielleicht versteh ich ja nicht genau, was Du machen willst, aber die Schleife scheint mir ziemlich sinnlos.

Holger


toxicmaster - Mo 11.04.05 20:17

das ganze soll eine auflistung von spannungsmesswerten werden.
und mit jedem klick auf den button soll der neue wert in das memofeld eingetragen werden.
und es soll nicht zehnmal der gleiche wert eingetragen werden.
das mit den werten und so klappt ja aber die nummerierung am anfang bleibt immer bei neun.
ich will sozusagen die messwerte in dem memofeld dokumentieren.


delfiphan - Mo 11.04.05 21:26

Das char(zaehler) scheint sich durchzusetzen ;). Man sollte hier aber unbedingt Format verwenden. Ist 1. wahrscheinlich schneller und 2. ist char(zaehler) kein guter Programmierstil. Eine "10" kannst du damit nicht mal mehr darstellen.
PS: Auch zwei IntToStr mit + zu verknüpfen ist weder eleganter noch schneller (IntToStr ruft ja Format auf...)

Ich schlage folgendes vor:

Delphi-Quelltext
1:
2:
3:
4:
5:
procedure TForm1.Button1Click(Sender: TObject);
begin
 with Memo1.Lines do
  Add(Format('%d. Wert: %s V', [Count+1, edwert.Text]));
end;

(Eine Listbox wäre aber wahrscheinlich geeigneter)


wdbee - Di 12.04.05 10:32

user profile icontoxicmaster hat folgendes geschrieben:
... aber die nummerierung am anfang bleibt immer bei neun.


Begreif das doch mal: Wenn du in der FOR-Schleife bis neun zählst, wird da immer neun drin stehen. Probier mal meinen Code oben und sieh dir den Unterschied an.
Ansonsten stimmt es, dass Char() schlecht ist, denn das kann nur mit einstelligen Zahlen (0 bis neun) funktionieren.


toxicmaster - Do 14.04.05 18:41

thx das von wdbee hat funktioniert.
die anderen habe ich nicht ausprobiert.
aber trotzdem thx