Prev Next Up Title Contents Index

Apuluokka cKentat

Kirjoitetaan ensin apuluokka cKentat, joka hoitelee kontrollien lisäämisen:

dynkent.pas - luokka dynaamisten kenttien tekemiseen

	unit dynkent;
	{
	  Purpose: Dynaamisesti lisätä taulun kenttiä paneelin sisälle
	  Author:  Vesa Lappalainen
	  Date:    21.08.1996
	  Usage:   Alustus:
	             olion varaus: kentat.cKentat
	             kentat := cKentat.Create(MyPanel);
	           Täyttö:
	             kentat.LisaaKaikki(MyDataSource);
	           Poisto:
	             kentat.Free  
	}
	
	interface
	
	uses
	  DB, Classes, StdCtrls,  DBCtrls, Controls;
	
	const MAX_KENTTIA       = 20;
	      C_KENTAN_KORKEUS  = 0;
	      C_NIMEN_LEVEYS    = 60;
	      C_EDIT_LEVEYS     = 200;
	
	type
	  {----------------------------------------------------------------------------}
	  cKentta = object { Pari: otsikko - tietueen kenttä }
	    nimi : TLabel;
	    edit : TDBEdit;
	    index : integer;
	  end;
	
	  {----------------------------------------------------------------------------}
	  cKentat = class { Luokka, joka tallettaa monta tieueen kentää esim. Paneliin }
	  private
	    kentat : array [0..MAX_KENTTIA] of cKentta; { Taulukko kentistä            }
	    panel : TWinControl;                        { Panelin, johon kentät luod.  }
	    n : integer;                                { Kenttien lukumäärä           }
	    kentan_korkeus,
	    nimen_leveys,
	    edit_leveys:integer;
	    procedure Paikka(var kentta:cKentta);       { Vaihtaa kentän paikan ja koon}
	    procedure MuutaKoko;                        { Vaihtaa kaikk kenttien koot  }
	  public
	    constructor Create(p:TWinControl);
	    destructor Destroy; override;
	    procedure Siivoa;                           { Poistaa kaikki kentät        }
	    procedure Lisaa(s:string;data:TDataSource); { Lisää yhden kentän           }
	    procedure LisaaKaikki(data:TDataSource);    { Lisää kaikki kentät          }
	    procedure SetEditLeveys(l:integer);
	    procedure SetNimenLeveys(l:integer);
	    procedure SetKentanKorkeus(h:integer);
	  end;
	
	
	implementation
	
	{------------------------------------------------------------------------------}
	constructor cKentat.Create(p:TWinControl);
	begin
	  inherited Create;
	  n := 0;
	  kentan_korkeus := C_KENTAN_KORKEUS;
	  nimen_leveys   := C_NIMEN_LEVEYS;
	  edit_leveys    := C_EDIT_LEVEYS;
	  panel          := p;
	end;
	
	{------------------------------------------------------------------------------}
	procedure cKentat.Siivoa;
	var i:integer;
	begin
	  for i:=0 to n-1 do begin
	    kentat[i].nimi.Free; kentat[i].nimi := NIL;
	    kentat[i].edit.Free; kentat[i].edit := NIL;
	  end;
	  n := 0;
	end;
	
	{------------------------------------------------------------------------------}
	destructor cKentat.Destroy;
	begin
	  Siivoa;
	  inherited Destroy;
	end;
	
	{------------------------------------------------------------------------------}
	procedure cKentat.Paikka(var kentta:cKentta);
	var korkeus:integer;
	begin
	  korkeus := kentan_korkeus;
	  if ( korkeus <= 0 ) then korkeus := kentta.Edit.Height+1;
	  with ( kentta.nimi ) do begin
	    Left := 10;
	    Width := nimen_leveys;
	    Top := 10 + kentta.index*korkeus;
	   end;
	  with ( kentta.edit ) do begin
	    Left := 10 + kentta.nimi.Left + nimen_leveys;
	    Width := edit_leveys;
	    Top := kentta.nimi.Top;
	   end;
	end;
	
	{------------------------------------------------------------------------------}
	procedure cKentat.MuutaKoko;
	var i:integer;
	begin
	  for i:=0 to n-1 do
	    Paikka(kentat[i]);
	end;
	
	
	{------------------------------------------------------------------------------}
	procedure cKentat.Lisaa(s:string;data:TDataSource);
	begin
	  if ( n >= MAX_KENTTIA ) then exit;
	  kentat[n].nimi := TLabel.Create(panel);
	  with ( kentat[n].nimi ) do begin
	    Caption := s;
	    Parent := panel;
	   end;
	  kentat[n].edit := TDBEdit.Create(panel);
	  with ( kentat[n].edit ) do begin
	    DataSource := data;
	    DataField := s;
	    Parent := panel;
	   end;
	  kentat[n].index := n;
	  Paikka(kentat[n]);
	  inc(n);
	end;
	
	{------------------------------------------------------------------------------}
	procedure cKentat.LisaaKaikki(data:TDataSource);
	var i:integer;
	begin
	  Siivoa;
	  for i:=0 to data.DataSet.FieldCount-1 do
	    Lisaa(data.DataSet.Fields[i].FieldName,data);
	end;
	
	{------------------------------------------------------------------------------}
	procedure cKentat.SetEditLeveys(l:integer);
	begin
	  edit_leveys := l;
	  MuutaKoko;
	end;
	
	{------------------------------------------------------------------------------}
	procedure cKentat.SetNimenLeveys(l:integer);
	begin
	  nimen_leveys := l;
	  MuutaKoko;
	end;
	
	{------------------------------------------------------------------------------}
	procedure cKentat.SetKentanKorkeus(h:integer);
	begin
	  kentan_korkeus := h;
	  MuutaKoko;
	end;
	
	
	end.


Prev Next Up Title Contents Index