przezroczysty listBox

AklimX
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 1218
0

zrobiłem tak jak jest w http://4programmers.net/faq.php?id=145 i nie otrzymałem przezroczystego tła (linia Brush.Style := bsClear; // tło na przezroczyste ) co powinienem zrobić ??

/// dopisane
dokładnie chodzi oto, że przez elementy listBoxa (items) widać to co jest na formatce (konkretnie label);

Transparent Components currently includes two components: Memo and Edit box.

jakieś pomysły ?? inne niż grzebanie w kodzie ??

LukaStrz
  • Rejestracja: dni
  • Ostatnio: dni
0

Na torrym jest pakiet Transparent Components, ale nie wiem o do dokłądnie Ci chodzi :]

.::CYMES::.
  • Rejestracja: dni
  • Ostatnio: dni
0

Tu chodzi o tlo pędzla a nie tlo Listbox-a!!!

ES
  • Rejestracja: dni
  • Ostatnio: dni
0

Precyzyjniej : musisz narysować na ListBoxie (piksel po pikselu) to co znajduje się za nim. Pobierasz wartość koloru z obiektu będącego za nim i przypisujesz ją do odpowiedniego piksela w ListBox. Rysujesz i pobierasz piksele poprzez klasę Canvas. Proces rysowania musisz dodać do zdarzenia OnPaint. Jak przerysujesz tło musisz odrysować na nim elementy ListBoxa (Items - jak są to zwykłe napisy to proponuje użyć TextOut w Canvasie...)

Zobacz też metodę ScanLine na wypadek gdyby ci obraz skakał za mocno.. :p Jest ona zdecydowanie szybsza..

AklimX
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 1218
0

Precyzyjniej : musisz narysować na ListBoxie (piksel po pikselu) to co znajduje się za nim. Pobierasz wartość koloru z obiektu będącego za nim i przypisujesz ją do odpowiedniego piksela w ListBox. Rysujesz i pobierasz piksele poprzez klasę Canvas. Proces rysowania musisz dodać do zdarzenia OnPaint. Jak przerysujesz tło musisz odrysować na nim elementy ListBoxa (Items - jak są to zwykłe napisy to proponuje użyć TextOut w Canvasie...)

Zobacz też metodę ScanLine na wypadek gdyby ci obraz skakał za mocno.. :p Jest ona zdecydowanie szybsza..

Kopiuj
procedure TForm1.FormPaint(Sender: TObject);
var i,j:byte;
begin
  for i:=0 to 150 do
    for j:=0 to 150 do
      ListBox1.Canvas.Pixels[i,j]:=form1.Canvas.Pixels[ListBox1.Left+i, ListBox1.Top+j];
end;

w efekcie otrzymuję czarny kwadracik, a liczyłem na kwadracik w kolorze formy (clBtnFace). Będe wdzięczny za kodzik. Wspome jeszcze, że pod tym listboxem ma być label. Jeżeli nie cały kodzik, to chociaż jak zrobić zrzut formatki w miejscu pod listbox'em (metoda inna niż przesuwanie listboxa, robienie zrzutu ekranu i wklajanie, bo to wydaje się być powolne)

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.