Zaznaczanie na ekranie

0

Witam poraz kolejny
Mam taki mały problem i nie mogę sobie z nim porazić.
Klient zazycył sobie oby na mapie mogł zaznaczas punkty.
Planuje uzyc do tego celu 2 komponentow TImage z ktorych jeden wczytywal by obraz mapy a na drugim mozna by zaznaczac punkty.
Problem polega na tym ze te punkty trzeba bedzie jakos zaznaczyc, usunac a calosc zapisac.
Czy wiecie moze jak naniesc punkty lub narysowac je na tym komponencie a nastepnie usunać?

Pozdrawiam.

0

moze tworz dynamicznie image z bitmapka z jakims zaznaczeniem, i ustawiaj w miejscu klikniecia - usuniecie - robisz tak ze w tablicy z tymi image'ani usuwasz odp rekord.

0

Lepiej twórz dynamicznie bitmapkę z tym, co znajduje się pod zaznaczenie, a następnie przy odznaczaniu rysuj ją jeszcze raz w tym samym miejscu.

0

ja bym to zrobił tak:

mam komponent TImage wkładam do niego bitmape

i teraz pisze procedure która przechwytuje komunikat: wmLButtonDown

I w tym sprawdzam polorzenie kursora myszy zapisuje je do zmiennych x i y

sprawdzam połorzenie Left i top komponentu Bitmap
No i jeśli kliknięcie nastąpiło w obszarze bitmapy to daje

canvas.Create;
canvas.Rectangle(x,y,x+5,y+5);

a żeby usunąć punkty to canvas.free;

Troszke prymitywny sposób ale powinien działać

Chyba że nie o takie coś chodzi no to sory ale może coś z tego wykorzystasz

0

Utwórz sobie dynamiczną tablicę wartości TPoint. Jak user dodaje punkt, to odczytujesz położenie myszy względem mapy i te współrzędne dodajesz do swojej tablicy. Jak user skasuje dany punkt, to usuwasz tę pozycję z tablicy.

OK - masz już tablicę - teraz widzę 2 wyjścia - trzaba by sprawdzić czy może któreś jest szybsze, mniej miga etc...

1) 2 TImage - takie samo położenie i rozmiar - mapa pod spodem, a przeźroczysty obraz nad nią. Przy zmianach w tablicy z punktami czyścisz przeźroczysty obraz a w zdarzeniu OnPaint masz w pętli rysowanie wszystkich punktów z owej tablicy.

2) Niewizualna bitmapa w pamięci (TBitmap) przechowuje naszą mapę a na na formie mamy TImage - w jego OnPaint mamy:

  • przerysowanie mapy z TBitmap
  • w pętli for narysowanie punktów z tablicy (jak w punkcie 1)

W każdym z przypadków odświeżasz bitmapkę przy dodaniu/usunięciu punktów (kliknięcie myszy czy jak to tam rozwiązałeś).

0

Dzięki za propozycje ale ja myślałem o czymś prostszym.
Mam jeden komponent Timage z wczytaną mapą. Drugi Timage służy do rysowania. Następnie bitmape komponentu po którym rysowaliśmy zapisujemy do pliku. Tylko jak narysować punkty na bitmapie jak je zmazać.

Pozdrawiam

0

Trochę się tym pobawiłem i ja zrobiłem to tak:
W zmiennej np. bitmap przechowujesz swoją mape. Następnie do komponentu Timage ładujesz też mapke, ale dodatkowo , będziesz na tym kompnencie malował. Jeśli ktoś chce postawić np punkt na mapce rysujesz ten punkt i dodatkow zapamiętujesz współrzędne punktu. A jeśli chodzi o kasowanie, to wówczas przyda się zmienna bitmap, w której przechowujesz mape. Ja po prostu kopiowałem odpowieni kwadrat ze zmiennej bitmap i wstawialem do komponentu Timage(zamalowywałem kwadrat i tyle). Mam nadzieje, ze jasno wyjasniłem

Do kopiowania jest intruckja copyrect
np.
image1.Canvas.CopyRect(rect(punkt[i].x-12,punkt[i].Y-12,punkt[i].X+12,punkt[i].Y+12),Bitmap.Canvas,rect(punkt[i].X-12,punkt[i].Y-12,punkt[i].X+12,punkt[i].Y+12));

0

To za bardzo skomplikowane chodziło mi o coś na kształt windowsowego Painta Gdzie można rysować, zmazywać gumką. To ma być tablica na której można by było rysować a nastpnie ją zapisać jako bitmapę. Może jest gdzieś jakiś gotowiec z którego można podejrzeć.

Pozdrawiam

1 użytkowników online, w tym zalogowanych: 0, gości: 1