Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailemVyřešeno Delphi - prístup k "hlavnej" vlastnosti objektu priamo

Ako urobiť, aby som mal prístupnú položku v objekte tak, ako keby tá položka bola premenná?

a = object
  Items: array[0..15, 0..15] of Byte;
  Vlastnost: Integer;
end;

A teraz chcem použiť takýto prístup:

a[2, 3] := 5;
a.Vlastnost := 456;

Mám na mysli niečo táketo:

TStringList.Lines[5]
TStringList.Lines.Add
Předmět Autor Datum
Použij atribut DEFAULT u vlastnosti. ;-) (pozor, má dva významy, nutno použít ve tvaru: PROPERTY Vla…
Rce 14.06.2006 12:00
Rce
A ako má vyzerať deklarácia štandardnej metódy read a write pre takýto prípad? Rozumiem síce prečo…
msx. 14.06.2006 12:34
msx.
Slova read a write (jsou to jen syntaktické konstrukce, ne metody ale metody mohou zavolat) jsou úpl…
Rce 14.06.2006 23:20
Rce
Ďakujem. Ale ešte poznámka: Ale veď tam je uvedené slovo property: property Items [I, J: integer]:…
msx. 15.06.2006 20:50
msx.
V mém příkladu ano, to je vlastnost. Ale ne jak jsi uvedl nahoře, to je jen člen :-);-): a = object…
Rce 15.06.2006 22:36
Rce
Aha, rozumiem.:-)
msx. 16.06.2006 06:23
msx.
Property je vlastnost v Object Inspectore... cize to, co mozes nastavit...
Intex 16.06.2006 11:03
Intex
Ó, ne tak docela...;-) V object inspektoru můžeš nastavit pouze PROPERTY ze sekce PUBLISHED. poslední
Rce 16.06.2006 13:04
Rce

A ako má vyzerať deklarácia štandardnej metódy read a write pre takýto prípad?

Rozumiem síce prečo je tam to read a write (ja to tam aj budem potrebovať, lebo pri zápise sa bude vykreslovať na Canvas), ale neviem ako má vyzerať deklarácia.

Slova read a write (jsou to jen syntaktické konstrukce, ne metody ale metody mohou zavolat) jsou úplně stejné, jako pro normální vlastnost (nebo můžou i chybět pro vlastnost "jen ke čtení" nebo "Jen k zápisu"). Direktiva DEFAULT jen říká kompilátoru, že volání je možno zkrátit zápis při použití vlastnosti a kompilátor to přeloží, jako kdyby se to volalo celé. Označuje defaultní (implicitní) vlastnost, ke které se přistupuje jen jménem objektu.
Příklad (jak si to asi představuješ - asi chceš vidět i jak se vlastnosti indexují :-) ):

type 
TPokus = object
   private
   fItems: array[0..15, 0..15] of Byte;
   procedure SetItems (I, J: integer; Value: byte);
   function GetItems (I, J: integer): byte;
   public //(nebo PROTECTED jestli se k tomu přistupuje jen z nadtřídy)
   property Items [I, J: integer]: byte read GetItems write SetItems; default;
end;

// Poznámka: V čtenáři/zapisovateli nemám ošetřen index mimo pole
procedure TPokus.SetItems (I, J: integer; Value: byte); 
begin 
   fItems [I, J] := Value 
end;

function TPokus.GetItems (I, J: integer); 
begin 
   Result := fItems [I, J] 
end;

K vlastnosti pak můžeš přistupovat dvojím způsobem (díky frázi DEFAULT):

Pokus: TPokus;
...
Pokus := TPokus.Create ();
...
Pokus.Items [1, 1] := 255;
// nebo totéž
Pokus [1, 1] := 255;

BTW tak jak jsi to uvedl ty, to nejsou vlastnosti (musí být uvedeny slovem PROPERTY) ale členy.

Zpět do poradny Odpovědět na původní otázku Nahoru