Newsgroup: it.comp.lang.delphi
Titolo: property array of record

ho bisogno di creare una property di tipo array of integer,
prendendo spunto da questo
http://delphi.xcjc.net/viewthread.php?tid=43739
 
 
type
   TInteger = integer;
   TDatiId = array [0..4] of TInteger;
 
type
   Tfrm_Dati_Anagrafe = class(TDataModule)
 
   private
     { Private declarations }
     FDatiId: TDatiId;
 
   protected
     function getDatiId(index: integer): TInteger;
     procedure setDatiId(index: integer; scale: TInteger);
 
   published
     property DatiId[index: integer]: TInteger read getDatiId write 
setDatiId;
 
compilando mi da errore:
[DCC Error] unt_Dati_Anagrafe.pas(324): E2188 Published property 
'DatiId' cannot be of type ARRAY

Le proprietà che gestiscono array non possono essere inserite sotto la 
clausola published (mettila sotto public e vai tranquillo)
 
Ps. non capisco la ridefinizione di integer con Tinteger


veramente mi sono posto la stessa domanda, ma dato che nell'esempio
lo hanno fatto con doble, ho pensato che non fosse possibile usare 
direttamente il tipo.
grazie molte.
 

 grazie molte.
 

 
 
IChaosBase = Interface(IUnknown)
  ['{C6661345-26D1-D611-9FAD-C52B9EAAF7C0}']
    function getScales(*CONST* index: integer): Tdouble; stdcall;
    procedure setScales(*CONST* index: integer; *CONST* scale: Tdouble); stdcall;
    property scales[*CONST* index: integer]: TDouble
                            read getScales write setScales;
  end;
 
 
 
type
   // TOTALMENTE INUTILE, SALVO CHE IN FUTURO NON SI PREVEDE
   // DI SOSTITUIRE IL DOUBLE CON UN TIPO RECORD/CLASSE/INTERFACCIA
  TDouble = double; 
   //==============================================
 
  TDoubleArray = array[1..4] of TDouble;
 
  TChaosBase = class(TInterfacedObject, IChaosBase)
   protected
     // XCHE LA T DAVANTI A TDOUBLE E NON LA F DAVANTI AI MEMBRI?
     myscales: TDoubleArray;
     //====================
 
     function getScales(*CONST* index: integer): TDouble; stdcall;
     procedure setScales(*CONST* index: integer; *CONST* scale: TDouble); stdcall;
     property scales[*CONST* index: integer]: TDouble
                      read getScales write setScales;
   end;
 
 
QUESTA CLASSE HA SOLO METODI PROTETTI.
ERGO: SE LA CREI DA UNA FORM NON CI FAI UN KAZZEN....
ANCORA, XCHE STDCALL? XCHE NON REGISTER O SAFECALL o cdecl?
Ancora, se non ricordo male nelle ultime versioni di winzozz queste cose non hanno piu' senso in quanto hanno uniformato lo standard di passaggio dei parametri.
 
 
function TChaosBase.getScales(index: integer): Tdouble;
begin
// COSA SUCCEDE SE INDEX NON E' COMPRESO TRA 1 E 4???
  result:=myscales[index];
end;
 
 
procedure TChaosBase.setScales(index: integer; scale: Tdouble);
begin
// COSA SUCCEDE SE INDEX NON E' COMPRESO TRA 1 E 4???
  myScales[index]:=scale;
end;  
 
Mi fermo qua che oggi sono particolarmente buono.....
 
A.
 

>
E' vero che non si deve mai dare niente per scontato, e che quello che 
si trova, fatto da quelli che ne sanno di piu', spesso e' non e' lineare 
o fatto secondo gli standard, ma puo' essere un punto di partenza.
Senza almeno provare un qualcosa di diverso da una procedure/function in 
Public a cui passare l'array, non sarei mai arrivato a cercare come
trattare un array su property.
Almeno quello che ho trovato, e' servito, per aprire una discussione 
qui, e capire che al solito non tutto cio' che luccica e' oro.

E' si di cose cosi' ne � pieno il web.
Comunque mai visti tanti errori/dimenticanze/cavolate su un codice cosi' 
piccolo ;)
 


Hai provato cosi':
 
published
     property DatiId: TDatiId read getDatiId write setDatiId;
 
G.
 

Mi sono registrato per poter scrivere un commento MA NON POSSO...
Ho scritto al gestore del sito per avere i grant.
E' paradossale che si possa pubblicare sul web qlcs di sbagliato e poi chi vuole mettere delle indicazioni sugli errori non possa farlo....
 
A

Ci sono riuscito! :-D
 
A.

Congratulazioni! Come vedi mai darsi per vinti