Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Kreiranje objekta i akcije miša

[es] :: Pascal / Delphi / Kylix :: Kreiranje objekta i akcije miša

[ Pregleda: 1381 | Odgovora: 4 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

franjo_tahi2
Franjo Tahi
Zagreb

Član broj: 289851
Poruke: 43
*.gs1hr.org.



Profil

icon Kreiranje objekta i akcije miša01.09.2011. u 11:39 - pre 153 meseci
Radim s D2007

Kako kreirati objekt koji će biti crta ili krug ili nepravila oblik, a da na ekranu prihvaća akcije miša?

Neophodno je da npr linija prihvaća miša samo na njoj ili na određenoj udaljenosti od nje, a ne na kvadratu čitja je diagonala.
Kako zadati područje oko objekta na kojem će očitavati akcije miša?
 
Odgovor na temu

savkic
Igor Savkić

Moderator
Član broj: 92186
Poruke: 2739



+92 Profil

icon Re: Kreiranje objekta i akcije miša01.09.2011. u 15:49 - pre 153 meseci
> Kako kreirati objekt koji će biti crta ili krug ili nepravila oblik, a da na ekranu prihvaća akcije miša?

Za klasične oblike možeš koristiti TShape za nepravilne moraš sam praviti klasu ili možda uzeti TShape/TImage pa raditi custom iscrtavanje.

> Neophodno je da npr linija prihvaća miša samo na njoj ili na određenoj udaljenosti od nje, a ne na kvadratu čitja je diagonala.
> Kako zadati područje oko objekta na kojem će očitavati akcije miša?

Handluj miša na parentu TShape kontrole pa ako je udaljenost na granici počni pomeranje.
 
Odgovor na temu

franjo_tahi2
Franjo Tahi
Zagreb

Član broj: 289851
Poruke: 43
*.gs1hr.org.



Profil

icon Re: Kreiranje objekta i akcije miša02.09.2011. u 11:08 - pre 153 meseci
savkic: > Za klasične oblike možeš koristiti TShape za nepravilne moraš sam praviti klasu ili možda uzeti TShape/TImage pa raditi custom iscrtavanje.

Na to sam i ja pomislio. Problem je šti TShape mora biti kvadratnog oblika.
Da li postoji elegantnije rješenje, tj. da li mogu kreirati područje?

>> Neophodno je da npr linija prihvaća miša samo na njoj ili na određenoj udaljenosti od nje, a ne na kvadratu čitja je diagonala.
>> Kako zadati područje oko objekta na kojem će očitavati akcije miša?

savkic: > Handluj miša na parentu TShape kontrole pa ako je udaljenost na granici počni pomeranje.[/quote]

Ako imam na formi 20,30 ili više objekata koji su večinom linije ili krugovi, za svaki pomak miša moram računati udaljenosti od svakog od njih. Neće li ti biti presporo? Za svaki objekt bih morao raditi jednadžub, pa jednadžu okomitog pravca, pa presjek dvije linije i udaljenost od miša do linije (a sa krugom još kompliciranije). Mislim da to ne bi bilo upotrebljivo tj. bilo bi presporo.
 
Odgovor na temu

savkic
Igor Savkić

Moderator
Član broj: 92186
Poruke: 2739



+92 Profil

icon Re: Kreiranje objekta i akcije miša02.09.2011. u 15:41 - pre 153 meseci
> Na to sam i ja pomislio. Problem je šti TShape mora biti kvadratnog oblika.
> Da li postoji elegantnije rješenje, tj. da li mogu kreirati područje?

Možeš napraviti šta hoćeš ali moraš sam raditi iscrtavanje.

> Ako imam na formi 20,30 ili više objekata koji su večinom linije ili krugovi, za svaki pomak miša moram računati udaljenosti od svakog od njih. Neće li ti biti presporo?
> Za svaki objekt bih morao raditi jednadžub, pa jednadžu okomitog pravca, pa presjek dvije linije i udaljenost od miša do linije (a sa krugom još kompliciranije).
> Mislim da to ne bi bilo upotrebljivo tj. bilo bi presporo.

E pa sad ako je 1ms presporo... ;) I to moraš raditi samo na klik miša, tj. kada treba da počneš prevlačenje, pronađeš najbliži objekat i njega vučeš. A možeš i napraviti kontrolu (window, tada bi mogao koristiti i regione nepravilnog oblika) koja bi o tome vodila računa, imala spoljni okvir koji bi reagovao na miša i unutrašnji sadržaj unutar spoljnih granica sa iscrtanim oblikom.
 
Odgovor na temu

Rapaic Rajko
Bgd

Član broj: 4105
Poruke: 810
195.46.55.*



+62 Profil

icon Re: Kreiranje objekta i akcije miša06.09.2011. u 10:46 - pre 153 meseci
Neke smernice za graficki editor:

1) Prvo ti treba klasa Kontejner. Sve sto radis, crtas, vuces, brises, odigrava se unutar nje. Klasa ima metodu Draw().
2) Kontejner sadrzi Item-e, to su tvoje klasice/crtezi (kruznice, kvadrati, sta god). Svaki Item ima metodu DrawSelf(). Svi se oni iscrtavaju u metodi Kontejner.Draw(), u petlji.
3) Handler za MouseDown misa je klasa Kontejner. Njen zadatak je da na klik odredi (ako ima sta) na koji item se akcija odnosi. To se opet radi pozivanjem metoda Item-a, nesto kao Item.CheckSelf(). Tada se item koji pozitivno odgovori (na njega se odnosi) proglasi za Kontejner.CurrentItem (property).
4) Dalje akcije misa se prosledjuju CurrentItem-u, odnosno on sopstvenim metodama sebe razvlaci, preoblikuje itd.itd.
5) Na prekid akcija misa (MouseUp, opet handler klase Kontejner), CurrentItem postaje nil, i sve ide ispocetka.
6) Potreban je i property Kontejner.SelectedItem(s). Recimo da klikom na prazan prostor Kontejner-a iscrtavas box, i njime selektujes Iteme (opet njihovim sopstvenim metodama proveravas upadaju li u opseg). Sve selektovane item-e potrpas u propertu Kontejner.SelectedItems. A mozes i Item-ima postaviti property Selected, sto uproscava manipulacija istima itd. itd.

Ovo je dosta uproscena slika potrebnih radnji, za jednu mogucu varijantu grafickog editora; recimo da uvedemo vise stanja za Item-e itd.; u zavisnosti od trenutnog stanja, Item se na specifican nacin iscrtava i tako dalje. A inace, ovo je vrlo dobra vezba OOP-a ;) .

Pozz

Rajko

P.S. Presporo? Radi se o mikrosekundama... :)
 
Odgovor na temu

[es] :: Pascal / Delphi / Kylix :: Kreiranje objekta i akcije miša

[ Pregleda: 1381 | Odgovora: 4 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.