Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Delphi Memo.Lines[i]-> Zeileninhalt auf anderes Formular übertragen (https://www.delphipraxis.net/171285-memo-lines%5Bi%5D-zeileninhalt-auf-anderes-formular-uebertragen.html)

Mojito 29. Okt 2012 23:28

Memo.Lines[i]-> Zeileninhalt auf anderes Formular übertragen
 
Hallo liebe Delphi Freunde,

ich möchte die Zeileninhalte eines Formulars(FrmMain.MmOutput.Lines[i]) mittels einer for Schleife auf ein anderes Formular übetragen.

Delphi-Quellcode:
procedure TFrmMain.BtnCreateClick(Sender: TObject);
var
i: integer;
NumberLines:Integer;
begin
Numberlines:=FrmMain.MmInput.Lines.Count;
ShowMessage(IntToStr(NumberLines));
for i := 0 to Numberlines do
  begin
  FrmMain.MmOutput.Lines[i]:=FrmMain.MmInput.Lines[i];
  end;
end;
Leider wird jedoch immer nur die erste Zeile in das andere Formular kopiert, auch wenn in mehreren Zeilen Text steht. Was mache ich da falsch?:oops:

Vielen Dank für eure Hilfe!

Sir Rufo 29. Okt 2012 23:33

AW: Memo.Lines[i]-> Zeileninhalt auf anderes Formular übertragen
 
Auf ein anderes Formular???
Delphi-Quellcode:
FrmMain.{unwichtig} := FrmMain.{unwichtig}
Wo denn auf ein anderes Formular?

Mojito 29. Okt 2012 23:36

AW: Memo.Lines[i]-> Zeileninhalt auf anderes Formular übertragen
 
Entschuldige da war ich etwas voreilig. Auf ein anderes "Memo" ist korrekt:MMOutput

Sir Rufo 29. Okt 2012 23:45

AW: Memo.Lines[i]-> Zeileninhalt auf anderes Formular übertragen
 
Die Lines eines Memos sind quasi virtuell, weil diese vom Zeilenumbruch abhängen und der kann u.a. auch von der Breite der Komponente abhängen.

Ganz einfach geht das mit:
Delphi-Quellcode:
MmOutput.Text := MmInput.Text;
EDIT: Theoretisch sollte das funktionieren, aber du versuchst eine Zeile zuviel zu übertragen.

NumberLines = 10
0..10 => 11

himitsu 30. Okt 2012 00:27

AW: Memo.Lines[i]-> Zeileninhalt auf anderes Formular übertragen
 
Grundsätzlich greift man via
Delphi-Quellcode:
.Lines[i]
(in Wirklichkeit aber
Delphi-Quellcode:
.Lines.Strings[i]
) nur auf existierende Zeilen zu.

Wenn dein Code schon innerhalb der Klasse TFrmMain steht, dann greift man nicht über die globale Variable auf sich selber zu. (das ist sinnlos, unschön und vorallem fehleranfällig)

Außerdem stimmte deine Zählung nicht, denn
Delphi-Quellcode:
for i := 0 to Count
ist falsch, da es keine Zeile mit dem Index "Count" gibt, da die letzte Zeile Count-1 ist, wenn man bei 0 anfängt mit zählen. (0 bis 3 = 4)

Wie man es schön und schnell zuweist, wurde schon genannt, aber hier noch das, was du eigentlich machen wolltest.
- nimm Zeile aus MmInput
- hänge diese Zeile an MmOutput an
- und vorher lösche noch eventuell vorhandenen Text aus MmOutput
Delphi-Quellcode:
MmOutput.Lines.Clear;
for i := 0 to FrmMain.MmInput.Lines.Count - 1 do
  MmOutput.Lines.Add(MmInput.Lines[i]);

// oder

MmOutput.Lines.Assign(MmInput.Lines);

// oder

MmOutput.Lines.Text := MmInput.Lines.Text;

// oder

MmOutput.Text := MmInput.Text;

p80286 30. Okt 2012 09:58

AW: Memo.Lines[i]-> Zeileninhalt auf anderes Formular übertragen
 
Zitat:

Zitat von Sir Rufo (Beitrag 1188993)
Die Lines eines Memos sind quasi virtuell, weil diese vom Zeilenumbruch abhängen und der kann u.a. auch von der Breite der Komponente abhängen.

Da er ja ausdrücklich Zeilen geschrieben hat, ist der Ansatz über Lines zu gehen, erst einmal richtig.
Besser wäre es aber warscheinlich als "Master" eine Stringlist zu nutzen und von dieser aus die Memos zu befüllen. Aber dafür müßte man wissen, was überhaupt bezweckt wird.

Gruß
K-H


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:59 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-2025 by Thomas Breitkreuz