Ĺ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
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