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 Mehere zeilen ohne schleife aus memo "hohlen"?? (https://www.delphipraxis.net/63673-mehere-zeilen-ohne-schleife-aus-memo-hohlen.html)

Nepos 21. Feb 2006 15:05


Mehere zeilen ohne schleife aus memo "hohlen"??
 
Hallo mal wieder...

ich hab das prob das ich bisher immer wenn ich von einem Memo die zeilen von zb 5-100 in ein anderes memo kopieren wollte es mit einer schleife gemacht habe... so zb:

Delphi-Quellcode:
for loop:=5 to 100 do
 memo2.lines.add(memo1.lines[loop]);
das dauert aber immer sehr lange! Gibt es da ne elegantere lösung?

ich habe leider nichts im internet gefunden... eventuell hatte ich auch nur die falschen stichwörter.

Könnt ihr mir weiter helfen?

viele grüße Martin

Sharky 21. Feb 2006 15:13

Re: Mehere zeilen ohne schleife aus memo "hohlen"?
 
Hai Nebos,

eventuell kannst Du das ganze ja schon dadurch beschleunigen das Du vor deine Schleife ein [oh]BeginUpdate;[/oh] für das "Zielmemo" setzt und danach natürlich ein Delphi-Referenz durchsuchenEndUpdate.

Delphi-Quellcode:
begin
  Memo2.Lines.BeginUpdate;
  for loop:=5 to 100 do
  begin
    memo2.lines.add(memo1.lines[loop]);
  end;
  Memo2.Lines.EndUpdate;
end;

DP-Maintenance 21. Feb 2006 15:14

DP-Maintenance
 
Dieses Thema wurde von "Sharky" von "Object-Pascal / Delphi-Language" nach "VCL / WinForms / Controls" verschoben.
Memo? Passt besser zu VCL ;-)

Lannes 21. Feb 2006 18:12

Re: Mehere zeilen ohne schleife aus memo "hohlen"?
 
Hallo,

etwas ungewöhnlich aber schneller als mit einer Schleife :stupid:
Delphi-Quellcode:
var i : Integer;
begin
  i := Memo1.Perform(EM_LINEINDEX, 501, 0);
  Memo2.Lines.BeginUpdate;
  Memo2.Lines.Add(Copy(Memo1.Text,1,i-2));
  Memo2.Lines.EndUpdate;
Nachtrag: (nicht genau gelesen) > Zeile 5-500
Delphi-Quellcode:
var j,i : Integer;
begin
  j := Memo1.Perform(EM_LINEINDEX, 5, 0);
  i := Memo1.Perform(EM_LINEINDEX, 501, 0);
  Memo2.Lines.BeginUpdate;
  Memo2.Lines.Add(Copy(Memo1.Text,j,i-2));
  Memo2.Lines.EndUpdate;

Vjay 22. Feb 2006 09:38

Re: Mehere zeilen ohne schleife aus memo "hohlen"?
 
Ich habe es nicht ausprobiert, aber ich glaube Begin + EndUpdate ist bei einem einzigen Add nicht erforderlich.

himitsu 22. Feb 2006 10:44

Re: Mehere zeilen ohne schleife aus memo "hohlen"?
 
Das mag stimmen, aber hier sind es 96 :zwinker:

Delphi-Quellcode:
for loop:=5 to 100 do
  memo2.lines.add(...);

Thorben77 22. Feb 2006 10:57

Re: Mehere zeilen ohne schleife aus memo "hohlen"?
 
Zitat:

Zitat von himitsu
Das mag stimmen, aber hier sind es 96 :zwinker:

Delphi-Quellcode:
for loop:=5 to 100 do
  memo2.lines.add(...);

Da ist es aber nur eins :zwinker: :

Zitat:

Zitat von Lannes
Delphi-Quellcode:
var j,i : Integer;
begin
  j := Memo1.Perform(EM_LINEINDEX, 5, 0);
  i := Memo1.Perform(EM_LINEINDEX, 501, 0);
  Memo2.Lines.BeginUpdate;
  Memo2.Lines.Add(Copy(Memo1.Text,j,i-2));
  Memo2.Lines.EndUpdate;


mschaefer 22. Feb 2006 11:26

Re: Mehere zeilen ohne schleife aus memo "hohlen"?
 
Moin, moin,

also Prinzipiell gibt es noch einen anderen Weg. Zugriff über Memo.Lines.Text ergibt den ganzen Memotext als String.
Die einzelnen Zeilen sind durch #10#13 voneinander getrennt. Damit könnte man die #10#13 bis zur Startzeile zählen und dann die #10#13 bis zur Endzeile. Beide Positionen werden zwischengespeichert und der Bereich dann mit Copy herauskopiert. Wie sich das zeitlich verhält weiss ich nicht. Das hängt im Wesentlichen von einer schnellen erweiterten Pos-Suche ab.


PS: Die neueren Delphi-Versionen haben meines Erachtens einige weitere Stringfunktionen und ich meine auch schonmal ein Pos-Routine in Assembler gesehen zu haben...

Grüße // Martin

himitsu 22. Feb 2006 11:36

Re: Mehere zeilen ohne schleife aus memo "hohlen"?
 
Zitat:

Zitat von mschaefer
also Prinzipiell gibt es noch einen anderen Weg. Zugriff über Memo.Lines.Text ergibt den ganzen Memotext als String. ...

Der Nachteil dabei ... .Lines.Text liest erstmal alle Lines[] aus und setzt diese zu einem einzigem String zusammen, was auch nicht gerade schnell und eventuell auch noch speichersparend ist.

Zitat:

Zitat von mschaefer
PS: Die neueren Delphi-Versionen haben meines Erachtens einige weitere Stringfunktionen und ich meine auch schonmal ein Pos-Routine in Assembler gesehen zu haben...

Oder du hast meine gesehen (in der CodeLib), :roll:
aber wenn ich mich recht erinnere, sind die Standard-Routinen von Delphi auch schon in ASM (oder umschaltbar in ASM und Pascal)

z.B. Code-Library -> Object-Pascal / Delphi-Language
(Teil)String in anderem String suchen/zählen
Zeile aus String extrahieren


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:47 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