[ borovac @ 21.09.2005. 16:36 ] @
Već je bila tema na ovom forumu kako dadati raznobojni item u listbox. odgovor je bio pregeldaj help. Iz helpa sam našao ništa(ne srdite se), stoga bi mi trebao kod za slijedeće stvari:
1. treba mi da dodam raznobojni item npr prva dva znaka crvena a druga dva zelena
2. onda mi treba da dodam item koji će imati različite veličine fornta i različit font.
npr. Imam item veličine 20pt arial font onda želim u isti taj item ispod ovog velikog teksta dodati text veličine 10pt verdana.

to je zasad, hvala
[ Srki_82 @ 21.09.2005. 17:18 ] @
Postavis TListBox.Style na lbOwnerDrawFixed ako ce svi itemi da budu iste velicine i onda na OnDrawItem crtas svaki item posebno.

Primer iz Delphi Help-a (nasao za desetak sekundi)
Code:
Here is a typical handler for an OnDrawItem event. In the example, a list box with the lbOwnerDrawFixed style draws a bitmap to the left of each string.

On Windows:

procedure TForm1.ListBox1DrawItem(Control: TWinControl; Index: Integer; Rect:TRect;State: TOwnerDrawState);

var
    Bitmap: TBitmap;      { temporary variable for the item’s bitmap }
    Offset: Integer;      { text offset width }
begin
    with (Control as TListBox).Canvas do  { draw on control canvas, not on the form }
    begin
    FillRect(Rect);       { clear the rectangle }
    Offset := 2;          { provide default offset }
    Bitmap := TBitmap((Control as TListBox).Items.Objects[Index]);  { get the bitmap }
    if Bitmap <> nil then

begin
        BrushCopy(Bounds(Rect.Left + Offset, Rect.Top, Bitmap.Width, Bitmap.Height),
            Bitmap, Bounds(0, 0, Bitmap.Width, Bitmap.Height), clRed);  {render bitmap}
        Offset := Bitmap.width + 6;    { add four pixels between bitmap and text}
    end;
    TextOut(Rect.Left + Offset, Rect.Top, (Control as TListBox).Items[Index])  { display the text }
    end;
end;

Ako ce itemi da ti budu razlicite velicine onda Style postavi na lbOwnerDrawVariable i na OnMeasureItem kazes koliki ce item biti.
[ icobh @ 21.09.2005. 17:21 ] @
Je li može u Delphi-ju da se koriste OCX kontrole? Ako mogu onda potraži Extended ListView Control.
[ borovac @ 21.09.2005. 20:12 ] @
Valjda se mogu koristit ocx contole.
Vidio sam ja taj primjer iz helpa.(i ne kontam ga :•) )
Ne želim različitu veličinu itema, nego da u jednom itemu ima različitih veličina fontaova.
Možel primjer kako mjenjat boju jednog dijela itema (font color)
[ Srki_82 @ 21.09.2005. 22:22 ] @
Evo ti jednog primera... proizvoljno crtanje itema. Ako ti nesto nije jasno slobodno pitaj.
[ borovac @ 22.09.2005. 16:31 ] @
Svaka čast, mnogo ti hvala, odo sad proučit primjer!
[ Srki_82 @ 22.09.2005. 22:56 ] @
Iz licnog iskustva preporucio bih ti da napravis dll u kojem bi napravio funkcije za iscrtavanje itema i da u opcijama dozvolis korisniku da izabere nacin crtanja koji zeli. Kad god se pojavi potreba za nekim drugacijim iscrtavanjem jednostavno dodas novi dll (plugin) koji sadrzi kod za crtanje i korisnik moze u aplikaciji da izabere i taj nacin.
Ako ne razumes o cemu pricam mogu ti napraviti i takav primer.
[ Nemanja Avramović @ 23.09.2005. 00:00 ] @
napravi :)
[ Srki_82 @ 23.09.2005. 14:21 ] @
Evo, sklepao sam neki mali programcic i dva plugin-a za iscrtavanje itema u listbox-u. Plugin-ovi moraju da senalaze u ExePutanja\PlugIns jer ih tamo program trazi. Prvi plugin iscrtava iteme malo vecim slovima i svako slovo je drugacije boje, a drugi plug in iscrtava u gornjem levom uglu text item-a malo vecim crnim slovima, a u donjem desnom uglu crvenim slovima vreme kada je item zadnji put iscrtan. Eto... moze se napraviti svasta ovako. Ja sam uglavnom u nazivu itema cuvao neki formatiran string ("Text=Moj item", "FontColor=Red", "FontSize=8", "FontStyle=Bold+Italic", "BackgroundColor=White", "SelectedColor=SkyBlue"...) na osnovu kojeg je svaki plugin mogao da uzme potrebne podatke i da ih prikaze kako zeli. Naravno... modatke mozete cuvati i u Object property-u samo je bitno da se zna da obican dll ne moze da poziva funkcije objekata koje mu prosledite. Ako vam je to potrebno onda koristite package dll.
[ borovac @ 28.09.2005. 20:22 ] @
Super ti je ovo.,
al me zanima kako napraviti horizontalni scrollbar.
ja sam to odradio ovako
Code:

if (SearchReslut.ScrollWidth-25<Canvas.TextWidth(Items.Strings[Index])) then SearchReslut.ScrollWidth:=Canvas.TextWidth(Items.Strings[Index])+25;

Ali pošto je u OnDraw eventu štima scrollbar tek kada pređe preko njega šteta.
Pokušat ću da skrolujem čitav listbox.
[ Srki_82 @ 28.09.2005. 22:24 ] @
Ako radis sa plug-inovima mozes napraviti jednu funkciju koja bi vracala zeljenu sirinu listbox-a za odredjeni item. Posaljes joj sve iteme i najveca vrednost koja se vrati to je zeljena vrednost za ScrollWidth. Isto tako mozes uraditi i za obican unit u kojem je OnDrawItem event. Napravi nesto kao IdealItemWidth(ItemIndex: Integer) i neka ti ta funkcija vrati zeljenu sirinu za odredjeni item. To odradis prilikom pokretanja aplikacije za sve iteme i zatim kad god dodas neki nov mozes da proveris samo za njega ili ako neki item izbrises ponovo proveris sve da vidis da li mozda treba da se ScrollWidth malo smanji.