Newsgroup: it.comp.lang.delphi
Titolo: <? Facile> Aiuto sulle classi

Vorrei capire come si usa una classe.
Da quello che ho capito la classe viene usato come un tipo e quindi come se
fosse una vera e propria variabile.
Per esempio io vorrei creare una classe contenente 2 TLabel.
La definisco cosě
Type
  TClasse = Class
    Nome    : TLabel;
    Cognome : TLabel;
    Procedure Crea;
  End;
Ora, io voglio rappresentare gli oggetti definiti in questa classe 4 volte
su una form sola. Ho bisogno di "creare" quattro volte un oggetto di tipo
TClasse e per questo eseguire la procedura "Crea".
Ma come definisco questa procedura se voglio che essa crei realmente gli
oggetti della mia classe sulla Form ???
Io credevo si facesse cosě, ma evidentemente non lo č:
procedure TForm1.Button1Click(Sender: TObject);
Var
  Info: TClasse;
begin
  Info.Nome.Caption := 'gigio';
  Info.Nome.Left := 10;
  Info.Nome.Top := 10;
  Info.Cognome.Caption := 'fottiti';
  Info.Cognome.Left := 10;
  Info.Cognome.Top := 30;
  Info.Crea;
  Repaint;
end;
Procedure TClasse.Crea;
Begin
  Nome      := TLabel.Create(Form1);
  Nome.Name := 'Nome';
  Cognome      := TLabel.Create(Form1);
  Cognome.Name := 'Cognome'
End;

End;
Questo mi pare ok ma deve essere Contructor, non Procedure

Sulle tue indicazioni ho modificato il tutto.
Nonostante ciò i due TLabel non appaiono sulla Form1 anche se pero in realtà
esistono perchè se io clicco due volte sul pulsante Button1 il compilatore
mi dà un messaggio di errore : <A component named Nome already exists>
.....
.......
..........
  TClasse = Class
    Nome    : TLabel;
    Cognome : TLabel;
    Constructor Crea;
  End;
var
  Info: TClasse;
  Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.Button1Click(Sender: TObject);
begin
  Info := TClasse.Crea;
  Info.Nome.Caption := 'ciao';
  Info.Nome.Left := 10;
  Info.Nome.Top := 10;
  Info.Nome.Visible := True;
  Info.Cognome.Caption := 'mondo';
  Info.Cognome.Left := 10;
  Info.Cognome.Top := 30;
  Info.Nome.Visible := True;
  Repaint;
  Repaint;
end;
Constructor TClasse.Crea;
Begin
  Nome      := TLabel.Create(Form1);
  Nome.Name := 'Nome';
  Cognome      := TLabel.Create(Form1);
  Cognome.Name := 'Cognome'
End;
end.

 End;
Allora, ti darò qualche indicazione ma ti consiglio fortemente di riprendere
la cosa su qualche libro.
1) la classe che hai definito deriva da TObject (visto che non hai
specificato alcun ancestor). Sfrutta il metodo Create: fanne l'override e
(dopo aver richiamato inherited) instanzia lì le due label. Se vuoi fare una
cosa "pulita" liberale nel Destroy (a meno che tu riesca a cavartela con i
rapporti di ownership)
2) fossi in te io deriverei _almeno_ da TComponent. L'owner del tuo
componente sarà la Form su cui lo depositi e potrai sfruttarlo per rendere
visibili le label (così racchiudi tutto il codice nel componente e non devi
usare i riferimenti espliciti "TLabel.Create(Form1)"). Io lascerei come
owner il componente e sfrutterei il membro Owner del componente per poter
fare una InsertComponent....
3) non pensare di poter scrivere componenti (classi se vuoi chiamarle così)
senza un minimo di preparazione: cercati un libro/tutorial/esempio...
Ciao
--
(¯`·.¸¸.·´¯`·.¸¸.-> Andrea <-.¸¸.·´¯`·.¸¸.·´¯)
AntiSpam: rimuovere il trattino basso dall'indirizzo per rispondere
AntiSpam: remove the underscore from the e-mail address to reply

   Info.Cognome.Top := 30;


   Info.Nome.Visible := True;
Non servono i repaint... nè il visibile...
devi settare la proprietà Parent a Form1 ... ma mi sa che devi derivare da
TComponent... o forse più
sotto...
Ciao, Davide DG

> Io credevo si facesse cosě, ma evidentemente non lo č:
Non č affatto facile, almeno all'inizio.
come tutti gli altri, anch'io ti consiglio di studiarti qualche bel librone
su delphi o almeno leggerti qualche tutorial presente sul web.
Ti consiglio di dare un'occhiata al progetto Jedi Dolphin
(
http://www.delphi-jedi.org/Jedi:KBASEDOLPHIN:527822410
)
ed anche al sito 
delphi3000.com
Qui c'č un interessante articolo sul modello ad oggetti di delphi
http://www.delphi3000.com/article.asp?ID=988
HTH, ciao