Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Прозрачность компонента.


Автор: Ak47black 21.9.2006, 20:15
Некак немогу заставить наследник компонента TCustomControl стать прозрачным.
Как мне осушествить  smile 

Автор: Romikgy 21.9.2006, 20:30
onPaint не ? (или WM_PAINT)

Автор: Ak47black 21.9.2006, 20:36
Мне нужно сделать так что-бы компонент был прозначный (тоесть те компоненты которые находяться под ним были видны) кроме тех участков на которых я нарисовал чтото. Это свойство есть у компонента TLabel называется transparent.
Цитата

onPaint не ? (или WM_PAINT) 

И что мне с ними делать ?

Автор: Romikgy 21.9.2006, 20:43
Цитата(Ak47black @  21.9.2006,  19:36 Найти цитируемый пост)
И что мне с ними делать ? 

самому рисовать , то что хочешь

Автор: Ak47black 21.9.2006, 20:44
Цитата(Romikgy @ 21.9.2006,  20:43)
Цитата(Ak47black @  21.9.2006,  19:36 Найти цитируемый пост)
И что мне с ними делать ? 

самому рисовать , то что хочешь

Не рисовать что позади кнопки было ,это всеровно что поезд обгонять.  smile 

Автор: Romikgy 21.9.2006, 20:46
Цитата(Ak47black @  21.9.2006,  19:44 Найти цитируемый пост)
Не рисовать что позади кнопки было ,это всеровно что поезд обгонять.

У каждого своя философия...

PS я просто подсказал вариант , как сделать то , что ты хочешь, если те это не нравится, это не мои траблы, если кто то предложит более корректное или правильно решение , молодцы и хвала им!

Автор: Ak47black 21.9.2006, 20:50
Цитата(Romikgy @ 21.9.2006,  20:46)
Цитата(Ak47black @  21.9.2006,  19:44 Найти цитируемый пост)
Не рисовать что позади кнопки было ,это всеровно что поезд обгонять.

У каждого своя философия...

Romikgy Я не так понял тебя (sorry).
Мож кто-нибудь предложит что-нибудь 
находил я тут http://forum.vingrad.ru/index.php?showtopic=3947&hl=tcustomcontrol,and,%D0%BF%D1%80%D0%BE%D0%B7%D1%80%D0%B0%D1%87 но слишком код грамозкий.

Автор: drkot 22.9.2006, 09:56
как я понял (если по аналогии с label) то интересует чтобы определенный цвет стал прозрачным.
или интерезует переменныя прозрачность (с градиентом)?

В любом случае: создается битмап на нем рисуется все что должен отрисовать компонент, создается еще один битмап(маска), на нем отрисовывается маска, потом копируеш один битмап на другой и полученое изображение выводиш на канвас компонента.

По этой сжеме удавалось получить достаточно сложные изображения, только при большом количестве таких контролов тормознутость проги возрастет.

Автор: Ak47black 22.9.2006, 19:45
 smile  У меня проблеммы с этим. Не разу такого неделал 
Код

procedure DrawTransparentBmp(Cnv: TCanvas; x,y: Integer; Bmp: TBitmap; clTransparent: TColor); 

из drkb23.chm неподходит
Можите ктонибудь подкинуть наброски.
Заранье спасиба.

Автор: Ak47black 22.9.2006, 21:18
Решил другим способом
Если комунибудь нужно будет то вот код
Код

procedure DrawParentImage(Control: TControl; Dest: TCanvas);
var
  SaveIndex: Integer;
  DC: HDC;
  Position: TPoint;
begin
  with Control do
  begin
    if Parent = nil then
      Exit;
    DC := Dest.Handle;
    SaveIndex := SaveDC(DC);
    GetViewportOrgEx(DC, Position);
    SetViewportOrgEx(DC, Position.X - Left, Position.Y - Top, nil);
    IntersectClipRect(DC, 0, 0, Parent.ClientWidth, Parent.ClientHeight);
    Parent.Perform(WM_ERASEBKGND, DC, 0);
    Parent.Perform(WM_PAINT, DC, 0);
    RestoreDC(DC, SaveIndex);
  end;
end;

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)