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

Вниз

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

 
cult ©   (2002-05-15 13:00) [0]

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

Спасибо.


 
MBo ©   (2002-05-15 13:34) [1]

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


 
cult ©   (2002-05-15 13:56) [2]

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

protected

..... paint;override;


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


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

День добрый,

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

С уважением,


 
cult ©   (2002-05-15 14:03) [4]

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

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

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

constructor TVisualWatch.Create(Aowner:Tcomponent);
begin

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

end;




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

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

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

С уважением,


 
Song ©   (2002-05-15 14:15) [6]

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


 
cult ©   (2002-05-15 14:16) [7]

Код-то я дам...
Только че там смотреть? :(
По-моему, надо ловить какое-нить сообщение перекрытия и вызывать 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;


 
cult ©   (2002-05-15 14:18) [8]

Song:

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


 
MBo ©   (2002-05-15 14:23) [9]

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


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

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

С уважением,


 
cult ©   (2002-05-15 14:41) [11]

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

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

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

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


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

Успехов!



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

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

Наверх




Память: 0.49 MB
Время: 0.009 c
1-88544
NailS
2002-05-15 12:46
2002.05.27
Exception : Privileged instruction


1-88483
Zamiran
2002-05-15 15:46
2002.05.27
Помогите люди добрые!!!


3-88365
perov
2002-05-02 12:06
2002.05.27
модификация свойств объектов Fast Report


14-88631
Iris
2002-04-07 11:46
2002.05.27
установка новых компонентов


1-88394
Ross
2002-05-14 19:11
2002.05.27
Совсем замучался. Помогите