Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как размножить рисунок на TabSheet? [D5, D6, Win95/98, WinME]


LAndrew ©   (2002-09-28 23:22:00) 

Нужно всего лишь размножить рисунок на вкладке PageControl. У TabSheet"a Canvas"a нет, т.е. тот способ, что подходит для формы, для него не подходит. И еще - как сделать расположенные на вкладках панели и GroupBox"ы были прозрачными (чтобы не закрывали фоновый рисунок). Использовать другие компоненты или делать свой (что вполне реально) не хочется, ибо уже вся прога написана, дизайн сделан - не хочется компоненты вырезать-вставлять.


turusov   (2002-09-30 10:13:00) [1]

Выдержка из личного ( потомок TImage)
procedure TNsImage.Paint;
var
Save: Boolean;
I, J: integer;
R: TRect;
begin
if csDesigning in ComponentState then
with inherited Canvas do begin
Pen.Style := psDash;
Brush.Style := bsClear;
Rectangle(0, 0, Width, Height);
end;

if (Picture.Graphic <> nil) AND (ImageWay = iwPicture) then begin
Save := FDrawing;
FDrawing := True;
try
R:= DestRect;
with inherited Canvas do begin
if FDuplicate then begin
for I := 0 to (R.Right - R.Left) div Picture.Width do
for J := 0 to (R.Bottom - R.Top) div Picture.Height do
Draw(I * Picture.Width, J * Picture.Height, Picture.Graphic);

end
else
StretchDraw(R, Picture.Graphic);
end;//with
finally
FDrawing := Save;
end;
end//if
else
if ImageWay = iwGradient then begin
Save := FDrawing;
FDrawing := True;
try
R:= DestRect;
GradientFillRectStyle(inherited Canvas, FNsGradientImage.GradientStyle, R, FNsGradientImage.StartColor,
FNsGradientImage.EndColor, FNsGradientImage.Direction, byte(FNsGradientImage.Colors));
finally
FDrawing := Save;
end;
end;//if iwPen
end;


Song   (2002-09-29 08:47:00) [2]

Надо перехватывать onPaint


LAndrew   (2002-09-29 00:01:00) [3]

Да! Это работает! Только вот когда переключаю на другую вкладку (2-ую), а потом возвращаюсь на 1-ую, фон (рисунок) на первой пропадает, если же рисование прописать в событии OnShow, то TabSheet заполняется рисунком не сразу, а за какое-то время (секунды за 1-2 на моем компе), что не очень-то удобно (и красиво). Существует ли какой-либо другой способ? И можно ли как-то панели и (о!) сам TabSheet и PageControl сделать прозрачным, может быть каким-нибудь аналогичным способом. Заранее огромное спасибо.


Song   (2002-09-28 23:45:00) [4]

With TCanvas.Create Do
try
Handle:=GetDC(TabSheet1.Handle);
// Отсюда доступны все методы класса TCanvas для TabSheet
finally
Free;
end;


LAndrew   (2002-09-28 23:34:00) [5]

фон нужно сделать из рисунка, т.е. заполнить рисунком вкладку. А насчет "просто его создав с дискриптором, получаемым по GetDC()": можно пример, а то я что-то с этим не знаком? Спасибо за ответ.


Song   (2002-09-28 23:30:00) [6]

Т.е. размножить?
У Вас есть рисунок и Вам нужно рядом нарисовать копию?
Кстати TCanvas получить можно просто его создав с дискриптором, получаемым по GetDC()


Наверх

Титульная страница Поиск, карта сайта Написать письмо