Rysowanie na ListBox'ie

Odpowiedz Nowy wątek
2006-09-14 08:44

Rejestracja: 14 lat temu

Ostatnio: 10 lat temu

0

Moim zamierzęniem jest to by moj ListBox nie był biały a ładnie komponował się w wygląd mojej formy czyli aby jego tło było takie jak rysunek pod nim. Próbowałem przeźroczystości ale to się nie sprawdza bo prześwit mam na wylot mojej formy. Obiło mi sie o uszy że należy narysować na moim ListBox'ie tą część rysunku który jest pod nim, niestety nie wiem jak a tu na forum nie odszukałem nic co mogłoby mi pomów więc zwracam się z tym problemem do Was...
za wszelkie podpowiedzi dziękuje...

Pozostało 580 znaków

ziomal3
2006-09-14 09:03
ziomal3
0

Poszukaj na <url>torry.net</url> na pewno jest taki komponent, a jesli chcesz skorzystac z listboxa to musisz rysowac canvasem

Pozdro

Pozostało 580 znaków

2006-09-14 09:12

Rejestracja: 14 lat temu

Ostatnio: 10 lat temu

0

Właśnie znalazłem to o co michodziło

var
TloListBoxa : TBitMap;
begin
TloListBoxa := TBitMap.Create;
TloListBoxa.LoadFromFile('TloListBox.bmp');
ListBox1.Brush.Bitmap := TloListBoxa;

Ale powstaje kojeny wałek, teraz gdy wyświetlama coś w ListBox'ie to Itemy są na białym Tle i tio nie wygląda, jak można temu zaradzić ??

Pozostało 580 znaków

2006-09-14 09:25

Rejestracja: 14 lat temu

Ostatnio: 10 lat temu

0

OK, już rozwiązałe swój problem a dla Tych którym by się to kiedyś przydało oto co trzeba zrobić:
W OnCreate formy wpisać kod: (jeśli chce się mieć od razu to tło)

var
TloListBoxa : TBitMap;
begin
TloListBoxa := TBitMap.Create;
TloListBoxa.LoadFromFile('TloListBox.bmp');
ListBox1.Brush.Bitmap := TloListBoxa;
end;

nastepnie zaznaczyć Style ListBox'a na lbOwnerDrawFixed a w OnDrawItem wpisać kod:

var
  TloListBoxa: TBitmap;
  Licznik: integer;
begin
  DoubleBuffered:=true;

  with Control as TListBox do
  begin
    Canvas.Brush.Style:=bsClear;
    try
      TloListBoxa:=TBitmap.Create;
      TloListBoxa.LoadFromFile('TloListBox.bmp');
      Canvas.StretchDraw((Control as TListBox).ClientRect, TloListBoxa);
    finally
      TloListBoxa.Free;
    end;

    for Licznik:=0 to Items.Count-1 do
    begin
      Canvas.Font.Color:= Font.Color;
      Canvas.FillRect(Rect);
      Canvas.TextOut(2, 16*Licznik, items[Licznik]);  //odmalowuje wszystkie itemy ;]
    end;

  end;
end;

Pozostało 580 znaków

ŁF
2006-09-14 09:52
ŁF
Moderator

Rejestracja: 17 lat temu

Ostatnio: 3 dni temu

0

cokolwiek mało wydajny ten kod - każde odrysowanie kontrolki wymaga załadowania obrazka z dysku. znacznie lepiej by było załadować go raz, do jakiegoś pola w obiekcie.


Pozostało 580 znaków

2006-09-14 10:00

Rejestracja: 14 lat temu

Ostatnio: 10 lat temu

0

Jesli masz czas i chęci to byłbym wdzięczny za udoskonalenie mojego kodu :-)

Pozostało 580 znaków

Odpowiedz

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0