Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.11.04;
Скачать: CL | DM;

Вниз

Перерисовка формы   Найти похожие ветки 

 
LongIsland ©   (2002-10-23 14:35) [0]

Захотел я форму сделать с градиентной заливкой. Нашел в FAQ"е пример, сделал, но вот беда: несмотря на то, что я прошу форму производить перерисовку в OnPaint"е, если я увожу ее с экрана, то рисунок не перерисовывается.

Объясните, что не так, если не сложно:(


 
Skier ©   (2002-10-23 14:45) [1]

>LongIsland
А может стоит Paint перекрыть ?


 
LongIsland ©   (2002-10-23 14:52) [2]


> Skier © (23.10.02 14:45)

На wm_Paint? А он может не работать?


 
Skier ©   (2002-10-23 14:55) [3]

>LongIsland
Дай ссылочку на этот пример...поговорим предметно...


 
LongIsland ©   (2002-10-23 15:48) [4]

Дабы далеко не ходить:-)

ГРАДИЕНТНАЯ ЗАЛИВКА ФОРМЫ

Процедура GradientRect делает градиентную заливку (сверху в низ)
Параметры: цвета [от и до] и объект Canvas, поверхность которого и будет закрашена

procedure TForm1.GradientRect (FromRGB, ToRGB: TColor;Canvas:tcanvas);
var
RGBFrom : array[0..2] of Byte; { from RGB values }
RGBDiff : array[0..2] of integer; { difference of from/to RGB values }
ColorBand : TRect; { color band rectangular coordinates }
I : Integer; { color band index }
R : Byte; { a color band"s R value }
G : Byte; { a color band"s G value }
B : Byte; { a color band"s B value }
begin
{ extract from RGB values}
RGBFrom[0] := GetRValue (ColorToRGB (FromRGB));
RGBFrom[1] := GetGValue (ColorToRGB (FromRGB));
RGBFrom[2] := GetBValue (ColorToRGB (FromRGB));
{ calculate difference of from and to RGB values}
RGBDiff[0] := GetRValue (ColorToRGB (ToRGB)) - RGBFrom[0];
RGBDiff[1] := GetGValue (ColorToRGB (ToRGB)) - RGBFrom[1];
RGBDiff[2] := GetBValue (ColorToRGB (ToRGB)) - RGBFrom[2];

{ set pen sytle and mode}
Canvas.Pen.Style := psSolid;
Canvas.Pen.Mode := pmCopy;

{ set color band"s left and right coordinates}
ColorBand.Left := 0;
ColorBand.Right:= canvas.ClipRect.Right-Canvas.ClipRect.Left;

for I := 0 to $ff do
begin
{ calculate color band"s top and bottom coordinates}
ColorBand.Top := MulDiv (I , canvas.ClipRect.Bottom-Canvas.ClipRect.Top, $100);
ColorBand.Bottom := MulDiv (I + 1,canvas.ClipRect.Bottom-Canvas.ClipRect.Top, $100);
{ calculate color band color}
R := RGBFrom[0] + MulDiv (I, RGBDiff[0], $ff);
G := RGBFrom[1] + MulDiv (I, RGBDiff[1], $ff);
B := RGBFrom[2] + MulDiv (I, RGBDiff[2], $ff);
{ select brush and paint color band}
Canvas.Brush.Color := RGB (R, G, B);
Canvas.FillRect (ColorBand);
end;
end;

Эту процедуру объявляем в публичных объявлениях:

public
{ Public declarations }
procedure GradientRect (FromRGB, ToRGB: TColor;Canvas:tcanvas);

Для закраски формы в обработчик формы OnPaint нужно вставить:

GradientRect (clBlue, clBlack,Canvas);

По событию OnResize для формы напишем:

Paint;




 
Skier ©   (2002-10-23 15:56) [5]

>LongIsland
Советую сделать так :
- убрать обработчики OnPaint и OnResize
- перекрыть реакцию на WM_PAINT

TForm1 = class(TForm)
private
{ Private declarations }
procedure WMPaint(var Message: TWMPaint); message WM_PAINT;

//...............................

procedure TForm1.WMPaint(var Message: TWMPaint);
begin
inherited;
GradientRect(clBlue, clBlack,Canvas);
end;


 
LongIsland ©   (2002-10-23 18:10) [6]


> Skier © (23.10.02 15:56)

Спасибо, все заработало, как следует!!!

ЗЫ: И все-таки, что ж такое с OnPaint"ом произошло?.. :(



Страницы: 1 вся ветка

Текущий архив: 2002.11.04;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.019 c
7-11503
White Tiger
2002-08-28 15:40
2002.11.04
Перенаправление вывода в файл


7-11512
root87
2002-08-23 13:55
2002.11.04
администрирование удалённого компьютера


1-11254
volph777
2002-10-22 17:50
2002.11.04
красиво разбить строку


7-11500
Help plz
2002-08-31 17:16
2002.11.04
Чтение скан кодов клавиш из биоса


7-11498
nick_sniper
2002-08-29 15:11
2002.11.04
Как перезагрузить комп с нужного диска.