0

マウス カーソルを移動するたびに読み込みたいコードがあります。マウスの方向以降に線を描画し、線が特定の x 座標に到達するたびに、線が反映されます。問題は、PaintBox をクリックしたときにのみプログラムが線を描画することです。これまでの私のコードは次のとおりです。

void __fastcall TForm2::PaintBox1Click(TObject *Sender)
{
   Form2->Refresh();
   TPoint P;
   ::GetCursorPos( &P );
   P = ScreenToClient( P );
   int XX;
   int YY;
   if (P.x<240) 
   {
      XX=15;
      YY= ((445-P.y)*(XX-P.x)/(240-P.x)+P.y);
   } 
   else if(P.x==240)
   {
      XX=240;YY=-5; 
   }
   else
   { 
      XX=465;
      YY= ((445-P.y)*(XX-P.x)/(240-P.x)+P.y);   
   }
   int delta=2*(445-YY);

   this->Canvas->MoveTo(240, 445);
   this->Canvas->LineTo(XX,YY);
   while(0<YY&&YY<480&&YY!=445)
   {
      XX=abs(480-XX);
      YY-=delta;
      this->Canvas->LineTo(XX,YY);
   }
}
4

1 に答える 1

1

OnClickイベント ハンドラで描画しようとしています。そこは描く場所を間違えています。VCL ペイント ボックスにペイントする唯一の正しい場所は、そのOnPaintイベント ハンドラからです。

ただし、対応する必要がありOnClickます。クリックの場所をメモし、維持する必要がある状態を更新します。次に、ペイント ボックスを呼び出しInvalidateて、ペイント サイクルを強制します。

于 2014-03-22T08:50:36.850 に答える