Archiv verlassen und diese Seite im Standarddesign anzeigen : von Memo Nach Richedit kopieren
mcbrunox
09.09.2002, 17:17
Wieso kopiert er nur die ersten zwei Zeilen von Memo nach Richedit ?
procedure TForm1.RichEdit1Change(Sender: TObject);
var k: integer;
begin
for k := 0 to memo1.Lines.Count do begin
Richedit1.lines[k]:=memo1.lines[k];
end;
//das geht auch nicht ?!#:-(
procedure TForm1.Button1Click(Sender: TObject);
var i:integer;
begin
i:=0;
repeat
richedit2.Lines[i]:=richedit1.Lines[i];
inc(i);
until i=richedit1.lines.count;
end;
TMemo: Lines is ein TStringlist Objekt (Obwohl in der Hilfe steht das es ein TStrings Objekt wäre?!?), genauso wie bei TRichEdit. Du kannst also nicht einfach RichEdit1.Lines[i] := 'irgendwas'
schreiben da die einträge noch gar nich existieren (der speicher noch gar nicht reserviert wurde usw). du musst sie erst anlegen und das machst du bei einem TStringlist Objekt mit Lines.Add('irgendwas'), bzw. Lines.Insert('..') usw.
Folglich muss der Code so lauten:
var k: integer;
begin
for k := 0 to memo1.Lines.Count-1 do
Richedit1.lines.Add(memo1.lines[k]);
end;
Memo1.Lines.Count-1 deshalb weil die Angabe der Zeilenanzahl von 1 weg zählt, aber die einträge bei 0 beginnen :)
Patrik Graf
09.09.2002, 17:35
Wie wärs mit
RichEdit1.Lines.Assign(Memo1.Lines);
Ich glaub das ist das einfachste... :D
@Patrick Graf: Da hassu wohl Recht :)
@mcbrunox:
Wieso hast du das in
procedure TForm1.RichEdit1Change(Sender: TObject);
rein getan? das wäre glaub ich nich sehr schlau, weil das progamm sich wohl aufhängen würde, da sobald du was in die RichEdit einträgst das OnChange Ereignis aufgerufen wird. Also praktisch ne Rekursion die nie aufhört *g*
mcbrunox
09.09.2002, 18:16
Ich wollte eigentlich nur herausfinden, was sich an dem Text(also wenn eine neue Zeile hinzugekommen ist) geändert hat.
Habs jetzt so gelöst..
procedure TForm1.RichEdit1Change(Sender: TObject);
var i:integer;
Keys: TKeyboardState;
begin
i:=0;
repeat
if richedit1.lines[i]<>richedit2.Lines[i] then label1.caption:=richedit1.Lines[i];
GetKeyboardState(keys);
if(Keys[VK_RETURN]=128)or(Keys[VK_RETURN]=129) then label2.caption:=richedit1.Lines[i];
inc(i);
until i=richedit1.lines.count;
end;
Lord_Otter
10.09.2002, 11:39
Das geht auch einfacher:
geaendert :=RichEdit1.Modified;
Geht doch viel einfacher, oder ?;)
Jan Krüger
10.09.2002, 13:00
nein, er will wissen, was sich geändert hat, nicht, ob es sich geändert hat.
vBulletin® v3.8.6, Copyright ©2000-2012, Jelsoft Enterprises Ltd.