Najprostsza możliwa funkcja rysująca obrazek na 'Image1', w pozycji myszki.
Funkcja wywoływana w Image1_OnMouseMove, czyli za każdym razem gdy ruszę myszką na Image1 to obrazek jest rysowany w nowym miejscu.
KOD cpp: UKRYJ
void __fastcall TForm1::Image1_OnMouseMove(TObject *Sender, TShiftState Shift, int X, int Y)
{
Rysowanie(X, Y);
}
//---------------------------------------------------------------------------
void TForm1::Rysowanie(int x, int y)
{
GGraphics Graf (Image1->Canvas->Handle);
Graf.Clear(GYellow);
GRect Rect1 (0, 0, iw, ih);
GRect Rect2 (x, y, 300, 200);
Graf.DrawImage(IMAGE, Rect2, Rect1);
Image1->Repaint();
}
{
Rysowanie(X, Y);
}
//---------------------------------------------------------------------------
void TForm1::Rysowanie(int x, int y)
{
GGraphics Graf (Image1->Canvas->Handle);
Graf.Clear(GYellow);
GRect Rect1 (0, 0, iw, ih);
GRect Rect2 (x, y, 300, 200);
Graf.DrawImage(IMAGE, Rect2, Rect1);
Image1->Repaint();
}
Całość działa dość szybko, aż do momentu gdy nacisnę Alt, Shift lub Ctrl. Wtedy nagle zaczyna się niemiłosiernie mulić. Mogę zrobić parę zygzaków myszką a potem, w zwolnionym tempie oglądać jak program odtwarza tę ścieżkę przez kilka następnych sekund. Zaznaczam, że w programie w ogóle nie obsługuję klawiszy Alt/Shift/Ctrl. Zrobiłem specjalny mini-program, który wyłącznie robi to co opisałem, i sytuacja jest dokładnie taka jak powyżej.
Pytania:
1. Dlaczego tak się dzieje?
2. Jak tego uniknąć?
Próba "wyłączenia" klawiszy Shift/Ctrl jak poniżej, przy włączonym KeyPreview, nie daje rezultatu.
KOD cpp: UKRYJ
void __fastcall TForm1::FormKeyDown(TObject *Sender, WORD &Key, TShiftState Shift)
{
if ( Key==VK_SHIFT || Key==VK_CONTROL )
Key = 0;
}
{
if ( Key==VK_SHIFT || Key==VK_CONTROL )
Key = 0;
}