Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2002.11.04;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.01 c
14-11406
kull
2002-10-14 13:04
2002.11.04
Как правильней перевести?


14-11492
qube
2002-10-15 10:37
2002.11.04
Опрос: последняя книга, которая...


14-11440
Cr@sh
2002-10-15 14:45
2002.11.04
Ответьте на простой вопросик...


1-11172
race1
2002-10-22 18:22
2002.11.04
сложная задача


14-11465
Neox
2002-10-11 09:11
2002.11.04
Email клиент: какой?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский