- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
void __fastcall TForm1::FormPaint(TObject *Sender)
{
for(int i=0;i<2;i++)
{
if(!White[i].Moves)
{
int j=0;
for(int k=0;k<i;k++)
{
if(White[k].Position == White[i].Position)
{
j++;
}
}
Image1->Canvas->MoveTo(Points[White[i].Position-1].X-20,Points[White[i].Position-1].Y - 30*j);
Image1->Canvas->LineTo(Points[White[i].Position-1].X+20,Points[White[i].Position-1].Y - 30*j);
}
}
//Image1->Canvas->LineTo(200,200);
}
Этот обработчик грузит проц. на 50 процентов и таймер не работает из-за него.
Писал мой знакомый, который не любит продукты от борланда.
В чем дерьмо? Думаю видно невооруженным глазом.
и не имеет отношения к с++, тогда:
если убрать
Image1->Canvas->MoveTo(Points[White[i].Position-1].X-20,Points[White[i].Position-1].Y - 30*j);
Image1->Canvas->LineTo(Points[White[i].Position-1].X+20,Points[White[i].Position-1].Y - 30*j);
то все нормально будет
(Коррекция: Image1 скорее всего есть объект картинки который на форму кидается. В этом случае рисование в картинку может тоже WM_PAINT генерировать, т.к. Image в VCL не есть контрол и рисуется парент контролом, например самой формой.)
из-за убогости VCL реально быстро WM_PAINT обработать почти никогда не получается. VCL это все перекрывает и в процессе теряет маску перересовки: определить какую часть окна/контрола надо реально перерисовать невозможно - приходится рисовать все. мои знакомые не на одном проекты OnPaint() хакали (обработчик WM_PAINT) что бы быстро что-то перерисовывать (куча гамновой работы бо тогда VCLные штучки нельзя использовать и надо все ручками на WinAPI делать).
Image1->Canvas->MoveTo(Points[White[i].Position-1].X-20,Points[White[i].Position-1].Y - 30*j);
Image1->Canvas->LineTo(Points[White[i].Position-1].X+20,Points[White[i].Position-1].Y - 30*j);
Вызывается не сто тысяч раз, а лишь:
for(int i=0;i<2;i++)
Недолжно оно так тормозить.
даже в Майкрософте слышали
Image1->Canvas->LineTo(Points[White[i].Position-1].X+20,Points[White[i].Position-1].Y - 30*j);
идет отправка WM_PAINT окну и следовательно процедура вызывается FormPaint непрерывно.
Вот такая хрень.
private void Form1_Paint(object sender, PaintEventArgs e)
{
pictureBox1.CreateGraphics().DrawRectang le(Pens.Red, new Rectangle(10, 10, 50, 50));
}
так что наверное у борланда непродуманно в этом плане.
Убирайся с ресурса.
Ты входишь в 95%!
Алсо, срал я на праздник коммунистов.
Не путай с капитал-демократами типа США, тупое быдло.
А сам то со своими единоросами и фашистами.
И почему сразу политикан? В странах, где люди не скатываются в говно, это вполне в порядке вещей - иметь активную социальную позицию.
[url]http://vecherka.su/pics/uploads/archive2007/06_2007/04062007/02.jpg[/url]
PS: Руки в заде - для маскировки.
дело в этой строке ведь?
Камрад, жму руку.