ďťż

Ładny brzuch

Czy w ListBox można wyślietlić ikonki z ImageList1:? Jeśli Tak to jak:?



mozna, ale trzeba troche kodu napisac, glownie wlasna obsluge rysowania listboxa. nie mam pod reka delphi ale w helpie w opisie zdarzenia OnDrawItem powinien byc przyklad obslugi [w tym rowniez dodawania jakiegos obrazka].

pozdrawiam
pepsi^no1

Niby coś znalazłem w helpie lecz dalej nie mogę sobie poradzić:oops:

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.Create;    ImageList1.GetBitmap(Index,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;    Bitmap.Free;    TextOut(Rect.Left + Offset, Rect.Top+1, (Control as TListBox).Items[Index])  { display the text }    end; end;
no i ListBox1 Style na lbOwnerDrawFixed of coz :chytry:

pozdrawiam
pepsi^no1



Niewiem dlaczego ale nie działa :cry: Program sie odpala ale ikonek nie wyświetla.

eh...
1. dales w listbox Style na lbOwnerDrawFixed?
2. czy w listbox w items sa jakies wartosci?
wiecej sie nie da skopac...

pozdrawiam
pepsi^no1

1. Zmieniłem
2. Są ale nie są one ładowanie odrazu tylko trzeba otworzeć jakiś plik.

Ja znalazłem gotowy komponencik do wyświetlania ikonek w ListBox-ie (chyba na Torry.net albo 4programmers.net). Ze zwykłym listboxem jest dużo zabawy. No ale jeżeli nie chcesz używać gotowych komponentów to życze powodzenia :D

m@il: ali88@tlen.pl
GG: 2083160

cytat:strefacst napisał:

1. Zmieniłem
2. Są ale nie są one ładowanie odrazu tylko trzeba otworzeć jakiś plik.

1) Zmieniasz własciwość ListBoksa Style na lbOwnerDrawFixed
2) Piszesz procedure rysujaca zawartosc ListBoksa:

procedure TForm1.ListBox1DrawItem(Control: TWinControl; Index: Integer; Rect: TRect; State: TOwnerDrawState);
begin
with ListBox1.Canvas do
begin
Brush.Style := bsSolid;
Font := ListBox1.Font;
if odSelected in State then
begin
// wlasciwosci, jezeli element jest zaznaczony (podswietlony)
Brush.Color := clHighlight;
Font.Color := clHiglightText;
end else
begin
// wlasciwosci, jezeli element nie jest zaznaczony
Brush.Color := clWindow;
Font.Color := clWindowText;
end;
//zamalowanie tla
FillRect(Rect);
Brush.Style := bsClear;
//wyrysowanie obrazka z ImageList1 (ostatnie 0 to indeks obrazka)
ImageList1.Draw(ListBox1.Canvas, Rect.Left + 2, Rect.Top + 1, 0);
//wypisanie tekstu (20 = 16 + 4 odstepu, zakladam,
//ze w ImageList1 sa obrazki 16x16 pikseli)
TextOut(Rect.Left + 20, Rect.Top + 1, ListBox1.Items[Index]);
end;
end;

Oczywiscie, wartosci kolorow Brush.Color i Font.Color mozesz dowolnie zmienic, ale w przykladzie powyzej sa stosowane standardowe, wziete z systemu i chyba tego nalezaloby sie trzymac :o)

Pozdrawiam!

Kokosz

Może to Cię zainteresuje:

http://www.delphiqa....face/qa012.html

Perpetum
_________________________________________________________________
Wiedz, że odpowiadając na moje (pewnie głupie) pytania "ratujesz" mi życie !!! :-)

cytat:Może to Cię zainteresuje:

http://www.delphiqa....face/qa012.html

LoadFromFile() przy każdym rysowaniu itema?? Nie jest to zbyt optymalne rozwiązanie...

Wejdź tu i ściągnij MXPack + MXPackDemo. Zobacz demoko z MXListBox'em.
http://stud.ics.p.lo...php?id=download
Aha.. paczka nie działa na D5, więc mam nadzieje, że masz wyższe.

http://www.planeta-delphi.com

Jakoś dalej mi to nie działa :cry: Może wiecie dokładniej gdzie jest jakiś komponent do tego ja szukałem na torry.net i na 4programmers.net lecz nie moge znaleźć.

