Einzelnen Beitrag anzeigen

Delphi-Noobie

Registriert seit: 28. Nov 2003
102 Beiträge
 
#6

Re: Smileys in einer Listbox?

  Alt 22. Nov 2005, 16:04
Ok ich habs geschafft! Ich hab das im ondrawitem geschrieben:
Delphi-Quellcode:
const
  SM1 = ':)';
var
  s, t: String;
  m, z: Integer;
begin

  try with (Control as TListbox) do begin
    z := 0;
    s := Items[Index];
    Canvas.Brush.Style := bsClear;
    while Pos(SM1, s) > 0 do begin
      t := Copy(s, 1, Pos(SM1, s) - 1);
      m := Canvas.TextWidth(t);

      Canvas.TextRect(Rect, Rect.Left + z, Rect.Top, t);
      Canvas.Draw(Rect.Left + z + m, Rect.Top, self.image1.Picture.Bitmap);

      Delete(s, 1, Pos(SM1, s) - 1);
      Delete(s, 1, Length(SM1) );
      z := z + m + self.image1.Width + 2;
    end;
    Canvas.TextRect(Rect, Rect.Left + z, Rect.Top, s);
  end;
  except
  end;
end;
Allerdings klappt das nur für 1 Smiley :'( wenn ich noch ne 2. Konstante definiere z.B SM2 = 'o_O'; und den selben Coden nochmal an den hier ranhänge dann löscht er die zeichen nicht mehr sondern lässt sie stehen und malt das bild noch drüber, so das man beides sieht.
Delphi-Quellcode:
const
  SM1 = ':)';
  Sm2 = 'o_O';
var
  s, t: String;
  m, z: Integer;
begin

  try with (Control as TListbox) do begin
    z := 0;
    s := Items[Index];
    Canvas.Brush.Style := bsClear;
    while Pos(SM1, s) > 0 do begin
      t := Copy(s, 1, Pos(SM1, s) - 1);
      m := Canvas.TextWidth(t);

      Canvas.TextRect(Rect, Rect.Left + z, Rect.Top, t);
      Canvas.Draw(Rect.Left + z + m, Rect.Top, self.image1.Picture.Bitmap);

      Delete(s, 1, Pos(SM1, s) - 1);
      Delete(s, 1, Length(SM1) );
      z := z + m + self.image1.Width + 2;
    end;
    Canvas.TextRect(Rect, Rect.Left + z, Rect.Top, s);
  end;
  except
  end;

 try with (Control as TListbox) do begin
    z := 0;
    s := Items[Index];
    Canvas.Brush.Style := bsClear;
    while Pos(SM2, s) > 0 do begin
      t := Copy(s, 1, Pos(SM2, s) - 1);
      m := Canvas.TextWidth(t);

      Canvas.TextRect(Rect, Rect.Left + z, Rect.Top, t);
      Canvas.Draw(Rect.Left + z + m, Rect.Top, self.image2.Picture.Bitmap);

      Delete(s, 1, Pos(SM2, s) - 1);
      Delete(s, 1, Length(SM2) );
      z := z + m + self.image2.Width + 2;
    end;
    Canvas.TextRect(Rect, Rect.Left + z, Rect.Top, s);
  end;
  except
  end;
end;
Kann mir einer sagen woran das liegt und wie ich das beheben kann?
Wieviel Lösungen hat die Gleichung x^13=1? .... 13!
  Mit Zitat antworten Zitat