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;
- 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ää).
- 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ä).
- 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).
- Lisää ohjelmaan mahdollisuus tarttua komponenttiin (esim.
nappulaan) ja siirtää se uuteen paikkaan.