Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.006 c
14-88619
lipskiy
2002-04-18 23:44
2002.05.27
Все, отправившие и отправящие записи в UBPFD, проконтролируйте!


14-88620
VAleksey
2002-04-19 14:02
2002.05.27
Глюки


1-88443
Дмитрий757567
2002-05-17 13:59
2002.05.27
HALT - НЕ НОРМАЛЬНЫЙ


4-88673
SPeller
2002-03-27 06:49
2002.05.27
Разрешение


1-88465
Димок
2002-05-17 18:32
2002.05.27
Как изменить раскладку клавиатуры в чужом окне?





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский