Может ли TCanvas быть прозрачным?
От: Аноним  
Дата: 20.08.05 10:34
Оценка:
Вот такой вопросик!
Объясняю ситуацию. Есть объектик, передвигающийся по форме. На его канве нужно кое-что намалевать, но при всем при том содержимое формы, находящееся за объектом, должно быть видно. Можно ли как-то это сделать или придется TImage как-то к нему цеплять?
Re: Может ли TCanvas быть прозрачным?
От: alive Россия  
Дата: 21.08.05 05:51
Оценка:
Здравствуйте, <Аноним>, Вы писали:

А>Вот такой вопросик!

А>Объясняю ситуацию. Есть объектик, передвигающийся по форме. На его канве нужно кое-что намалевать, но при всем при том содержимое формы, находящееся за объектом, должно быть видно. Можно ли как-то это сделать или придется TImage как-то к нему цеплять?

Canvas.Brush.Style:= bsClear ?
...<< RSDN@Home 1.1.4 beta 7 rev. 500>>
...Foobar {Владимир Кузьмин и группа "Динамик" — [Возьми с собой #11] Кикимора}
Keep yourself alive
Re[2]: Может ли TCanvas быть прозрачным?
От: Аноним  
Дата: 21.08.05 17:29
Оценка:
A>Canvas.Brush.Style:= bsClear ?
Нет, это не помогает, т.к. у меня сзади первого объекта (с канвой) есть еще один объект, который и должен быть виден.
Re: Может ли TCanvas быть прозрачным?
От: dibil  
Дата: 22.08.05 06:34
Оценка: :)
Здравствуйте, Аноним, Вы писали:

А>Вот такой вопросик!

А>Объясняю ситуацию. Есть объектик, передвигающийся по форме. На его канве нужно кое-что намалевать, но при всем при том содержимое формы, находящееся за объектом, должно быть видно. Можно ли как-то это сделать или придется TImage как-то к нему цеплять?

А объект, что сам прозрачный.
Canvas->Brush->Color=NULL;
Re[2]: Может ли TCanvas быть прозрачным?
От: Аноним  
Дата: 22.08.05 17:52
Оценка:
D>А объект, что сам прозрачный.
D>Canvas->Brush->Color=NULL;
Не помогает. Пишет, что не может конвертировать тип Variant в Integer.
На объекте должна кое-что нарисовано, а фон должен быть прозрачным.
Может есть какая АПИ-функция для этого или еще что-нибудь.
Re[3]: Может ли TCanvas быть прозрачным?
От: alive Россия  
Дата: 23.08.05 06:21
Оценка:
Здравствуйте, <Аноним>, Вы писали:

A>>Canvas.Brush.Style:= bsClear ?

А>Нет, это не помогает, т.к. у меня сзади первого объекта (с канвой) есть еще один объект, который и должен быть виден.

Можно тогда подробней, что это за объект, который таскается над формой?
...<< RSDN@Home 1.1.4 beta 7 rev. 500>>
...Foobar {Павел Кашин — [По небесным грядкам] Русская}
Keep yourself alive
Re[3]: Может ли TCanvas быть прозрачным?
От: wildwind Россия  
Дата: 23.08.05 08:16
Оценка:
Здравствуйте, Аноним, Вы писали:

A>>Canvas.Brush.Style:= bsClear ?

А>Нет, это не помогает, т.к. у меня сзади первого объекта (с канвой) есть еще один объект, который и должен быть виден.

А Canvas-то чей?
Re[4]: Может ли TCanvas быть прозрачным?
От: Аноним  
Дата: 23.08.05 09:23
Оценка:
A>Можно тогда подробней, что это за объект, который таскается над формой?
Есть некий объект TImageBox. На нем нарисована рамка с возможностью расширения/сжатия и поворота, а также по центру — буква. Данный объект наследуется от TCustomControl. Из свойств "для рисования" — только канва. Двигается он над картинкой с фоном. Вот и нужно, чтобы было видно за ним фон.
Re[5]: Может ли TCanvas быть прозрачным?
От: alive Россия  
Дата: 23.08.05 11:19
Оценка:
Здравствуйте, <Аноним>, Вы писали:

А>Есть некий объект TImageBox. На нем нарисована рамка с возможностью расширения/сжатия и поворота, а также по центру — буква. Данный объект наследуется от TCustomControl. Из свойств "для рисования" — только канва. Двигается он над картинкой с фоном. Вот и нужно, чтобы было видно за ним фон.


А что обязательно использовать TImageBox? Moжет наследоваться от TGraphicControl и там в Paint рисовать и рамку и букву?
А для того чтобы корректно отрисовывалось при перемещении, мне кажется, нужно будет рисовать на DC экрана.
...<< RSDN@Home 1.1.4 beta 7 rev. 500>>
...Foobar {Павел Кашин — [Герой] Феникс}
Keep yourself alive
Re[5]: Может ли TCanvas быть прозрачным?
От: Danchik Украина  
Дата: 23.08.05 12:23
Оценка:
Здравствуйте, Аноним, Вы писали:

A>>Можно тогда подробней, что это за объект, который таскается над формой?

А>Есть некий объект TImageBox. На нем нарисована рамка с возможностью расширения/сжатия и поворота, а также по центру — буква. Данный объект наследуется от TCustomControl. Из свойств "для рисования" — только канва. Двигается он над картинкой с фоном. Вот и нужно, чтобы было видно за ним фон.

Читаю эти посты и просто смешно становится, до чего вы наивны.
Прозрачная канва, хехе

В нормальных редакторах никакие TContorl, TWinControl не используются для такого. Просто намекаю на плохой дизайн

Но и для вашей конкретной задачи есть три решения:
1. Использовать не один TCustomControl, a восемь. Тоесть рамочнку рисовать из восьми кубиков/контролов (как в дизайнере форм Delphi)
2. Использовать регионы. Тоесть сделать окно дырявым. Учти в этом случае придется постоянно перестраивать регионы при изменении размера окна.

Читай MSDN:

SetWindowRgn Sets the window region of a window.

CombineRgn Combines two regions and stores the result in a third region.
CreateEllipticRgn Creates an elliptical region.
CreateEllipticRgnIndirect Creates an elliptical region.
CreatePolygonRgn Creates a polygonal region.
CreatePolyPolygonRgn Creates a region consisting of a series of polygons.
CreateRectRgn Creates a rectangular region.
CreateRectRgnIndirect Creates a rectangular region.
CreateRoundRectRgn Creates a rectangular region with rounded corners.
EqualRgn Checks the two specified regions to determine whether they are identical.
ExtCreateRegion Creates a region from the specified region and transformation data.
FillRgn Fills a region by using the specified brush.
FrameRgn Draws a border around the specified region by using the specified brush.
GetPolyFillMode Retrieves the current polygon fill mode.
GetRegionData Fills the specified buffer with data describing a region.
GetRgnBox Retrieves the bounding rectangle of the specified region.
InvertRgn Inverts the colors in the specified region.
OffsetRgn Moves a region by the specified offsets.
PaintRgn Paints the specified region by using the brush currently selected into the device context.
PtInRegion Determines whether the specified point is inside the specified region.
RectInRegion Determines whether any part of the specified rectangle is within the boundaries of a region.
SetPolyFillMode Sets the polygon fill mode for functions that fill polygons.
SetRectRgn Converts a region into a rectangular region with the specified coordinates.


3. Использовать Layered окна (минимум Windows 2000). Читай MSDN: SetLayeredWindowAttributes
Для того что бы создать Layered окно, необходимо перекрыть CreateParams:
procedure TMyCustomControl.CreateParams(var Params: TCreateParams);
begin
  inherited;
  with Params do
    ExStyle := WS_EX_LAYERED
end;

В этом варианте можно добиться красотищи: полупрозрачность, тень бросить и все такое

Вот в общем и все. Надеюсь что какой то вариант да и подойдет
Re[6]: Может ли TCanvas быть прозрачным?
От: Аноним  
Дата: 24.08.05 21:15
Оценка:
D>Читаю эти посты и просто смешно становится, до чего вы наивны.
D>Прозрачная канва, хехе

D>В нормальных редакторах никакие TContorl, TWinControl не используются для такого. Просто намекаю на плохой дизайн


D>Но и для вашей конкретной задачи есть три решения:

D>1. Использовать не один TCustomControl, a восемь. Тоесть рамочнку рисовать из восьми кубиков/контролов (как в дизайнере форм Delphi)
D>2. Использовать регионы. Тоесть сделать окно дырявым. Учти в этом случае придется постоянно перестраивать регионы при изменении размера окна.

D>Читай MSDN:

D>

D>SetWindowRgn Sets the window region of a window.

D>CombineRgn Combines two regions and stores the result in a third region.
D>CreateEllipticRgn Creates an elliptical region.
D>CreateEllipticRgnIndirect Creates an elliptical region.
D>CreatePolygonRgn Creates a polygonal region.
D>CreatePolyPolygonRgn Creates a region consisting of a series of polygons.
D>CreateRectRgn Creates a rectangular region.
D>CreateRectRgnIndirect Creates a rectangular region.
D>CreateRoundRectRgn Creates a rectangular region with rounded corners.
D>EqualRgn Checks the two specified regions to determine whether they are identical.
D>ExtCreateRegion Creates a region from the specified region and transformation data.
D>FillRgn Fills a region by using the specified brush.
D>FrameRgn Draws a border around the specified region by using the specified brush.
D>GetPolyFillMode Retrieves the current polygon fill mode.
D>GetRegionData Fills the specified buffer with data describing a region.
D>GetRgnBox Retrieves the bounding rectangle of the specified region.
D>InvertRgn Inverts the colors in the specified region.
D>OffsetRgn Moves a region by the specified offsets.
D>PaintRgn Paints the specified region by using the brush currently selected into the device context.
D>PtInRegion Determines whether the specified point is inside the specified region.
D>RectInRegion Determines whether any part of the specified rectangle is within the boundaries of a region.
D>SetPolyFillMode Sets the polygon fill mode for functions that fill polygons.
D>SetRectRgn Converts a region into a rectangular region with the specified coordinates.


D>3. Использовать Layered окна (минимум Windows 2000). Читай MSDN: SetLayeredWindowAttributes

D>Для того что бы создать Layered окно, необходимо перекрыть CreateParams:
D>
D>procedure TMyCustomControl.CreateParams(var Params: TCreateParams);
D>begin
D>  inherited;
D>  with Params do
D>    ExStyle := WS_EX_LAYERED
D>end;
D>

D>В этом варианте можно добиться красотищи: полупрозрачность, тень бросить и все такое

D>Вот в общем и все. Надеюсь что какой то вариант да и подойдет


Всем спасибо огромное за помощь и подсказки! Я разобрался! Данчик, никакие твои варианты не подошли, хотя они очень даже неплохие. Просто копироваля ту часть фонового изображения, над которым висит рамка, на тот самый злополучный TCanvas. и вообщем-то все!
Re[2]: Может ли TCanvas быть прозрачным?
От: LeonidV Ниоткуда http://vygovskiy.com
Дата: 30.08.05 13:14
Оценка:
Здравствуйте, dibil, Вы писали:

D>Здравствуйте, Аноним, Вы писали:


А>>Вот такой вопросик!

А>>Объясняю ситуацию. Есть объектик, передвигающийся по форме. На его канве нужно кое-что намалевать, но при всем при том содержимое формы, находящееся за объектом, должно быть видно. Можно ли как-то это сделать или придется TImage как-то к нему цеплять?

Зачем сразу TImage? Думаю, что TBitmap хватит.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
http://jvmmemory.com — простой способ настройки JVM
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.