Přístup k property vnořených objektů – Delphi – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Přístup k property vnořených objektů – Delphi – Fórum – Programujte.comPřístup k property vnořených objektů – Delphi – Fórum – Programujte.com

 

Toto vlákno bylo označeno za vyřešené.
MilanL+1
Grafoman
22. 8. 2017   #1
-
0
-

Ahoj, potřeboval bych poradit snažím se vylepšit tvorbu reportů pomocí předdefinovaných šablon, šabloně potřebuji array nebo Tlist  Objektů s property

TCellProperty = class (TObject)
  private 
    fName : string[5];
    fValue : variant;
    fPosition : TPoint;
    fFont : TFont;
// atd...
  public
    property Name : string[5] read fName write fName;
    property Value : variant read fValue write fValue;

end;

TReport = class (TObject)
    fCells : array of TCellProperty;
//...
  public
    property Cells[index : integer] : ????
end;
  

a nevím to naprogamovat gettery a settery abych k těm property mohl přistupovat stylem Report.Cell[X].Font.Size := Trunc(Report.cell[Y].font.size * 1.5);
Report.Cell[X].point := TPoint(X,Y); atd..

Nahlásit jako SPAM
IP: 91.139.9.–
gna
~ Anonymní uživatel
1891 příspěvků
22. 8. 2017   #2
-
0
-

Řešíš jen to "Cells[X]". Další operace pak jdou přes vrácený objekt.

property Cells[index: integer]: TCellProperty read GetCell write SetCell;

function GetCell(index: integer): TCellProperty;
pricedure SetCell(index: integer; value: TCellProperty);
Nahlásit jako SPAM
IP: 213.211.51.–
MilanL+1
Grafoman
22. 8. 2017   #3
-
0
-

#2 gna
oki zítra v práci zkusím, díjky moc.

Nahlásit jako SPAM
IP: 185.112.167.–
MilanL+1
Grafoman
23. 8. 2017   #4
-
0
-

#2 gna
tak Getter funguje v pohodě přes result := fCells[index];

Ale toho Setteru si nevím rady, interně nebo když bych to pole Cells dal public, tak napřímo to funguje, přes Setter to nějak nefachá, není náhodou třeba udělat setter pro každou tu vlastnost cellproperty? jako 
property cellFont[index : integer] : TCellProperty write SetFont;

Leda snad vytvořit si pomocnou strukturu TCellProperty a pak jí do Cells[index] hodit celou najednou - otázkou jsou změny - znamenalo by to načíst si do pomocný stav udělat úpravy a pak to hodit zpátky. 

?

Nahlásit jako SPAM
IP: 91.139.9.–
MilanL+1
Grafoman
23. 8. 2017   #5
-
0
-

#4 MilanL
možná jsem se v původním dotazu špatně vyjádřil, jde mi o nastavování jednotlivých vlastností CellProperty, jako celek je to v pohodě, koukal jsem na zdroje, kde beru inspiraci a tam to je tedy řešený přes settery pro každou vlastnost CellProperty zvlášť. asi se na Set/Gettery vykašlu dám Cells array do základu třídy a budu přistupovat přímo, jen si musím pak v programu pohlídat indexy.

Nahlásit jako SPAM
IP: 91.139.9.–
gna
~ Anonymní uživatel
1891 příspěvků
23. 8. 2017   #6
-
0
-

   

A := report.Cells[X]; // TReport read Cells
report.Cells[X] := A; // TReport write Cells

B := report.Cells[X].Y;
// je jako
// tmp := report.Cells[X]; // TReport read Cells
// B := tmp.Y;             // TCellProperty read Y

report.Cells[X].Y := B;
// je jako
// tmp := report.Cells[X]; // TReport read Cells
// tmp.Y := B;             // TCellProperty write Y

Netuším, jak jsi ten getter napsal, ale když to jde přímo, tak to musí jít i přes něj.

Nahlásit jako SPAM
IP: 213.211.51.–
MilanL+1
Grafoman
23. 8. 2017   #7
-
0
-

#5 MilanL
Tak už mi to fachá, drobná chybička v Getteru jsem měl chybku v podmínce na kontrolu indexu. Vracelo mi to nesmyslný ukazatel EDIT: respektive ukazatel do prčíc.

Nevěděl jsem že i Setter si v podstatě pro adresu objektu sahá do Getteru.

Nahlásit jako SPAM
IP: 91.139.9.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 8 hostů

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý