Chciałem sobie napisać aplikację symulujacą moją matrycę led. Matryca zbudowana jest z 16 elementów każdy 8x8 pixeli (diody led). 16 elementów twożą dwa rzędy po 8 elementów. Co daje 64 kolumny na 16 wierszy.
Za pomącą poradników http://programowanie.cal.pl/cyfbar/grafika.html skleiłem programik, który rysuje taka matrycę, i wypełnia ją pixelami (kółeczkami).
Teraz mam pytanie, jak zrobić zdarzenie dla pojedynczego kółeczka, np: lewy przycisk myszki wypełnia go na czerwono, a prawy go czyści? Dało by mi to możliwość rysowania prostej grafiki.
Teraz program wygląda tak:
- Kod: Zaznacz cały
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Unit2.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm2 *Form2;
//---------------------------------------------------------------------------
__fastcall TForm2::TForm2(TComponent* Owner)
: TForm(Owner)
{ DoubleBuffered = true;
}
//---------------------------------------------------------------------------
void __fastcall TForm2::Button1Click(TObject *Sender)
{
int i ;
int j ;
int x=100 ;
int y =100 ;
Image1->Canvas->Pen->Color = clBlack;
Image1->Canvas->Pen->Width = 1;
Image1->Canvas->MoveTo(0,100); // Dzielę ekran na pół linią w poziomie
Image1->Canvas->LineTo(800,100);
for (i = 0; i < 8; i++) // Dzielę ekran linią w pionie na 8 równych pól
{
Image1->Canvas->MoveTo(x,0);
Image1->Canvas->LineTo(y,200);
x=x+100;
y=y+100;
}
Image1->Canvas->Pen->Color = clLtGray;
float a =1.5 ;
float b =9.5 ;
float c =1.5 ;
float d =9.5;
for (j = 0; j < 16; j++) // Rysuję kółka w 16 wierzach
{
for (i = 0; i < 64; i++) // Rysuje kółka w 64 kolumnach
{
Image1->Canvas->Ellipse(a,c,b,d) ;
a=a+12.5;
b=b+12.5;
}
c=c+12.5;
d=d+12.5;
a =1.5;
b =9.5 ;
}
}
//---------------------------------------------------------------------------
void __fastcall TForm2::Button2Click(TObject *Sender)
{
Image1->Picture->SaveToFile("d:\\image.bmp");
}
//---------------------------------------------------------------------------
bool draw = false;
TPoint OldPos;
void __fastcall TForm2::Image1MouseDown(TObject *Sender, TMouseButton Button,
TShiftState Shift, int X, int Y)
{
draw = true;
OldPos = Point(X, Y);
}
//---------------------------------------------------------------------------
void __fastcall TForm2::Image1MouseUp(TObject *Sender, TMouseButton Button,
TShiftState Shift, int X, int Y)
{
draw = false;
}
//---------------------------------------------------------------------------
void __fastcall TForm2::Image1MouseMove(TObject *Sender, TShiftState Shift,
int X, int Y)
{
if(draw)
{
Image1->Canvas->MoveTo(OldPos.x, OldPos.y);
OldPos = Point(X, Y);
Image1->Canvas->LineTo(X, Y);
}
}
Czy taka koncepcja rysowania jest słuszna, czy taki progs musiał by wyglądać zupełnie inaczej?