Seuraavassa listauksessa on tehty oma komponentti Autolaskurin tekemistä varten. Tarpeelliset teko- ohjeet on kommenteissa.
unit laskuri;
{ Tehdään malliksi uusi komponentti TLaskuri, joka on kuten TLabel,
mutta siinä pidetään kokonaislukuarvoa oikeassa reunassa, sinisellä pohjalla
kentän leveys säilyttäen (oletuksena) ja siinä on lisäksi lisäys-metodi.
Caption-ominaisuuden muuttaminen kelpuuttaa vain kokonaisluvut ja Caption
on aina synkronissa Value-arvon kanssa.
Vesa Lappalainen 26.8.1996
"Kirjastoa" voidaan testata ennen varsinaiseen komponenttikirjastoon
lisäämistä seuraavasti:
1) Tee uusi projekti, lisää uses-osaan laskuri, samoin projektiin
2) Formin private osaan laita esim:
lask : TLaskuri
3) Formin alustukseen kirjoitat:
lask := TLaskuri.Create(self);
lask.Parent := self;
lask.SetBounds(20,20,50,lask.Height);
4) Lisää vaikkapa nappula, jonka painamisen koodiksi kirjoitat:
lask.Inc(1);
Kopmponentti voidaan lisätä kirjastoon seuraavasti:
1) Käännä tämä tiedosto (vaikka jonkin projekti osana), esim. edellisen
testin käännös riittää
2) Kopioi laskuri.dcu sinne kirjastoon, jossa sinulla on komponentit
(ks. vaikka Components/Install/Search Path)
3) Kopioi laskuri.dcr samaan paikkaan (tänne on tehty komponenttisivulle
tuleva bittikartta TLASKURI, 24x24, Huom! nimi isolla
Pitää olla näköjään oma .dcr Delphi 1.0:lle ja Delphi 2.0:lle!).
4) Valitse Components/Install/Add ja kirjoita Laskuri ja OK OK
(Delphi 1.0:ssa Options/Install Components/....)
5) Jos jatkossa havaitset komponentissa, riittää korjausten jälkeen
Rebuild Library
Tehtäviä (komponentit voi lisätä tähän samaan tiedostoon):
1) Tee uusi komponentti TLisaaButton, jolla on ominaisuutena
Laskuri : TLaskuri - laskuri, jonka arvoa lisätään aina
kun nappia painetaan
Lisays : Integer - paljollako laskuria lisätään
2) Tee autolaskuri em. komponenteilla niin, että tarvitsee
kirjoittaa vain yksi rivi koodia: Nollaa-nappulalle
3) Tee vielä komponentti TNollaa, joka nollaa kaikki samalla
lomakkeella olevat laskurit (ks. ComponentCount ja Components).
4) Tee autolaskuri kirjoittamatta riviäkään koodia. Jos
lisätään uusi laskuri-lisää -pari, niin taritaanko vieläkään
koodia?
5)*Modifioi em komponnettia siten, että sille voidaan antaa
ominaisuutena kaikki komponentit, jotka halutaan nollata.
}
interface
uses
SysUtils, Classes, Controls, Graphics, StdCtrls;
type
TLaskuri = class(TLabel)
private
FValue : integer;{ Ominaisuuksien attribuutit nimetään yleensä F-alkuisiksi}
public
constructor Create(AOwner:TComponent); override;
function Inc(i:integer) : integer; virtual;
procedure SetValue(i:integer); virtual;
procedure SetCaption(const s:string); virtual;
function GetCaption:string; virtual;
published { Published declarations } { Yleensä vain ominaisuudet. }
{ Ominaisuuksiin ilmoitetaan miten niitä luetaan ja miten asetetetaan sekä }
{ mahdollinen oletusarvo. Oletusarvo on ainoastaan ohje siitä, ettei }
{ arvoa talleteta resurssitiedostoon, jos arvo on sama kuin oletus. }
{ Luku/kirjoitusohje voi olla saman tyyppisen attribuutin nimi tai }
{ aliohjelma asettamiseen ja funktio lukemiseen }
property Value:integer read FValue write SetValue default 0;
property Caption:string read GetCaption write SetCaption;
{ Seuraavat ominaisuudet isältä, ainoastaan oletusarvot erilaiset }
property Alignment default taRightJustify;
property AutoSize default False;
property Color default clAqua;
property ParentColor default false;
{ Kaikki muut isän ominaisuudet tulee sellaisenaan }
end;
procedure Register;
implementation
{$IFDEF VER80} { Delphi 1.0:sta puuttuu trim }
uses strtrim;
{$ENDIF}
constructor TLaskuri.Create(AOwner:TComponent);
begin
inherited Create(AOwner); { Muista tämä!!! Muuten käy huonosti!!!}
Value := 0; { Defaulteissa luvatut arvot: }
Alignment := taRightJustify;
AutoSize := False;
Color := clAqua;
ParentColor := False;
end;
function TLaskuri.Inc(i:integer) : integer;
begin
Value := Value + i;
end;
procedure TLaskuri.SetValue(i:integer);
begin
FValue := i;
inherited Caption := IntToStr(i)+' '; { Välilyönti loppuun on paremman näk. }
end;
procedure TLaskuri.SetCaption(const s:string);
begin
Value := StrToInt(Trim(s));
end;
function TLaskuri.GetCaption:string;
begin
Result := Trim(inherited Caption); { Varo rekursiota!!! }
end;
procedure Register;
{ Komponentit pitää rekisteröidä komponenttisivulle }
begin
RegisterComponents('Samples', [TLaskuri]);
end;
end.