Kirjoitetaan ensin apuluokka cKentat, joka hoitelee kontrollien lisäämisen:
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.