Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - TMemo, Zeilenansteuern


Phanuel - Mi 14.04.04 13:54
Titel: TMemo, Zeilenansteuern
gibt es eine mögllichkeit eine bestimme Zeile in einem Memo Feld in eine Edit komponente zu übertragen?
Also das zb die dritte Zeile der Memokomponente in edit1 wiedergegeben wird.

Kann ich auch in der Memo komponente am Anfang einer Zeile immer ein 1. bzw 2. usw setzen?


Delphi-Quelltext
1:
2:
3:
4:
for i:= 1 to 10 do begin
memo1.Lines.Add(inttostr(i)); 

memo1.Lines.add(inttostr(random(50)+50)+'_'+inttostr((random(100)+100))+'_'+ inttostr((random(150)+150))+'_'+inttostr((random(200)+200))+'_'+ inttostr((random(250)+250)));


Er soll hier keine neue Zeile anfangen, sondern in der Zeile die bei memo1.Lines.Add(inttostr(i)); angefangen wurde einfach weitermachen.
und wie kriege ich es hin das er hierbei memo1.Lines.Add(inttostr(i)); ein i. macht? auf den punkt kommt es mir an!

Vielen Danke

Moderiert von user profile iconPeter Lustig: Delphi-Tags hinzugefügt


raziel - Mi 14.04.04 14:10

zugriff auf einzelne zeilen in einem memo ist mit "Strings" möglich:

Delphi-Quelltext
1:
Edit1.Text := Memo1.Lines.Strings[0];                    

dabei ist auch schreiben möglich:

Delphi-Quelltext
1:
Memo1.Lines.Strings[0] := '1. ' + Memo1.Lines.Strings[0];                    


[edit]
das ganze ist - wie ich grad in der OH seh - auch ohne angabe von Strings möglich:
Edit1.Text := Memo1.Lines[0][/edit]

raziel


Phanuel - Mi 14.04.04 14:16

Vielen dank, das hast mit schon sehr geholfen.
Noch ne Frage ich hab jetzt nen String wie zb:
10.66_108_276_264_380

das steht innem edit fenster.
Jetzt will ich das er die 10. wegmacht und die _ auch, und das er die zahlen dann summiert.
Wie mach ich das?


raziel - Mi 14.04.04 14:36

die zehn kriegste damit weg:

Delphi-Quelltext
1:
2:
if pos('.', Str) > 0 then
   Delete(str, 1, pos('.', Str));

den rest zerlegste mit nem stringlist:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
var sl: TStringList;
    i, summe: Integer;
{...}
sl := TStringList.Create;
sl.Delimiter := '_';
sl.DelimiterText := str;
summe := 0;
for i := 0 to sl.Count-1 do
   summe := summe + StrToIntDef(sl[i], 0);
sl.Free;


habs jetz nich getestet, müsste aber funktionieren.

[edit]Free vergessen... :oops:[/edit]

raziel


Phanuel - Mi 14.04.04 14:46

Label1.Caption := edit1.text;


Könntest du mir noch bitte sagen wie ich das jetzt hier zb einbaue?
also edit1.text is 1.91_100_193_265_433
und label1.caption soll dann also 91 100 193 265 433
und später dann 1082 sein.

Aber wie?


raziel - Mi 14.04.04 15:10


Delphi-Quelltext
1:
2:
if pos('.', Str) > 0 then         // ist ein "." im String?
   Delete(str, 1, pos('.', Str));   // ja? -> Vom Anfang bis zum Punkt löschen!


macht aus "X.312_311_231_44_12" -> "312_311_231_44_12"
dabei kannst für "Str" alles an Strings einsetzen was de willst "Edit1.Text" oder "Label1.Caption" z.B.


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
var sl: TStringList;
    i, summe: Integer;
{...}
sl := TStringList.Create;   // Stringlist erstellen;
sl.Delimiter := '_';    // Den "Begrenzer" festlegen (also das Trennzeichen)
sl.DelimiterText := str;   // Den String einlesen, der zerlegt werden soll
{...}    // hier kann man die werte verarbeiten
sl.Free;    // Stringlist wieder freigeben


