Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Problem mit Textausgabe -> TMemo (https://www.delphipraxis.net/132070-problem-mit-textausgabe-tmemo.html)

JBJHJM 5. Apr 2009 22:20


Problem mit Textausgabe -> TMemo
 
Hi! Ich habe ein - sicherlich ganz einfach zu lösendes- Problem...
Hier ist ein Ausschnitt aus einem Code:

Delphi-Quellcode:
begin
  Textoutput.Clear;
  b:=0;
  a:=length(textinput.Lines[0]);
  if a>0 then
  begin
    repeat
      begin
       s1:= Textinput.lines[b];
       s2:= Bearbeitung(s1);
       Textoutput.Lines[b]:= s2;

       b:=b+1;
       a:= length(textinput.Lines[b]);
       showmessage(s1+' '+s2);
      end;
    until a=0;
  end
    else showmessage('Bitte Text eingeben!');
end;
Der Code liest -Zeile für Zeile- aus textinput ein, bearbeitet ihn mit "Bearbeitung" und gibt ihn in textoutput aus, textinput und textoutput sind TMemos. "Showmessage..." ist nur zum testen!

DAS PROBLEM:
Die erste Zeile läuft einwandfrei durch, die Zweite aber nur bis "s2:= Bearbeitung...", also s2 wird noch richtig bestimmt, aber eigentlich sollte s2 dann ja in der 2. Zeile ausgegeben werden, aber das wird es leider nicht :?

Weiss jemand woran das liegt??

P.S.: Bin eher Einsteiger, also wundert euch nicht über solche Fragen :mrgreen:

jaenicke 5. Apr 2009 22:27

Re: Problem mit Textausgabe -> TMemo
 
Du leerst Textoutput und greifst dann auf Zeile b zu? :shock:
Delphi-Quellcode:
Textoutput.Lines[b]
Und was machst du mit der Länge der ersten Zeile?
Delphi-Quellcode:
a:=length(textinput.Lines[0]);
Vielleicht einmal folgendes:
Die Anzahl der Zeilen bekommst du mit Textinput.Lines.Count, den kompletten Inhalt mit allen Zeilen bekommst du mit Textinput.Text. Auf die Zeile b greifst du mit Textinput.Lines[b] zu.

mkinzler 5. Apr 2009 22:31

Re: Problem mit Textausgabe -> TMemo
 
Zudem könnte man die Zeile ja mit Memo.Lines.Append() ans Memo anfügen.

JBJHJM 5. Apr 2009 23:32

Re: Problem mit Textausgabe -> TMemo
 
Zitat:

Zitat von jaenicke
Du leerst Textoutput und greifst dann auf Zeile b zu? :shock:
Delphi-Quellcode:
Textoutput.Lines[b]
Und was machst du mit der Länge der ersten Zeile?
Delphi-Quellcode:
a:=length(textinput.Lines[0]);
Vielleicht einmal folgendes:
Die Anzahl der Zeilen bekommst du mit Textinput.Lines.Count, den kompletten Inhalt mit allen Zeilen bekommst du mit Textinput.Text. Auf die Zeile b greifst du mit Textinput.Lines[b] zu.

Textinput.Lines.Count ist schon mal eine hilfreiche Vereinfachung!

Delphi-Quellcode:
a:=length(textinput.Lines[0]);
Habe ich benutzt, um zu kontrollieren, ob überhaupt etwas ins Memo eingetragen ist, ansonsten kommt die Messagebox...

Zitat:

Zitat von jaenicke
Du leerst Textoutput und greifst dann auf Zeile b zu? :shock:

Damit meinst du im Grunde, dass ich, wenn ich das Memo leere auch nur auf die 1. Zeile zugreifen kann?


Zitat:

Zitat von mkinzler
Zudem könnte man die Zeile ja mit Memo.Lines.Append() ans Memo anfügen.

Ich glaube, das ist es, was ich gesucht habe, ich werde es spätestens Morgen ausprobieren!

Vielen Dank euch beiden!

jaenicke 5. Apr 2009 23:37

Re: Problem mit Textausgabe -> TMemo
 
Zitat:

Zitat von JBJHJM
Zitat:

Zitat von jaenicke
Du leerst Textoutput und greifst dann auf Zeile b zu? :shock:

Damit meinst du im Grunde, dass ich, wenn ich das Memo leere auch nur auf die 1. Zeile zugreifen kann?

Es gibt dann keine Zeile, also kannst du auch nicht auf eine Zeile zugreifen. ;-)

Schau dir doch einfach einmal an welche Möglichkeiten es gibt, in der Hilfe und bei der Syntaxergänzung. Also wenn du den Punkt nach Textinput.Lines schreibst z.B., dann bietet Delphi dir ja an welche Möglichkeiten es gibt. Und viele (wie Add z.B.) sagen ja schon vom Namen her was sie machen. ;-)

Jens Hartmann 6. Apr 2009 06:58

Re: Problem mit Textausgabe -> TMemo
 
Hallo,

das ganze sollte dann ungefähr so aus sehen...

Delphi-Quellcode:
begin
  Textoutput.Clear;
  b := 0;
  a :=Textinput.Lines.Count;
  if a > 0 then
  begin
    while a > b then
      begin
       s1:= Textinput.lines[b];
       s2:= Bearbeitung(s1);
       Textoutput.Lines.Add := s2;
       b:=b+1;
      end;
  end
    else showmessage('Bitte Text eingeben!');
end;
[EDIT] Hab gerade kein Delphi zur Hand, du musst allerdings, den unteren Teil nochmal überprüfen.

Gruß Jens

jaenicke 6. Apr 2009 07:19

Re: Problem mit Textausgabe -> TMemo
 
Oder so, es sei denn es soll eine while-Schleife sein:
Delphi-Quellcode:
Textoutput.Text := '';
for i := 0 to Textinput.Lines.Count - 1 do
  Textoutput.Lines.Add(Bearbeitung(Textinput.Lines[i]));

Jens Hartmann 6. Apr 2009 08:02

Re: Problem mit Textausgabe -> TMemo
 
Zitat:

Oder so, es sei denn es soll eine while-Schleife sein:Delphi-Quellcode: markieren
Delphi-Quellcode:
Textoutput.Text := '';
for i := 0 to Textinput.Lines.Count - 1 do
  Textoutput.Lines.Add(Bearbeitung(Textinput.Lines[i]));

Diese Lösung ist allerdings schöner. Hab ich gar nicht so schnell drüber nachdeacht.

Gruß Jens

JBJHJM 6. Apr 2009 19:27

Re: Problem mit Textausgabe -> TMemo
 
Zitat:

Zitat von jaenicke
Oder so, es sei denn es soll eine while-Schleife sein:
Delphi-Quellcode:
Textoutput.Text := '';
for i := 0 to Textinput.Lines.Count - 1 do
  Textoutput.Lines.Add(Bearbeitung(Textinput.Lines[i]));

Ist eine wirklich praktische... und kurze Lösung! Vielen Dank, Problem geklärt! :spin2:


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:13 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz