![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как размножить рисунок на 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()