Newsgroup: it.comp.lang.delphi
Titolo: [delphi6] Definizione classe e sottoclasse

  Volevo creare una form di ricerca attraverso una classe, perche ho 
delle ricerche analoghe.
1) Tutti form contengono una grid per mostrare i dati
2) C'è una text per l'immisione del testo da ricercare
3)..........
4) L'unica cosa che cambia sono il numero dei pulsanti per eventuali 
operazioni.
La mia idea è avere una superclasse che costruisca il form con dei 
controlli base.Poi per ogni entità che sia
Clienti, fornitori....
una sottoclasse che costruisca una serie di pulsanti su misura.
Questo è quello che ho scritto:
unit URicerca;
interface
uses Forms, Dialogs, StdCtrls, DBGRids, Graphics;
type
  TRicerca = class
    private
      //archivi:string;
      FormRicerca:TForm;
      Grid:TDBGrid;
      BtnRicerca:TButton;
      TextRicerca:TEdit;
      LabelRisult:TLabel;
      LabelRicerca:TLabel;
    public
      procedure CreaGrid(SuQualeForm:TForm);
      constructor create;
      function GetGrid:TDBGrid;
      procedure CreaLabel(SuQualeForm:TForm);
      procedure CreaText(SuQualeForm:TForm);
  end;
implementation
constructor TRicerca.create;
begin
  try
    Application.CreateForm(TForm,FormRicerca);
    FormRicerca.Position:=poScreenCenter;
    FormRicerca.Caption:='RICERCA GENERICA';
    FormRicerca.Width:=500;
    FormRicerca.Height:=300;
    CreaGrid(FormRicerca);
    CreaLabel(FormRicerca);
    CreaText(FormRicerca);
    FormRicerca.Showmodal;
  finally
    FormRicerca.Free;
  end;
end;
procedure TRicerca.CreaGrid(SuQualeForm:TForm);
begin
  Grid:=TDBGrid.Create(SuQualeForm);
  Grid.Parent:=SuQualeForm;
  Grid.Left:=70;
  Grid.Top:=60;
end;
procedure TRicerca.CreaText(SuQualeForm:TForm);
begin
  TextRicerca:=TEdit.Create(SuQualeForm);
  TextRicerca.Parent:=SuQualeForm;
  TextRicerca.Left:=70;
  TextRicerca.Top:=30;
  TextRicerca.Width:=320;
end;
procedure TRicerca.CreaLabel(SuQualeForm:TForm);
begin
  LabelRicerca:=TLabel.Create(SuQualeForm);
  LabelRicerca.Parent:=SuQualeForm;
  LabelRicerca.Caption:='TESTO';
  LabelRicerca.Left:=5;
  LabelRicerca.Top:=32;
  LabelRisult:=TLabel.Create(SuQualeForm);
  LabelRisult.Parent:=SuQualeForm;
  LabelRisult.Caption:='RISULTATO';
  LabelRisult.Left:=5;
  LabelRisult.Top:=60;
end;
function TRicerca.GetGrid:TDBGrid;
begin
  GetGrid:=Grid;
end;
end.
////////////SOTTOCLASSE
unit UClientiRicerca;
interface
uses Forms, Dialogs, StdCtrls, Graphics,URicerca;
type
  TClientiRicerca = class(TRicerca)
    private
      FormRicercaClienti:TForm;
      BtnRicerca:TButton;
      BtnAnnulla:TButton;
    public
      constructor create;
      procedure CreaBottoniClienti;
      procedure FormOnClose(Sender: TObject; var Action: TCloseAction);
      procedure btnRicercaClick(Sender: TObject);
  end;
implementation
procedure TClientiRicerca.FormOnClose(Sender: TObject; var Action: 
TCloseAction);
begin
  ShowMessage('chiudo il form generico');
  Action:=caFree;
end;
constructor TClientiRicerca.create;
begin
  try
    Application.CreateForm(TForm,FormRicercaClienti);
    FormRicercaClienti.Width:=500;
    FormRicercaClienti.Height:=300;
    FormRicercaClienti.Position:=poScreenCenter;
    FormRicercaClienti.Caption:='SOTTO RICERCA CLIENTE';
    FormRicercaClienti.OnClose:=FormOnClose;
    CreaGrid(FormRicercaClienti);
    CreaLabel(FormRicercaClienti);
    CreaText(FormRicercaClienti);
    CreaBottoniClienti;
    FormRicercaClienti.Showmodal;
  finally
    FormRicercaClienti.Free;
  end;
end;
procedure TClientiRicerca.CreaBottoniClienti;
begin
  BtnRicerca:=TButton.Create(FormRicercaClienti);
  BtnRicerca.Parent:=FormRicercaClienti;
  BtnRicerca.Top:=30;
  BtnRicerca.Caption:='RICERCA';
  BtnRicerca.Left:=400;
  BtnRicerca.OnClick := btnRicercaClick;
  BtnAnnulla:=TButton.Create(FormRicercaClienti);
  BtnAnnulla.Parent:=FormRicercaClienti;
  BtnAnnulla.Top:=60;
  BtnAnnulla.Caption:='ANNULLA';
  BtnAnnulla.Left:=400;
  //BtnAnnulla.OnClick := FormOnClose(FormRicercaClienti,'');
end;
procedure TClientiRicerca.btnRicercaClick(Sender: TObject);
begin
  ShowMessage('Click');
end;
end.
Volevo una verifica prima di procedere oltre altrimenti rischio di 
portarmi avanti degli errori!!
Grazie
--- posted by geoForum on 
http://www.delphiedintorni.it

 portarmi avanti degli errori!!
Non ho tempo per analizzare a fondo la tua implementazione,pertanto 
prendi con i guanti il mio consiglio: io avrei creato un form di base 
con una griglia e i pulsanti salva, annulla, nuovo, edit, stampa. Poi 
sfrutterei la VFI, visual form inheritance, per implementare i 
discendenti.
Il concetto e' che sono i discendenti che specializzano aggiungendo 
questo e quello.
Se un domani implementi un comportamento nei clienti, ricompili solo i 
clienti, non tutto il progetto.
Ciao
-- 
Morde