Herzlich willkommen in der Delphi-PRAXiS, fealXX.
Der Zeilentrenner unter Windows ist sLineBreak - und dahinter steckt #13#10.
Du betrachtest den Text in deinem Memo (Memo3.Lines.Text) bereits als einen einzigen String. So erhältst du beim Suchen nach deinem Platzhalter (#urls#) natürlich das Offset des ersten Zeichens von diesem String. Über Memo3.Cursor steuerst du nicht die Einfügestelle an, sondern da regelst du die visuelle Erscheinung des Cursors, wenn er sich über dem Memo3 befindet. Steht dein Platzhalter nicht sowieso in einer eigenen Zeile?
Delphi-Quellcode:
procedure InsertLinks(
markup,
// Aufnehmende StringList
links: TStrings;
// Liste mit den URLs
index: Integer;
// Zeilenindex für das Einfügen
bbcTag:
string = '
URL'
// Tagname für BB-Code
);
var
i: Integer;
begin
markup.BeginUpdate;
try
for i := Pred(links.Count)
downto 0
do
markup.Insert(
index, Format('
[%s]%s[/%s]', [bbcTag, links[i], bbcTag]));
finally
markup.EndUpdate;
end;
end;
procedure TDemoForm.ButtonClick(Sender: TObject);
const
PLACE_HOLDER = '
#urls#';
var
index: Integer;
begin
index := Memo.Lines.IndexOf(PLACE_HOLDER);
if index < 0
then index := Memo.Lines.Count
else Memo.Lines.Delete(
index);
InsertLinks(Memo.Lines, ListBox.Items,
index);
end;
Freundliche Grüße vom marabu