![]() |
Delphi-Version: 7
String erkennen und mit Bild ersetzen
Hey Leute,
Ich scheibe wie so viele einen Chat. Ich bin nun bei einem Punkt wo das Programm z.B aus einem ": D" ein Smiley Bild machen soll. Ich hab es nun so halb hinbekommen aber auch nur sehr unelegant gelöst.
Delphi-Quellcode:
Ver zeit mir die Namensgebung der Variablen, es ist noch ein Test Projekt...
procedure Tchat.Smileyerkennen();
var letzezeile, i : Integer; duchstring,zeichen : String; bild : Tbitmap; begin letzezeile := verlaufbox.Lines.Count-1; duchstring := verlaufbox.Lines[letzezeile]; bild := tbitmap.Create; imagelist1.GetBitmap(0,bild); clipboard.Assign(bild); bild.Free; for i := 0 to length(duchstring) do begin zeichen := duchstring[i]+duchstring[i+1]; if zeichen = ':D' then begin verlaufbox.SelStart := SendMessage(verlaufbox.Handle, EM_LINEINDEX, letzezeile, i) + i-1; verlaufbox.PasteFromClipboard; end end; Das Ergebnis sieht dann so aus, dass das Bild richtig eingefügt ist aber das ": D" immer noch da ist. Wenn ich nun mit "Stringreplace()" versuche das ": D" wegzukommen wird ja wieder die "changemethode" von der Verlaufbox ausgelöst und er findet kein Smiley mehr. Hoffe ihr könnt mir helfen... |
AW: String erkennen und mit Bild ersetzen
Strings beginnen beim Index 1, nicht bei 0. Außerdem musst Du den String ja nicht zeichenweise durchgehen, das ginge auch mit Pos. Und ein Ressourcenschutzblock (try-finally) für die Bitmap wäre auch nicht verkehrt. Zum Problem: klappt es, wenn Du zwischen SelStart setzen und Einfügen SelLength noch auf 2 stellst?
|
AW: String erkennen und mit Bild ersetzen
Ja es klappt :thumb: ... Aber wieso??
|
AW: String erkennen und mit Bild ersetzen
Weil der markierte Text durch den Inhalt der Zwischenablage überschrieben wird, ganz einfach.
|
AW: String erkennen und mit Bild ersetzen
Delphi-Quellcode:
Die Schleife sollte nur bis
for i := 0 to length(duchstring) do begin
zeichen := duchstring[i]+duchstring[i+1];
Delphi-Quellcode:
laufen, da du sonst auf ein Zeichen zugreifst, dass nicht existiert, was schlimmstenfalls in einer Zugriffsverletzung enden könnte.
length(durchstring)-1
|
AW: String erkennen und mit Bild ersetzen
Wie schon gesagt, man könnte ja gleich Pos() verwenden, damit erledigt sich das dann von selbst ;)
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:06 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz