Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

TListBox drawing

[es] :: Pascal / Delphi / Kylix :: TListBox drawing

[ Pregleda: 3089 | Odgovora: 10 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

borovac
127.0.0.1

Član broj: 29278
Poruke: 220
*.dlp57.bih.net.ba.



Profil

icon TListBox drawing21.09.2005. u 16:36 - pre 192 meseci
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
 
Odgovor na temu

Srki_82
Srdjan Tot
Me @ My Home
Ljubljana

Član broj: 28226
Poruke: 1403
82.208.201.*

ICQ: 246436949


+10 Profil

icon Re: TListBox drawing21.09.2005. u 17:18 - pre 192 meseci
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.
 
Odgovor na temu

icobh
Igor Pejašinović
Network Admin
Navigo SC d.o.o.
Banja Luka

Član broj: 18738
Poruke: 1319
*.inecco.net.

Sajt: www.nsc.ba


+4 Profil

icon Re: TListBox drawing21.09.2005. u 17:21 - pre 192 meseci
Je li može u Delphi-ju da se koriste OCX kontrole? Ako mogu onda potraži Extended ListView Control.
I ♥ ♀

Ovaj post je zlata vrijedan!
 
Odgovor na temu

borovac
127.0.0.1

Član broj: 29278
Poruke: 220
*.dlp341.bih.net.ba.



Profil

icon Re: TListBox drawing21.09.2005. u 20:12 - pre 192 meseci
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)
 
Odgovor na temu

Srki_82
Srdjan Tot
Me @ My Home
Ljubljana

Član broj: 28226
Poruke: 1403
82.208.201.*

ICQ: 246436949


+10 Profil

icon Re: TListBox drawing21.09.2005. u 22:22 - pre 192 meseci
Evo ti jednog primera... proizvoljno crtanje itema. Ako ti nesto nije jasno slobodno pitaj.
Prikačeni fajlovi
 
Odgovor na temu

borovac
127.0.0.1

Član broj: 29278
Poruke: 220
*.dlp79.bih.net.ba.



Profil

icon Re: TListBox drawing22.09.2005. u 16:31 - pre 192 meseci
Svaka čast, mnogo ti hvala, odo sad proučit primjer!
 
Odgovor na temu

Srki_82
Srdjan Tot
Me @ My Home
Ljubljana

Član broj: 28226
Poruke: 1403
82.208.201.*

ICQ: 246436949


+10 Profil

icon Re: TListBox drawing22.09.2005. u 22:56 - pre 192 meseci
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.
 
Odgovor na temu

Nemanja Avramović
Software architect
Tap medical
Beograd, Srbija

Član broj: 32202
Poruke: 4383
*.yu1.net.

Sajt: https://avramovic.info


+45 Profil

icon Re: TListBox drawing23.09.2005. u 00:00 - pre 192 meseci
napravi :)
Laravel Srbija.

[NE PRUŽAM PODRŠKU ZA PHP PREKO PRIVATNIH PORUKA!]
 
Odgovor na temu

Srki_82
Srdjan Tot
Me @ My Home
Ljubljana

Član broj: 28226
Poruke: 1403
82.208.201.*

ICQ: 246436949


+10 Profil

icon Re: TListBox drawing23.09.2005. u 14:21 - pre 192 meseci
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.
Prikačeni fajlovi
 
Odgovor na temu

borovac
127.0.0.1

Član broj: 29278
Poruke: 220
*.dlp145.bih.net.ba.



Profil

icon Re: TListBox drawing28.09.2005. u 20:22 - pre 192 meseci
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.
 
Odgovor na temu

Srki_82
Srdjan Tot
Me @ My Home
Ljubljana

Član broj: 28226
Poruke: 1403
82.208.201.*

ICQ: 246436949


+10 Profil

icon Re: TListBox drawing28.09.2005. u 22:24 - pre 192 meseci
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.
 
Odgovor na temu

[es] :: Pascal / Delphi / Kylix :: TListBox drawing

[ Pregleda: 3089 | Odgovora: 10 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.