Modyfikacja wyglądu Treeview

0

Witam

Prosiłbym bardzo o pomoc w wyjaśnieniu kilku kwestii odnośnie rysowania po Treeview:

  1. jak zastąpić standardowe przyciski (chodzi o + i -) własnymi obrazkami (nie rysowanymi w programie a np ikoną z pliku)
  2. jak pomalować zaznaczony element gradientowo
  3. jak narysować tło gradientowe

Przejrzałem demo w delphi, jednak przedstawione tam rysowanie tych "+" i "-" nie wygląda za ładnie, zaznaczenie to tylko jeden kolor. A jeżeli chodzi o tło, no to myślałem o bitmapie, ale też zastanawiam się czy nie da się tego po prostu narysować. Google milczy na ten temat.
Z góry proszę również o nie proponowanie Virtual TreeView, bo mimo iż to świetny komponent to na chwilę obecną przerasta on moje możliwości

0

jezeli chodzi o pkt 1 to mozesz w tym celu wykorzystac wlasciwosc stateimages treeviewa i odpowiednio zmieniac przy rozwijaniu i zwijaniu galezi.
Natomiast jesli chodzi od 2 pozostale punkty to nie wiem jak to zrobic. Moze ktorys z madrzejszych forumowych kolegow bedzie wiedzial? Sam jestem tego ciekaw :-)

0

Podepnę się, żeby nie tworzyć noowego tematu. Ja właśnie chciałem zapytać czy wie ktoś jak w Virtual Treeview zrobić gradientowe, albo obrazkowe zaznaczenie noda?

0

tu masz kod jak namalowac gradientowe tlo na bitmapie:

procedure DrawVis(Col1, Col2: TColor; Bmp: TBitmap);
type
  PixArray = array [1..3] of Byte;
var
 h, w: Integer;
 y: Real;
 p: ^PixArray;
begin
 Bmp.PixelFormat := pf24Bit;

 for h := 0 to Bmp.Height-1 do
  begin
   p := Bmp.ScanLine[h];
   for w := 0 to Bmp.Width-1 do
     begin
      y := h / Bmp.Height;
      p^[1] := Round(GetBvalue(Col1)*(1-y)) + Round(GetBvalue(Col2)*y);
      p^[2] := Round(GetGvalue(Col1)*(1-y)) + Round(GetGvalue(Col2)*y);
      p^[3] := Round(GetRvalue(Col1)*(1-y)) + Round(GetRvalue(Col2)*y);
      Inc(p);
     end;
  end;
end;

potem tylko bitmape rysujes TreeView pod zaznaczeniem i tyle tak samo mozesz rysowac po canvasie calego TreeView

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