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