Prev Next Up Title Contents Index

Laskuri- komponentti TLaskuri

Seuraavassa listauksessa on tehty oma komponentti Autolaskurin tekemistä varten. Tarpeelliset teko- ohjeet on kommenteissa.

laskuri.pas - yksinkertainen mallikomponentti

	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.


Prev Next Up Title Contents Index