Форум: "Основная";
Текущий архив: 2002.05.27;
Скачать: [xml.tar.bz2];
ВнизПерерисовка компонента. Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.007 c