Newsgroup: it.comp.lang.delphi
Titolo: Coversione da String in ComPort

Salve volevo sapere come posso fare per convertire una sting in ComPort?
Ho Dialer32Plus.
Es:
ComboBox1.TString = COM1; COM2; COM3; COM4;
procedure TForm1.SpeedTelClick(Sender: TObject);
var
  TempDialer : TDialer;
begin
  TempDialer:=TDialer.Create(Self);
  with TempDialer do
  begin
    ComPort:=ComboBox1.Text;
    Confirm:=True;
    DialCommand:='ATDT';
    NumberToDial:=DBTelAss.Text;
    Language:=dlItalian;
    Execute;
    Free;
  end;
end;
Siccome devo far in modo che ComPort:=ComboBox1.Text;
Sto impazzendo.

 procedure TForm1.SpeedTelClick(Sender: TObject);
 var
   TempDialer : TDialer;
 begin
   TempDialer:=TDialer.Create(Self);
   try
     with TempDialer do
     begin
     ComPort:=ComboBox1.Text;
     Confirm:=True;
     DialCommand:='ATDT';
     NumberToDial:=DBTelAss.Text;
     Language:=dlItalian;
     Execute;
 finally
     Free;
  end;
   end;
 end;
Bye
A.

  end;
...e dalle... se assegni un owner devi fare a meno di liberare in modo
esplicito...

"Andrea Laforgia" <x@x.x> a écrit dans le message news:
a19l1v4omjjvjhh1g...@4ax.com...

Non DEVI, ma PUOI.
IceCream

Non DEVI, ma PUOI.
Non DEVI e basta, indi non PUOI.

esplicito...
Perche'? C'e' il rischio che si creino dei memory leaks?
Mi interessa capire se questo codice e' o non e' corretto:
var oggetto :TOggetto;
begin
   oggetto := TOggetto.Create(self);
   oggetto.metodo1;
   oggetto.metodo2;
   ..... altro codice....
   oggetto.Free;
end;
ciao!
Morde.
morde [at] programmer [.] net

Perche'? C'e' il rischio che si creino dei memory leaks?
Affidare i tuoi oggetti a un Owner significa rilasciarne il possesso,
il che vuol dire che sara` lui a liberare gli oggetti posseduti.
Non devi farlo tu.  O crei usando "nil" come parametro e ti occupi di
liberare l'oggetto, oppure lo affidi a un owner e non ci pensi piu`.

"Andrea Laforgia" <x@x.x> a écrit dans le message news:
vpcl1vsrjepot2e32...@4ax.com...

Hai provato? Il Free controlla se l'Owner è definito. Se lo è, si leva dalla
lista di componenti dell'Owner. Quidi *puoi*.

liberare l'oggetto, oppure lo affidi a un owner e non ci pensi piu`.
Ok, grazie per il chiarimento.
ciao


Quidi *puoi*.
Non DEVI, e` questo il punto che non arrivi a comprendere.

 Non DEVI, e` questo il punto che non arrivi a comprendere.
No! Se chiami il Free dell'oggetto che hai creato dando un valore all'Owner
(una Form, per esempio), questo andrà a verificare che l'Owner non è nil, e
poi si leva dalla lista dell'Owner. Se invece hai creato con AOwner=nil, il
controllo basta.
Ovviamente, se l'owner che hai dato alla creazione non è valido hai
problemi. Ma se distruggi l'owner prima, quest'ultimo chiamerà il free di
ogni componente che possiede. Quindi PUOI ma non DEVI (eccetto il caso
indicato qui sopra).
Ora mi sono stancato. Pensaci sopra un pò o lascia perdere.
IceCream

ogni componente che possiede. 
Non e` di questo che si sta parlando.
Ora, d'altronde, mi sono stancato anch'io.

Vai a vedere come č fatto TComponent.Destroy e vedrai che non sto parlando
di TObject.Free. Il controllo c'č.

 Non DEVI e basta, indi non PUOI.
ma, a dir la verita', nessuna delle due mi pare valida.
Effettivamente, la documentazione e' non prescrittiva riguardo a questo
punto. Ovvero, dice che se si passa nil come Owner occorre chiamare il
Free sul componente creato: "The owner disposes of the component when it
is destroyed. If the component is not owned, then use Free when it needs
to be destroyed".
Ma nulla dice sul fatto di chiamare il free di un componente con un
Owner valido: ed infatti, se chiami esplicitamente Free su un componente
con un Owner, il metodo Destroy di TComponent si occupa di levare il
riferimento a se' stesso dalla lista Components dell'Owner:
  if FOwner <> nil then FOwner.RemoveComponent(Self);
  inherited Destroy;
Infine, la documentazione e' prescrittiva su come debba essere scritto
il distruttore: "When declaring a Destroy method in a descendant, always
add the override directive to the declaration and call the inherited
Destroy as the last statement in the overriding method." e quindi tutti
i componenti _devono_ fare come TComponent.
Saluti
Paolo Arosio