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

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

Перерисовка компонента.


cult ©   (2002-05-15 13:00:00) 

Начал разбираться с компонентами и наткнулся на такую корявку.
Если мой компонент (потомок TGraphicControl) перекрыть каким-нибудь окном и начать возить по форме этим окном, то изображение компонента восстанавливается какими-то невнятными кусками. Вернее, то, что было прорисовано с помощью LineTo-восстанавливается, а то, что c помощью FloodFill - хреново восстанавливается. Что ето? FloodFill такой кривой, или надо как-то форсировать перерисовку?

Спасибо.


Игорь Шевченко   (2002-05-15 14:45:00) [1]

Успехов!


cult   (2002-05-15 14:41:00) [2]

Игорь Шевченко и др:

ЗАРАБОТАЛА! УРА!
Изменил на Pie - и проблемы как не было!
Чуть-чуть только подправил Pie - границы надо того же цвета, что и заливку, а не то внутри границы сектора видно.

Но, в общем, отлично!

Спасибо всем и особенно Игорю,
я ваш интеллектуальный должник.
Вот подучусь и буду вам помогать :)


Игорь Шевченко   (2002-05-15 14:34:00) [3]

А если пойти проще и сделать, как в gauges.pas, где вместо arc и floodfill используется Pie ?

С уважением,


MBo   (2002-05-15 14:23:00) [4]

a API FloodFill, ExtFloodFill не пробовал?


cult   (2002-05-15 14:18:00) [5]

Song:

Да, Вы правы, поменял.
Но и это не помогает :(((


cult   (2002-05-15 14:16:00) [6]

Код-то я дам...
Только че там смотреть? :(
По-моему, надо ловить какое-нить сообщение перекрытия и вызывать Paint. Но какое?

procedure TVisualWatch.paint;
var k:trect;
begin
//inherited paint;
k:=clientrect;
with canvas do begin
Brush.color:=FBackColor;
pen.Color:=clblue;
Arc(k.Left, k.Top, k.Right, k.Bottom, k.Right, k.Bottom, k.Right, k.Bottom);
floodfill((width div 2)-10,(height div 2)+5,clblue,fsBorder); //Вот этот FloodFill и выполняется рваными кусками
pen.Color:=clred;

if FHav Then Begin
PenPos:=point(trunc(width/2),trunc(height/2));
LineTo(PenPos.X+trunc(width/3.5*sin((FHour mod 12)/6*PI+(FMin mod 60)/360*PI)),PenPos.Y-trunc(height/3.5*cos((FHour mod 12)/6*PI+(FMin mod 60)/360*PI)));
end;

if FMav Then Begin
PenPos:=point(trunc(width/2),trunc(height/2));
LineTo(PenPos.X+trunc(width/3*sin((FMin mod 60)/30*PI)),PenPos.Y-trunc(height/3*cos((FMin mod 60)/30*PI)));
end;

if FSav Then Begin
PenPos:=point(trunc(width/2),trunc(height/2));
LineTo(PenPos.X+trunc(width/2.5*sin((FSec mod 60)/30*PI)),PenPos.Y-trunc(height/2.5*cos((FSec mod 60)/30*PI)));
end;

Arc(k.Left, k.Top, k.Right, k.Bottom, k.Right, k.Bottom, k.Right, k.Bottom);

end;
end;


Song   (2002-05-15 14:15:00) [7]

cult © (15.05.02 14:03)
А не так надо: СontrolStyle:=СontrolStyle+[CsOpaque]; ???


Игорь Шевченко   (2002-05-15 14:11:00) [8]

Перепутал...:-)

Раз не помогает, тогда код в студию, скорее всего :-(

С уважением,


cult   (2002-05-15 14:03:00) [9]

Игорь Шевченко:

>Кстати, не надо, если компонент от TGraphicControl :-)
убрал, ниче не поменялось :(

>Может, в ControlState csOpaque попробовать поставить?
стоит :(, только, кажись не State, а Style

constructor TVisualWatch.Create(Aowner:Tcomponent);
begin

....
controlstyle:=[csopaque];
.....

end;



Игорь Шевченко   (2002-05-15 13:59:00) [10]

День добрый,

Кстати, не надо, если компонент от TGraphicControl :-)
Может, в ControlState csOpaque попробовать поставить?

С уважением,


cult   (2002-05-15 13:56:00) [11]

Да, paint мой союственный

protected

..... paint;override;


А вот надо ли писать Inherited Paint в его начале, кстати?


MBo   (2002-05-15 13:34:00) [12]

ты Paint перекрываешь?


Наверх

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