AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi Smileys in einer Listbox?
Thema durchsuchen
Ansicht
Themen-Optionen

Smileys in einer Listbox?

Ein Thema von Delphi-Noobie · begonnen am 18. Nov 2005 · letzter Beitrag vom 24. Dez 2005
Antwort Antwort
Delphi-Noobie

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

Smileys in einer Listbox?

  Alt 18. Nov 2005, 16:37
Huhu,

Weiß jemand wie man kleine Bilder in Listbox an einer ganz bestimmten stelle malen kann? Also ich schreib ein Text dann kommt zwischendurch ein Bild und wieder Text, wodurch das Bild also irgendwo in der Listbox gemalt werden muss zwischen den Texten. Der text steht vorher in einem Editfeld bevor er in die Listbox kommt und wenn im Editfeld z.B der Teilstring "XD" vorhanden ist, soll er da dann das Bild malen.

Klingt etwas umständlich aber kann mir da jemand helfen? bis jetzt hatte ich nur die Procedure listbox1.canvas.stretchdraw(rect,bmp) im ondrawitem event aber das mit dem rect hab ich net hinbekommen.

[edit=Luckie]Programmiersprache korrigiert. Mfg, Luckie[/edit]
Wieviel Lösungen hat die Gleichung x^13=1? .... 13!
  Mit Zitat antworten Zitat
Benutzerbild von Khabarakh
Khabarakh

Registriert seit: 18. Aug 2004
Ort: Brackenheim VS08 Pro
2.876 Beiträge
 
#2

Re: Smileys in einer Listbox?

  Alt 18. Nov 2005, 16:44
Bist du dir sicher, dass du Delphi.NET verwendest? Denn die FCL-Controls haben keine Canvas-Property. Und ich denke (hoffe) mal nicht, dass du für ein neues Projekt VCL.NET benutzt.
Sebastian
Moderator in der EE
  Mit Zitat antworten Zitat
Delphi-Noobie

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

Re: Smileys in einer Listbox?

  Alt 18. Nov 2005, 16:47
Ich benutze Delphi7
Wieviel Lösungen hat die Gleichung x^13=1? .... 13!
  Mit Zitat antworten Zitat
Pfoto

Registriert seit: 26. Aug 2005
Ort: Daun
541 Beiträge
 
Turbo Delphi für Win32
 
#4

Re: Smileys in einer Listbox?

  Alt 18. Nov 2005, 18:26
Hallo Delphi-Noobie,

du kannst der Liste sagen, dass du die Items selber zeichnen möchtest, indem du
    ListBox1.Style := lbOwnerDrawVariable; setzt.

Nun rufst du den OnDrawItem-Teil der Listbox auf und musst nun das Zeichnen der Items implementieren.
Delphi-Quellcode:
procedure TForm1.ListBox1DrawItem(Control: TWinControl; Index: Integer;
        Rect: TRect; State: TOwnerDrawState);
begin
  with ListBox1 do
  begin
    Canvas.FillRect(Rect);
// Hier müsste nun ermittelt werden, wo das Item sitzt und ein entsprechendes Bitmap eingesetzt werden
  
  end;
end;
Die Position des Icon-Zeichnens könntest du mit Pos herausfinden.
Da ich selbst noch am Anfang bin, kann ich dir leider nicht mal kurz was runterschreiben, das auch funktioniert. Sorry.
Ich würde auch vermuten, dass das ständige Aufsuchen und Ersetzen innerhalb des OnDrawItem-Ereignis entsprechend Zeit in Anspruch nimmt. Vielleicht gibt es ja auch eine bessere Lösung...

Gruß
Pfoto
Jürgen Höfs
  Mit Zitat antworten Zitat
Delphi-Noobie

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

Re: Smileys in einer Listbox?

  Alt 18. Nov 2005, 18:52
Ja genau damit komme ich auch net klar, das es da rein muss konnte ich mir schon denken. Das Bild an eine bestimmte position zu bringen is auch noch klar dank Listbox.canvas.stretchdraw(rect,bmp) aber wie finde ich die position in der listbox raus, wo das bild hin soll? Z.B 'hallo Welt XD' --> dann steht in der listbox "Hallo Welt" und dann muss das Bild kommen aber welche Koordinaten sind das hinter den Text? . Vielleicht weis jemand eine elegante Lösung? ^^
Wieviel Lösungen hat die Gleichung x^13=1? .... 13!
  Mit Zitat antworten Zitat
Delphi-Noobie

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

Re: Smileys in einer Listbox?

  Alt 22. Nov 2005, 17: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
hardy1234

Registriert seit: 8. Aug 2004
Ort: Hamburg
26 Beiträge
 
Delphi 7 Enterprise
 
#7

Re: Smileys in einer Listbox?

  Alt 24. Dez 2005, 14:17
Laß mich raten,

die Methode mit dem const solltest Du dir zu allererst schenken, besser ist ne Schnittstelle;

Delphi-Quellcode:

procedure InsertSmileyInLB(PartStr: string; smfn: string);
begin

end;
Das hat den Vorteil, das Du beliebig viele smileys einbauen kannst. Aber der Fehler dürfte wohl schlich an der Berechnung des Startpunktes liegen. Das sieht mir irgendwie so aus, als ob der den neuen Smiley auf der selben Zeile zeichnet. Das die übereinander geraten ist wohl eher Zufall.

felice navidad
Es gibt keinen schöneren Tag als den heutigen. Der gestrige ist vorbei und von den kommenden weiß man nicht was sie bringen.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:29 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