Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Zeile in einem Memo ersetzen (https://www.delphipraxis.net/163870-zeile-einem-memo-ersetzen.html)

loirad 19. Okt 2011 18:10

Zeile in einem Memo ersetzen
 
Hallo ihr,
ich möchte in einem Memo bestimmte Zeilen sersetzen. Ich habe es schon mit erst löschen und dann neu add(string) probiert, jedoch flackert das zu sehr. Habt ihr eine Idee :?:
Liebe Grüße
loirad

Luckie 19. Okt 2011 18:21

AW: Zeile in einem Memo ersetzen
 
Ohne Code, wie du es gemacht hast, kann man da schlecht was zu sagen.

loirad 19. Okt 2011 18:31

AW: Zeile in einem Memo ersetzen
 
Hier der Code :arrow:
Delphi-Quellcode:
Zeile:='';
for i:=0 to Hilfe.Lines.Count-1 do
 begin
  if length(Hilfe.Lines.Strings[i])>0 then
   for j:=1 to length(Hilfe.Lines.Strings[i]) do
    begin
     Zeile:=Zeile+Hilfe.Lines.Strings[i][j];
     Ausgabe.Lines.Delete(i);
     Ausgabe.Lines.Add(Zeile);
     sleep(50);
     Application.ProcessMessages;
    end
  else
   Ausgabe.Lines.Add(Zeile);
  Zeile:='';
 end;
In Hilfe wird am Anfang die Textdatei eingelesen und in Ausgabe Buchstabe für Buchstabe langsam eingetragen!
Variablen: i,j:integer; Zeile:string;

Liebe Grüße
loirad :!:

Furtbichler 19. Okt 2011 19:06

AW: Zeile in einem Memo ersetzen
 
Haben die Memo.Lines kein BeginUpdate/EndUpdate?

himitsu 19. Okt 2011 19:33

AW: Zeile in einem Memo ersetzen
 
Tja, wie ersetzt man wohl eine Zeile in einer Stringliste?
Delphi-Quellcode:
Ausgabe.Lines.Delete(i);
Ausgabe.Lines.Add(Zeile);
entspricht (wenn die Zeile schon vorhanden ist)
Delphi-Quellcode:
Ausgabe.Lines[i] := Zeile;
.
also
Delphi-Quellcode:
if i < Ausgabe.Lines.Count then
  Ausgabe.Lines.Add(Zeile)
else
  Ausgabe.Lines[i] := Zeile;
oder man macht das Add vor der inneren Schleife, dann muß man nicht sändig prüfen.


Aber da ein Memo nunmal nicht dafür gedacht ist, daß man sowas damit macht ......


BeginUpdate und eventuell noch DoubleBuffered aktivieren ... vielleicht wird es dann besser.

ASM 19. Okt 2011 19:52

AW: Zeile in einem Memo ersetzen
 
Kann man auch so machen:
Code:
// ersetzt in Memo1 die Zeile (aRow), auf welcher der Cursor aktuell steht (bzw. stand, bevor der Button gedrückt wurde)
procedure TForm1.Button1Click(Sender: TObject);
var
  aRow: integer;
begin
  with memo1 do
  begin
    aRow := SendMessage(Handle, EM_LINEFROMCHAR, SelStart, 0);
    SelStart := Perform(EM_LINEINDEX, aRow, 0);
    Perform(EM_SCROLLCARET, 0, 0);
    SelLength := length(lines[aRow]);
    if aRow=lines.Count then
      SelText := 'Diese Zeile wurde ersetzt'
    else
     SelText := 'Diese Zeile wurde ersetzt'#13;
  end;
end;

loirad 22. Okt 2011 14:50

AW: Zeile in einem Memo ersetzen
 
Super-himitsu's Vorschlag funktioniert perfekt - danke!!!!!!!!!!!

ASM 22. Okt 2011 18:01

AW: Zeile in einem Memo ersetzen
 
Der von himitsu vorgeschlagene Weg setzt natürlich voraus, dass der Wert von i bereits bekannt und als solches im Programm fixiert ist - es sei denn, man fragt den Wert von i über ein Editfeld oder ähnliches ab.

Der alternative Vorschlag (von mir) dagegegen erlaubt ein völlig freies, dynamisches Vorgehen, da die auszutauschende Zeile erst zum aktuellen Zeitpunkt durch die nicht vorhersagbare, ad hoc erfolgte Plazierung des Cursors identifiziert wird. Notwendigerweise ist der dazu notwendige Code etwas komplexer.


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