Prev Next Up Title Contents Index

Vedä ja pudota (drag and drop, DaD)


"Nykyaikaisessa" suorakäyttöliittymässä olion vetäminen ja pudottaminen on muotia. Lisätään omaan ohjelmaamme vielä ominaisuus, jossa käyttäjä voi "tarttua" henkilöauton kuvaan ja pudottaa sitten sen jomman kumman laskuri- ikkunan päälle. Tällöin vastaava laskuri lisääntyy vaikkapa 10:llä.

1.
Muuta henkilöauton kuvan DragMode - ominaisuus arvoon dmAutomatic.
2.
Kokeile ajaa ohjelmaa. Nyt voi tarttua henkilöauton kuvaan, muttei sitä voi vielä pudottaa mihinkään.
3.
Lisää LabelHA:han tapatuma (DragOver), jolla hyväksytään siihen pudottaminen:
		procedure TAutolaskuri.LabelHADragOver(Sender, Source: TObject; X,
		  Y: Integer; State: TDragState; var Accept: Boolean);
		begin
		  Accept := True;
		end;
4.
Kokeile ajaa ohjelmaa. Nyt pudottaminen on sallittua LabelHA:n päälle, muttei LabelKA:n päälle.
5.
Laita sama tapahtuma LabelKA:n DragOver tapahtumaksi (kirjoittamatta koodia).
6.
Seuraavan vaiheen helpottamiseksi kirjoitetaan aliohjelma, jonka avulla tekstikenttää voidaan lisätä yhdellä. Samalla vanhat laskut voidaan muuttaa käyttämään tätä aliohjelmaa. Koodi kirjoitetaan vaikkapa ennen kaikkia tapahtuman käsittelijöitä:
		procedure lisaa(lab:TLabel; n:integer);
		begin
		  lab.Caption := IntToStr(StrToInt(lab.Caption)+n);
		end;
		
		procedure TAutolaskuri.ButtonHAClick(Sender: TObject);
		begin
		  lisaa(LabelHA,1);
		end;
7.
Lisää käsittelijä LabelHA:n pudotuksen vastaanottamiselle (DragDrop):
		procedure TAutolaskuri.LabelHADragDrop(Sender, Source: TObject; X,
		  Y: Integer);
		begin
		  lisaa(Sender as TLabel,10);
		end;
8.
Laita sama tapahtuma LabelKA:n DragDrop tapahtumaksi (kirjoittamatta koodia).
9.
Jos laskurikentät tulevat vielä hyväksymään muistakin komponenteista tulevia pudotuksia, voidaan em. koodi modifioida:
		procedure TAutolaskuri.LabelHADragDrop(Sender, Source: TObject; X,
		  Y: Integer);
		begin
		  if ( Source = ImageHA ) then lisaa(Sender as TLabel,10);
		end;

Tehtävä 1.8 Muitakin lisäysmääriä

Lisää ohjelmaan joukko numeroikkunoita (esim. 1,2,3,4,5), joihin kuhunkin voidaan tarttua ja vetää sitten laskuri- ikkunan päälle. Kun numero pudotetaan, lisääntyy laskuri- ikkunan arvoa vastaavalla numerolla (itsekirjoitettua ohjelmakoodia n. 1 rivi edelliseen lisää).

Tehtävä 1.9 Liikkuvan kuvan siirto toiseen paikkaan

Lisää ohjelmaan ominaisuus: jos tartut henkilöauton kuvaan ja pudotat sen lomakkeen päälle, niin auto siirtyy tähän kohtaan lomaketta (ohjelmakoodia max. 4 itsekirjoitettua riviä).

Tehtävä 1.10 Fontin ja värin vaihto

Lisää ohjelmaan PopupMenu kullekin nappulalle ja laskurille, jotta voit vaihtaa nappuloiden ja laskureiden fonttia ja laskureiden väriä. (Olennaisesti 6 erilaista itsekirjoitettua riviä lisää, käytännössä 9, koska nappuloiden fontti ja laskureiden fontti tarvitsee oman koodinsa).

Tehtävä 1.11 Komponentin paikan vaihtaminen

Lisää ohjelmaan mahdollisuus tarttua komponenttiin (esim. nappulaan) ja siirtää se uuteen paikkaan.


Prev Next Up Title Contents Index