Newsgroup: it.comp.lang.delphi
Titolo: tipo record

Ciao a tutti,
In Delphi2006 ho riscontrato questa "anomalia"
tmiorecord = record
var1: integer
var2: integer
ary: array[0..2] of boolean
ho poi dimensionato una variabile
miorecord: tmiorecord;
nel codice se faccio
miorecord.ary[0] := True;
mi risponde "left side can't assigned to [..]"
se faccio
with miorecord do
  ary[0] := True;
va tutto bene
Sapete dirmi il perchè ?
Grazie
Massimo

 In Delphi2006 ho riscontrato questa "anomalia" [...]
Io ho verificato il caso che hai scritto e non riscontro l'errore.
Forse c'è qualcos'altro nel codice, magari un'ambiguità, che fa sì che 
il compilatore consideri un dato differente da quello desiderato.
Se il codice esemplificativo che hai scritto è diverso da quello 
effettivo, posta quest'ultimo.
Ciao,
   Marco.
-- 
MARCO BREVEGLIERI
  (
http://www.marco.breveglieri.name
)

ho provato
type tmiorecord = record
      var1: integer;
      var2: integer;
      ary: array[0..2] of boolean;
      end;
Var
  miorecord: tmiorecord;
procedure TForm1.Button1Click(Sender: TObject);
begin
   miorecord.ary[0] := True;
end;
e funziona, o meglio non da errori durante la compilazione.
-- 
-------------------------------
per scrivere in privato
togliere "1975nosp"
to reply remove "1975nosp"

Sapete dirmi il perchč ?
Hai due variabili diverse che chiami miorecord, forse una locale: usa il 
"trova"
Giorgio 

 effettivo, posta quest'ultimo.
Allora, mi ricordavo male, qui sotto posto il codice
Se copi+incolli funziona, ma prova a cambiare
  with Protection do
    ary[0] := True;
con
Protection.ary[0] := True;
e vedi l'errore
unit Unit1;
interface
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls,
Forms,
  Dialogs, StdCtrls;
type
  TProtection = record
    var1: integer;
    var2: integer;
    ary: array[0..2] of boolean;
  end;
  TForm1 = class(TForm)
  public
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
    FProtection: TProtection;
  public
    property Protection :  TProtection read FProtection write
FProtection;
    { Public declarations }
  end;
var
  Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
  with Protection do
    ary[0] := True;
end;

 Protection.ary[0] := True;
E' una delle tante incongruenze di Delphi: benché inspiegabilmente idiota
come comportamento, il sistema non sa, nel secondo caso, se stai chiamando
il property getter o il property setter (è lo stesso motivo per cui non
funzionano gli inc/dec sulle property).  Nel primo caso è invece chiaro
che ti stai riferendo prima al property getter e poi al property setter.
Tra parentesi, la distinzione che Delphi fa rispetto tra property e
variabili normali è veramente antipatica.  In altri linguaggi che fanno
uso di property (vedi Python) queste differenze non esistono.
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 E' una delle tante incongruenze di Delphi:
Non mi è molto chiaro il perchè: potresti farmi un esempio più
concreto
Massimo

 il property getter o il property setter
Adesso Delphi 2006 considera i record come classi? Ho provato il codice
con Delphi 5 e non dà nessun errore.

Ho provato il codice con Delphi 5 e non dÃ  nessun errore.
E' vero, con D5 non dà errore, ma con D6 sì.


 Huh ? che c'entra scusa ?
Stavi parlando di property getter e setter, che a quanto mi risulta,
(almeno su D5), esistono solo per le classi, e non per i record.
Se ho capito cosa volevi dire ;)

 Se ho capito cosa volevi dire ;)
Non hai capito.  Parlavo di property getter/setter in riferimento a una
property di tipo record.


 property di tipo record.
... l'OP ha chiesto di record, non di property di tipo record. Se poi tu
*presumevi*, allora potevi spiegarti meglio.

 ... l'OP ha chiesto di record, non di property di tipo record.
Cancello il precedente messaggio, ho letto solo ora il secondo post di Max.
:-)
-- 
#@!&