Przecież podałem ci linka do właśnie takiego komponentu. No chyba, że masz Delphi 5, lub starsze. Ąciągnij MXPack, zainstaluj i pobaw się MXListBox'em. Jak nie wiesz jak to obsłużyć to demo też jest na stronie.
Poza tym, sposoby podane przez poprzedników są dobre, ale widocznie nie porafisz ich zastosować.

http://www.planeta-delphi.com

Daję kod:
Var
NetUsers1.GetUserList;
Items := TMXListItem.Create(Self);
with Items do
begin
Text := NetUsers1.List.Create.GetText;
ImageIndex := Random(5);
Checked := False;
ShowStatus := False;
Enabled := True;
Status.Progress := Random(101);
end;
MXListBox1.Add(Items);

Noi całą listę dodaje mi do jednego Itema a jak zrobić ze każdą linikę ładował do osobnego Itema aha posługuję sie komponentem MXListBox1 z pakietu MXPack.

Co to jest -> NetUsers1.GetUserList ?
Co to jest -> NetUsers1.List.Create.GetText ?

Przypuszczam, że GetText zwraca listę stringów. W pole Text musisz wstawić tekst jednego Itema. Nie możesz wstawiać listy stringów, bo i tak doda jako jeden Item. Jesli chcesz dodać wiecej to zrób to w pętli, tworząc za każdym razem nowy Item i wypełniając go.

Masz takie metody dodawania itema, do wyboru:

Item := TMXListItem.Create(Self); // tworzsz nowego itema
with Items do
begin
// ustawiasz pola itema
end;
MXListBox1.Add(Items); // dodajesz

albo:

MXListBox1.Add(Tekst, Index_obrazka, Wyswietlac_status, Zaznaczony, Wlaczony, Objekt);

lub:
MXListBox1.AddItem(Tekst, Obiekt_związany_z_itemem);

Nie ma hurtowgo dodawania.

http://www.planeta-delphi.com

Niestety dalej nie wiem jak sobie z tym poradzić. Pobieram liste komputerów sieci lokalnej poleceniem:

NetUsers1.GetUserList;

i nie wiem jak zrobić zeby każda nazwa ładowała sie do osobnego Itema. W zwykłym ListBox to wystarczyło:
ListBox1.Items.AddStrings(NetUsers1.List.Create);

A jak to zrobić w MXListBox:?

Przykład z listboxem:

var  Idx: Integer;  Item: TMXListItem; begin  for Idx := 0 to ListBox1.Items.Count -1 do  begin      Item := TMXListItem.Create(nil);      Item.Text := ListBox1.Items[Idx];      // i takie tam...      MXListBox1.Add(Item);  end; end;

Jak z tego nie zrobisz to chyba zwątpie w polskich programistów...

http://www.planeta-delphi.com

I jeszcze jedno jak zrobić takie coś że
showmessage(zawartośćZaznaczonegoItemaMXListBoxa + memo1.text);
noi co ma być w "zawartośćZaznaczonegoItemaMXListBoxa"
Najlepiej żeby wyświetlało zawartość zaznaczonego itema przez CheckBoxes w MXListBoxa.

Lecz narazie nie mogę sobie poradzić jeszcze ze wcześniejszym

Z wyświetleniem listy bez problemu sobie poradziłem:cheesy: lecz jak zrobić to wcześniej:?

Sciągnij ponownie MXPack. Dodałem nowa funkcję AddStrings().
Wystarczy, że teraz wpiszesz:
MXListBox.AddStrings(Zmienna_typu_TStrings);
...i odrazu doda ci wszystkie Itemy. Pozostałe argumenty procedury są zbędne, chyba, że chcesz to je podaj.

http://www.planeta-delphi.com

Dodając kodem
MXListBox.AddStrings(Zmienna_typu_TStrings);
lista dodaje sie bez problemu lecz nie ma ikonek. Jak je dodać razem z listą:?

Litości!
Człowieku... nie chce być nieuprzejmy, ale to już przesada. Miałeś tyle przykładów, a do tego demko, że musisz być na prawdę odporny na wszelkie tłumaczenia. Zajmij się czymś na twoim poziomie...

http://www.planeta-delphi.com

  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • zsf.htw.pl
  •