Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Alle Memos haben gleich viele Zeilen... (https://www.delphipraxis.net/41189-alle-memos-haben-gleich-viele-zeilen.html)

TheMiller 27. Feb 2005 16:33


Alle Memos haben gleich viele Zeilen...
 
Hi,

ich habe ein Problem. Ich versuche mit Hilfe einer repeat-Schleife allen 3 Memos die gleiche Anzahl an Zeilen zu geben. Diese sieht so aus:

Delphi-Quellcode:
  repeat
   Memo1.Lines.Add('') until
   Memo1.Lines.Count=Memo2.Lines.Count;
Doch wenn ich diese Benutze, fügt das Programm tausende Zeilen ein und hängt sich auf...

Wie kann ich das realisieren, dass alle Memos gleich viele Zeilen haben?

Danke im Voraus

Muetze1 27. Feb 2005 16:41

Re: Alle Memos haben gleich viele Zeilen...
 
Moin!

Du darfst diese Schleife auch nur loslassen, wenn Memo2.Lines.Count auch wirklich grösser als Memo1.Lines.Count ist - ansonsten läuft er unendlich (bzw. bis andere Grenzen auftreten).

MfG
Muetze1

TheMiller 27. Feb 2005 16:42

Re: Alle Memos haben gleich viele Zeilen...
 
Nein, die sollen ja gleich groß sein... Wieso soll ich sie erst dann loslassen, wenn memo1 > als Memo2 ist?

Stanlay Hanks 27. Feb 2005 16:47

Re: Alle Memos haben gleich viele Zeilen...
 
Weil, wenn Memo1.Lines.Count größer ist, als Memo2.Lines.Count, die Wahrscheinlichkeit, dass Memo1.Lines.Count durch Hinzufügen von neuen Zeilen kleiner wird, verschwindend gering ist ;) Dann gehst du nämlich nach dem Motto: "Mist, schon wieder ein Stück abgeschnitten und immer noch zu kurz".

Delphi-Quellcode:
while Memo1.Lines.Count < Memo2.Lines.Count do
  begin
    Memo1.Lines.Add('');
  end;
Man liest sich, Stanlay :hi:

Edit: Beim Editieren sollte auch diese "Es gibt neue Beiträge" Nachricht kommen. :mrgreen:

Nikolas 27. Feb 2005 16:48

Re: Alle Memos haben gleich viele Zeilen...
 
Die Mütze hat gemeinst, dass du zuerst überprüfen musst, ob memo1 wirklich kleiner als memo2 ist.

Schreibs eher so:
Delphi-Quellcode:
while memo1.count<=memo2.count do
memo1.lines.add('');
Da kann nichts passieren, wenn memo1 schon größer als memo2 ist.

TheMiller 27. Feb 2005 16:49

Re: Alle Memos haben gleich viele Zeilen...
 
Sorry, stehe grad ein bissl auf dem Schlauch. Also einfach aus dem = ein > machen?

Stanlay Hanks 27. Feb 2005 16:51

Re: Alle Memos haben gleich viele Zeilen...
 
Zitat:

Zitat von Toxman
Die Mütze hat gemeinst, dass du zuerst überprüfen musst, ob memo1 wirklich kleiner als memo2 ist.

Schreibs eher so:
Delphi-Quellcode:
while memo1.count<=memo2.count do
memo1.lines.add('');
Da kann nichts passieren, wenn memo1 schon größer als memo2 ist.

das = Zeichen muss er weglassen, sonst hat er nach der Schleife in Memo1 eine Zeile zu viel ;)

TheMiller 27. Feb 2005 16:54

Re: Alle Memos haben gleich viele Zeilen...
 
Ich habe den Code jetzt bei Memo2 in OnExit geschrieben. Gehe ich wieder in Memo1 zurück, so hat Memo1 3 Zeilen und Memo2 nur 2 Zeilen...

Stanlay Hanks 27. Feb 2005 16:58

Re: Alle Memos haben gleich viele Zeilen...
 
Welchen Code? ;)

TheMiller 27. Feb 2005 16:59

Re: Alle Memos haben gleich viele Zeilen...
 
Diesen:

Delphi-Quellcode:
while memo1.count<=memo2.count do
memo1.lines.add('');

Nikolas 27. Feb 2005 17:00

Re: Alle Memos haben gleich viele Zeilen...
 
Da war noch das Problem das aus '<=' ein '<' gemacht werden muss.

Stanlay Hanks 27. Feb 2005 17:00

Re: Alle Memos haben gleich viele Zeilen...
 
Dann lies mal meinen vorletzten Beitrag ;)

Edit: Ich rieche einen Bug...Ich habe schon wieder kein rotes Erinnerungskästchen gekriegt :cry:

TheMiller 27. Feb 2005 17:03

Re: Alle Memos haben gleich viele Zeilen...
 
Ich habe jetzt diesen Code:
Delphi-Quellcode:
  while memo1.lines.count<memo2.lines.count do
  memo1.lines.add('');
Ich schreibe eine Zeile in Memo2 und habe 2 Zeilen in Memo1... Ja...ein Bug... Aber wo? Ich weiß es einfach nicht

Sharky 27. Feb 2005 17:58

Re: Alle Memos haben gleich viele Zeilen...
 
Kann ich einfach nicht bestätigen.

Wenn ich in Memo2 eine Zeile schreibe kommt mit diesem Code auch nur eine Zeil ins Memo1.
Wichtig ist natürlich das Du nach deiner ersten Zeile in Memo2 nicht Enter drückst. Aber das ist ja wohl auch logisch.

TheMiller 27. Feb 2005 18:14

Re: Alle Memos haben gleich viele Zeilen...
 
Ich teste es nochmal, kann sein, dass ich mist gebaut habe.

Werde mich melden!

Muetze1 27. Feb 2005 20:08

Re: Alle Memos haben gleich viele Zeilen...
 
Moin!

Grundlegend ist ja auch die Frage, auf welches Memo die denn angepasst werden sollen? Es muss ja ein Memo geben welches die Anzahl der Zeilen vorgibt - entweder das mit den meisten Zeilen oder immer das 1. Memo oder was auch immer...

Und ich meinte vorhin: wenn du eine Repeat Until Schleife benutzt, die ja fussgesteuert ist, musst du vorher abprüfen, ob du wirklich diese ausführen musst - weil das hinzufügen wird bei einer fussgesteuerten Schleife immer ausgeführt wird und danach erst abgeprüft wird.

Und nun noch ein Beispiel, wenn das längste Memo ausschlaggebend ist:

Delphi-Quellcode:
Var
  lMaxCount : Integer;
Begin
  lMaxCount := Max(Memo1.Lines.Count, Max(Memo2.Lines.Count, Memo3.Lines.Count));

  While ( Memo1.Lines.Count < lMaxCount ) Do
    Memo1.Lines.Add('');

  While ( Memo2.Lines.Count < lMaxCount ) Do
    Memo2.Lines.Add('');

  While ( Memo3.Lines.Count < lMaxCount ) Do
    Memo3.Lines.Add('');
End;
MfG
Muetze1


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

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