Muszę stworzyć Prosty Edytor graficzny, który będzie tworzył prostokąty i koła z możliwością przenoszenia//przesuwania stworzonych figur myszką.
Potrafię już stworzyć koła i prostokąty, ale jak je przesuwać.
Stworzyłem Pane xp, do którego wrzucam te obiekty Circle i Rectangle,
Co dalej proszę o pomoc całe menu i przyciski są już zrobione potrzebne mi jest tylko wyjaśnienie - jestem dość zielonkawy :D
Z tego co pamiętam musisz od złapanie figury do jej puszczenia musisz czytać pozycje kursora i z częstotliwością jaką wybierzesz sobie rysować od nowa z nową pozycją figury
Czy plansza, na której malujesz posiada zdarzenia "OnMouseDown", "OnMouseUp" i "OnMouseMove" (możliwe, że inaczej się nazywa, ale myślę, że wiadomo o co chodzi)? Będzie to bardzo potrzebne w Twoim zadaniu.
Zdarzenia oprogramowujesz mniej więcej tak (to nie jest kod Javy ani innego języka, jest to zarys koncepcji):
// Stan klawisza myszki (true <=> nacisniety)
bool ClickState = false;
// Biezacy obiekt
DrawObj CurrentObject = null;
// Przesuniecie miedzy wspolrzednymi obiektu, a wspolrzednymi myszki
int XOffset, YOffset;
void OnMouseDown(int X, int Y)
{
CurrentObject = null;
ClickState = false;
// Przegladanie obiektow w kolekcji
foreach (DrawObj item in DrawObjCollection)
{
// Sprawdzanie, czy wspolrzedne myszki zawieraja sie w powierzchni obiektu
if ((item.X <= X) && (item.Y <= Y) && ((item.X + item.Width) >= X) && ((item.Y + item.Height) >= Y))
{
// Znaleciony obiekt jest obiektem biezacym
CurrentObject = item;
// Odnotowanie nacisniecia przycisku
ClickState = true;
// Obliczanie wspolrzednych myszki wzgledem obiektu
XOffset = X - item.X;
YOffset = Y - item.Y;
return;
}
}
}
void OnMouseUp(int X, int Y)
{
// Odnotowanie zwolnienia przycisku
ClickState = false;
}
void OnMouseMove(int Y, int Y)
{
// Sprawdzanie, czy przycisk jest nacisniety i czy biezacy obiekt nie jest pusty
if (ClickState && (CurrentObject != null))
{
// Przesuwanie obiektu poprzez nadawanie nowych wspolrzednych
CurrentObject.X = X - XOffset;
CurrentObject.Y = Y - YOffset;
}
}
Korzystanie z timera jest moim zdaniem kiepskim pomysłem, będzie albo dużo niepotrzebnych wywołań, albo będzie się odczuwać "bezwładność" programu.
Dzieki, a co z powiekszaniem i pomniejszaniem figur :D? i zmiana koloru :D?
juz zrobilem, temat do usunieca
Pomóżcie usunąć błąd. Mam podobny projekt i utknąłem na funkcji open - czyli po załadowaniu pliku graficznego fukcją open.
przestaje działać funkcja zapisz (save).
paint.zip