Zitat von
stiftII:
Ich habe einen Text, dieser beinhaltet Smilies.
Diese möchte ich im Text umwandeln(in Grafiken).
Somit muss ich erkennen an welcher Stelle die Smilies im Text sind und wo sie auf dem Bildschirm sind, um sie beim onpaint meiner hauptform über den text zeichnen zu können.
Ahh - jetzt gibt das mehr Sinn.
Input ist eine StringListe mit ein oder mehr Zeilen.
In den Zeilen sind bestimmte Smilie in Textdarstellung.
Output ist ein Canvas.
Zusätzlich braucht man noch eine Imagelist für die Smilies.
Dann wäre die Vorgehensweise so:
Es gibt einen Startpunkt im Canvas, der mit der Text mitgeführt wird.
Das ist der "Cursor".
Zuerst die aktuelle Zeile (in Stringliste) untersuchen und den Text bis zum 1. Smilie ausschneiden.
Länge des Textes in Pixel bestimmen, z.B. so
Delphi-Quellcode:
function TrueFontWidth(fnt: TFont;
const text:
string): Integer;
var
dc: hdc;
tsize : Windows.TSize;
begin
dc := GetDC(0);
SelectObject(
DC, fnt.Handle);
GetTextExtentPoint32(
dc, PChar(text), Length(text), tsize);
ReleaseDC(0,
DC);
Result := tsize.cx;
end;
Die Text mit Canvas.TextRect() ausgeben.
"Cursor" entsprechend nach rechts verschieben.
Smilietext aus Zeile ausschneiden, Bitmap dazu besorgen, auf Canvas ausgeben.
"Cursor" über Breite des Bitmaps (+ etwas Zwischenraum) nach rechts schieben.
Solange wiederholen, bis ganze Zeile aufgebraucht.
Wenn es noch mehr Zeilen gibt, den "Cursor" an den linken Rand setzen und um Texthöhe nach unten
verschieben.
Ich kann mich dunkel erinnern, dass es hier in der
DP einen Betrag gab, der zeigt
wie man Bitmaps in ein TRichEdit einbaut.
Es ging sogar um Smilies, aber ich finde den Beitrag nicht mehr...