[delphi] Transparent w TLabel

0

Witam.

Czy ktoś może wie jak wygląda funkcja odpowiadająca za przezroczystość TLabel'a.
Na początku myślałem, że może pobiera sobie Canvas'a z formy, a potem sobie rysuje tekst, ale doszedłem do wniosku, że tak chyba nie jest: powiedzmy, że TLabel "leży" na PaintBox'ie to TLabel nie "przejmuje" koloru formy (jego tła) tylko pod tło pobiera sobie to co jest w PaintBox. Poza tym np. jeżeli moja kontrolka by nie leżała na formi tylko na jakim komponencie który ma właściwość parent, to wtedy przezroczystość TLabela by źle działała. Problem mam z tym na tyle duży, że jest mi to potrzebne do moich komponentów, a właściwie chcę tak przerobić np. CheckBox'a aby właśnie obsługiwał efekt przeźroczystości. Tylko proszę nie pisać, że po co masz pisać taki komponent skoro już taki jest na torrym - chcę sam wiedzieć jak mam takie rzeczy na przyszłość robić

Pozdrawiam [soczek]
PcSA ;)

0

Spróbuj zajrzeć do pliku stdctrls.pas i odszukać TcustomLabel.Paint - tam powinno to być.

0
berl napisał(a)

Spróbuj zajrzeć do pliku stdctrls.pas i odszukać TcustomLabel.Paint - tam powinno to być.

Niestety nie mam tego pliku, bo mam tylko Delphi 7 PE

0
-=PcSA=- napisał(a)

Na początku myślałem, że może pobiera sobie Canvas'a z formy, a potem sobie rysuje tekst, ale doszedłem do wniosku, że tak chyba nie jest

Dobrze myślałeś ale doszedłeś do złych wniosków ;) TLabel jest potomkiem TGraphicControl. Dodatkowo w pomocy jest napisane:

TGraphicControl is the base class for all nonwindowed custom controls.

Więc jeśli kontrolka nie jest oknem to korzysta z kontekstu (TCanvas) okna właściciela.

0

Więc prawdopodobnie korzysta z BrushCopy...

0

Tak sobie zajrzalem i sie zdziwilem (D3)

....
    if not Transparent then
    begin
      Brush.Color := Self.Color;
      Brush.Style := bsSolid;
      FillRect(ClientRect);
    end;
    Brush.Style := bsClear;
.....

Mozna tez do tekstu SetBKMode z TRANSPARENT

0
   if not Transparent then
    begin
      Brush.Color := Self.Color;
      Brush.Style := bsSolid;
      FillRect(ClientRect);
    end;
    Brush.Style := bsClear;

To się w Borlandzie popisali - ja myślałem, że to jakiś wypasiony kodzik, a to takie coś :D Mniejsza o to.
Znalazłem w sieci jak robić przezroczyste komponenty przy użyciu parametrów: może komś się kiedyś przyda: http://www.nsonic.de/Delphi/txt_WIS00175.htm

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