zerlegt "312_311_231_44_12" in:

Quelltext
1:
2:
3:
4:
5:
312
311
231
44
12


dabei kannst du wieder für Str jeden beliebigen String einsetzen!


Delphi-Quelltext
1:
2:
3:
summe := 0;
for i := 0 to sl.Count-1 do
   summe := summe + StrToIntDef(sl[i], 0);

zählt nun die werte in der stringlist "sl" zusammen. das ergebnis kannst du mit

Delphi-Quelltext
1:
label1.caption := inttostr(summe);                    

über das label label1 ausgeben.


raziel


Phanuel - Mi 14.04.04 15:22

ich blick da voll nicht durch tut mir leid.
Könntest du dir das evtl mal angucken?:
http://home.arcor.de/phanuel/zufall.exe

und dann einfach ergänzen und mir zurückschicken.
Hab vielen dank.


raziel - Mi 14.04.04 16:20

sorry, gegen exe-dateien bin ich äußerst allergisch, v.a. wenn ich nich weiß von wem die sind.
wo liegt denn das problem genau?


Phanuel - Mi 14.04.04 17:15

http://home.arcor.de/phanuel/zufall.ace

nimm einfach das


raziel - Mi 14.04.04 18:21

sorry, nein!
dieses forum ist nicht dazu da, dass man sein problem fertig gelöst und implementiert auf einem silbertablett serviert bekommt, sondern um denkanstöße und tips zu bekommen, wie man sein problem selbst löst.
beschreib dein problem ein bisschen genauer! was genau verstehst am obigen source code nicht?


raziel


Phanuel - Mi 14.04.04 20:05

Ich weiss einfach nicht wie ich das einbinden soll.
tut mir leid, so die grosse ahnung von delphi habe ich auch nicht.
bin eher ein jüngling mit meinen 17 jahren, ich kenne diese befehle nicht, und weiss nicht wie ich sie in den quelltext implentieren soll.
So das aus meinem wert im edit feld, der entsprechende wert im label feld ausgegeben wird.


raziel - Do 15.04.04 12:40

ok, also du kannst verschiedene werte den einzelnen eigenschaften von objekten oder variablen zuweisen:

Delphi-Quelltext
1:
2:
3:
4:
var str: String;
begin
   str := Edit1.Text;
end;

nun kannst du die variable "Str" bearbeiten (s.o.) und anschließend der Eigenschaft "Caption" von "Label1" zuweisen:

Delphi-Quelltext
1:
Label1.Caption := Str                    

Einbinden kannste das ganze z.B. so:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
procedure TForm1.Button1Click(Sender: TObject);
var Str: String;
    sl: TStringLisT;
    i, Summe: Integer;
begin
   sl := TStringList.Create;
   Str := Edit1.Text;   // Str = Edit1.Text
   if pos('.', Str) > 0 then         // ist ein "." im String?
      Delete(str, 1, pos('.', Str));   // ja? -> Vom Anfang bis zum Punkt löschen!

   sl.Delimiter := '_';    // Den "Begrenzer" festlegen (also das Trennzeichen)
   sl.DelimiterText := str;   // Den String einlesen, der zerlegt werden soll 

   summe := 0;     // Summe initialisieren
   for i := 0 to sl.Count-1 do      // hier werden jetzt alle Zahlen zusammengezählt
      summe := summe + StrToIntDef(sl[i], 0);    // und in summe "zusammengefasst"

   Label1.Caption := IntToStr(summe);  // In Label1 die Summe der Zahlen ausgeben

   sl.Free;
end;


jetz besser?

raziel


Phanuel - Do 15.04.04 13:24

Vielen dank
das hat mir sehr geholfen