Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi String erkennen und mit Bild ersetzen (https://www.delphipraxis.net/161423-string-erkennen-und-mit-bild-ersetzen.html)

-Phantom- 3. Jul 2011 15:45

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:
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;
Ver zeit mir die Namensgebung der Variablen, es ist noch ein Test Projekt...

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...

DeddyH 3. Jul 2011 16:08

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?

-Phantom- 3. Jul 2011 16:11

AW: String erkennen und mit Bild ersetzen
 
Ja es klappt :thumb: ... Aber wieso??

DeddyH 3. Jul 2011 16:14

AW: String erkennen und mit Bild ersetzen
 
Weil der markierte Text durch den Inhalt der Zwischenablage überschrieben wird, ganz einfach.

Namenloser 3. Jul 2011 16:19

AW: String erkennen und mit Bild ersetzen
 
Delphi-Quellcode:
for i := 0 to length(duchstring) do begin
zeichen := duchstring[i]+duchstring[i+1];
Die Schleife sollte nur bis
Delphi-Quellcode:
length(durchstring)-1
laufen, da du sonst auf ein Zeichen zugreifst, dass nicht existiert, was schlimmstenfalls in einer Zugriffsverletzung enden könnte.

DeddyH 3. Jul 2011 16:23

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 07:22 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