Výsledky 1 až 24 z 24

Téma: [Delphi] Nepřímé připojení dat k objektu

  1. #1

    Standardní [Delphi] Nepřímé připojení dat k objektu

    Nevim jestli jsem nazval tento thread správně, ale problém je takovýto:
    Máme udělat lineární seznam, ktery obsahuje prvky typu TPrvek. TPrvek má atribut Naslednik:TPrvek. Potřebuji k prvku připojit data. Udělal jsem to tak, že jsem přidal nový atibut Data:String. Jenže takhle to nemá být. Prvek seznamu nemá v sobě nést data. Řešení je prý pomocí dědičnosti nebo pomocí tzv. háčku. Ale ani v jedno prípadě nevim jak na to. Data mohou být podle potřeby různá. Mohou být trojího typu:
    1. typ: 2 polozky(string,integer)
    2. typ: 3 polozky(string,string,integer)
    3. typ: 2 polozky(string,string)
    Vytvoril bych si tedy 3 třídy od každého typu dat jednu.
    Jak mám zajistit aby jsem měl k prvku připojen konkrétně jeden typ dat?
    NTB MSI EX600, CPU Intel Core 2 Duo T5550@1,83Ghz, 2GB RAM, GF8400M-G 256MB, HDD 320GB...

  2. #2

    Standardní Re: [Delphi] Nepřímé připojení dat k objektu

    Neporadím ti úplně konkrétně, protože to úplně nechápu... ale zkusil bych se podívat na přetížené (overloaded) funkce - nadefinuješ stejné fce (snad i třídy), s různými parametry a ono se to bude chovat podle toho jaké parametry k tomu dáš...

  3. #3
    Senior Member Avatar uživatele Anduril
    Založen
    12.10.2002
    Bydliště
    OVA, OL
    Věk
    42
    Příspěvky
    3 474
    Vliv
    324

    Standardní Re: [Delphi] Nepřímé připojení dat k objektu

    pomoci dedicnosti to muzes udelat tak, ze budes mit tridu TPrvek, ktera bude mit atribut Naslednik typu TPrvek. Trida TSeznam bude obsahovat atribut Prvni: TPrvek.
    Data zajistis treba tak, ze z tridy TPrvek "zdedis" sve tridy, ktere budou obsahovat jeste atributy pro tva data, libovolnych typu.
    Do seznamu pak bude pomoci metody "add" pridavat vzdy na konec (projdes si cyklem / rekurzi seznam od Prvni pres atributy Naslednik cely seznam az na konec) prvek, ktery bude instanci tve tridy rozsirujici TPrvek, ale pretypovane na TPrvek..cili pro seznam se bude tva trida tvarit jako TPrvek, bude mit atribut Naslednik. Pro tve potreby bude obsahovat data dle libosti (pro pouziti zase pretypujes zpet).

    Nebo muzes mit TPrvek, ktery bude obsahovat atribut Naslednik: TPrvek a atribut Data: TPrvekData. Pak si vytvoris tridu TMojeData, ktera bude rozsirovat TPrvekData a bude obsahovat atributy pro tva data. Do seznamu budes na konec pridavat instanci TPrvek, kde atribut Data bude odkazovat na instanci tridy TMojeData a podobne..

    A urcite jsou dalsi zpusoby
    Naposledy upravil Anduril; 12.03.2008 v 22:18.
    ntb: HP EliteBook 8460p i7-2640M | 8GB RAM | 120GB SSD + 500GB HDD | ATi HD6470 | 14" HD+ | W7 PRO
    home: HP Docking Station | HP L2045W | WD 500GB Scorpio Blue USB box
    work: HP Docking Station | HP L2445W
    audio: Epiphone G-400 SG + Sounder Telecaster | E-MU 0202 | Cambridge Audio Azur 340R | Wharfedale Diamond 9.2 | Magnat Betasub 20A | Sennheiser HD555

  4. #4

    Standardní Re: [Delphi] Nepřímé připojení dat k objektu

    Citace Původně odeslal Smitka Zobrazit příspěvek
    Neporadím ti úplně konkrétně, protože to úplně nechápu... ale zkusil bych se podívat na přetížené (overloaded) funkce - nadefinuješ stejné fce (snad i třídy), s různými parametry a ono se to bude chovat podle toho jaké parametry k tomu dáš...
    "Snad i třídy" To jde? Jinak zajímavá myšlenka. Jdu se pokusit to nějak zprovoznit. Kdyby měl někdo další nápady, tak sem s nimi
    NTB MSI EX600, CPU Intel Core 2 Duo T5550@1,83Ghz, 2GB RAM, GF8400M-G 256MB, HDD 320GB...

  5. #5

    Standardní Re: [Delphi] Nepřímé připojení dat k objektu

    2 Anduril: Tak toto se jeví jako jednodušší myšlenka Jen pro upresneni to ma byt seznam cyklicky s hlavou a mame implementovat metody pro vkládání na konec a za aktualni prvek, ale to na situaci moc nemění. Snad to dám do kupy, díky.
    NTB MSI EX600, CPU Intel Core 2 Duo T5550@1,83Ghz, 2GB RAM, GF8400M-G 256MB, HDD 320GB...

  6. #6
    Senior Member Avatar uživatele Anduril
    Založen
    12.10.2002
    Bydliště
    OVA, OL
    Věk
    42
    Příspěvky
    3 474
    Vliv
    324

    Standardní Re: [Delphi] Nepřímé připojení dat k objektu

    Jj, tak to uz je jedno jak to mezi sebou vnitrne propojis, na myslence to nic nemeni
    ntb: HP EliteBook 8460p i7-2640M | 8GB RAM | 120GB SSD + 500GB HDD | ATi HD6470 | 14" HD+ | W7 PRO
    home: HP Docking Station | HP L2045W | WD 500GB Scorpio Blue USB box
    work: HP Docking Station | HP L2445W
    audio: Epiphone G-400 SG + Sounder Telecaster | E-MU 0202 | Cambridge Audio Azur 340R | Wharfedale Diamond 9.2 | Magnat Betasub 20A | Sennheiser HD555

  7. #7

    Standardní Re: [Delphi] Nepřímé připojení dat k objektu

    Tak už jsem narazil. Mám v Třídě TSingleList tyto metody:
    constructor Vytvor(Hlava:TPrvek); Virtual;
    procedure Zrus(Parametr:Boolean);
    function JePrazdny:Boolean;
    function ZpristupniPrvni:TPrvek;
    procedure VlozPrvni(Prvni:TPrvek);
    procedure OdeberPrvni;
    procedure VlozNaslednika(Dalsi:TPrvek);
    procedure OdeberNaslednika;
    procedure SetAktualni(Prvek:TPrvek);
    function GetAktualni:TPrvek;

    Vetšina z nich má parametr typu TPrvek. Jenze já vytvářím objekty z třídy dědící po TPrvek, dejme tomu TPotomek1,TPotomek2 a TPotomek3. Z toho plyne že bych musel každou metodu s parametrem typu Tprvek přetížit 3x. Neexistuje jednodušší řešení?

    BTW: Jak bych přetížil třeba tuto funkci?
    function TSingleList.ZpristupniPrvni:TPrvek;
    begin
    ZpristupniPrvni:=FHlava.ZpristupniNaslednika;
    end;
    To asi nejde ne? Bych ji musel vlozit do třídy TPotomek a dat ji typ prislusneho potomka.
    Neztracíte se v tom? Ja jo
    NTB MSI EX600, CPU Intel Core 2 Duo T5550@1,83Ghz, 2GB RAM, GF8400M-G 256MB, HDD 320GB...

  8. #8

    Standardní Re: [Delphi] Nepřímé připojení dat k objektu

    Citace Původně odeslal Chuck Zobrazit příspěvek
    "Snad i třídy" To jde? Jinak zajímavá myšlenka. Jdu se pokusit to nějak zprovoznit. Kdyby měl někdo další nápady, tak sem s nimi
    Myslim, ze by to slo udelat pomoci ruznych konstruktoru s ruznyma parametrama. Ale na 100% to nereknu, jsem trochu zblblej z javy... Je to jen napad...

  9. #9
    Senior Member Avatar uživatele Anduril
    Založen
    12.10.2002
    Bydliště
    OVA, OL
    Věk
    42
    Příspěvky
    3 474
    Vliv
    324

    Standardní Re: [Delphi] Nepřímé připojení dat k objektu

    Nevim jak v Delphi (treba to neumi? nevim), ale imho by melo stacit, jak jsem psal, pri vkladani prvku tento pretypovat na TPrvek. Jelikoz tve tridy dedi z TPrvek a seznam pouziva pouze tridu TPrvek, pak by to melo stacit...
    Ten seznam by mel byt obecny, nevazat se na konkretni tridy, pouze na TPrvek. Nepotrebujes v nem pracovat s daty, takze tridy TPotomek1 a pod te vubec nezajimaji. Kdyz ze seznamu pak TPrvek dostanes, pretypujes si ho zpet na TPotomekX.
    Naposledy upravil Anduril; 13.03.2008 v 06:36.
    ntb: HP EliteBook 8460p i7-2640M | 8GB RAM | 120GB SSD + 500GB HDD | ATi HD6470 | 14" HD+ | W7 PRO
    home: HP Docking Station | HP L2045W | WD 500GB Scorpio Blue USB box
    work: HP Docking Station | HP L2445W
    audio: Epiphone G-400 SG + Sounder Telecaster | E-MU 0202 | Cambridge Audio Azur 340R | Wharfedale Diamond 9.2 | Magnat Betasub 20A | Sennheiser HD555

  10. #10

    Standardní Re: [Delphi] Nepřímé připojení dat k objektu

    Stejne jako v jinych objektove orientovanych jazycich se nemusi nic pretypovavat - resp. udela se tam implicitni pretypovani.


    Napr:

    Kód:
    TPrvek = class
     procedure Zpracuj(co: TPrvek);
    end;
    
    TDalsiPrvek = class (TPrvek)
    end;
    
    TDalsi2Prvek = class (TPrvek)
    end;
    v kodu pak muzes napsat toto:

    Kód:
    var 
      prvek: TPrvek;
      dalsiPrvek: TDalsiPrvek;
      dalsi2Prvek: TDalsi2Prvek;
    begin
      prvek = TPrvek.Create();
      dalsiPrvek = TDalsiPrvek.Create();
      dalsi2Prvek = TDalsi2Prvek.Create();
      prvek.Zpracuj(dalsiPrvek);
      prvek.Zpracuj(dalsi2Prvek);
    end;
    GigaByte GA-M55plus-S3G --- A64 3200+ @ 24oo ~ 1,375V BOX --- 2x512 Geil 667 CL4 @ 980 CL5 --- WD2500KS --- Acer AL1721ms --- 1/1 MBit/s via WiFi
    Blog

    09 F9 11 02 9D 74 E3 5B D8 41 56 C5 63 56 88 C0 aneb jeste ze ty "ochrany" programujou rozumny lidi :]

  11. #11
    Senior Member Avatar uživatele Anduril
    Založen
    12.10.2002
    Bydliště
    OVA, OL
    Věk
    42
    Příspěvky
    3 474
    Vliv
    324

    Standardní Re: [Delphi] Nepřímé připojení dat k objektu

    Jo, mas pravdu..smerem na TPrvek to pujde samo, ale zpet (z TPrvek na vlastni tridu) imho ne, tam to bude treba pretypovat.
    ntb: HP EliteBook 8460p i7-2640M | 8GB RAM | 120GB SSD + 500GB HDD | ATi HD6470 | 14" HD+ | W7 PRO
    home: HP Docking Station | HP L2045W | WD 500GB Scorpio Blue USB box
    work: HP Docking Station | HP L2445W
    audio: Epiphone G-400 SG + Sounder Telecaster | E-MU 0202 | Cambridge Audio Azur 340R | Wharfedale Diamond 9.2 | Magnat Betasub 20A | Sennheiser HD555

  12. #12

    Standardní Re: [Delphi] Nepřímé připojení dat k objektu

    Jj, je to tak. Jsem zapomněl vytvořit seznam, tak mě to házelo chybu na řádku kde jsem vkládal do metody parametr jiného typu a já myslel že je to tím...
    NTB MSI EX600, CPU Intel Core 2 Duo T5550@1,83Ghz, 2GB RAM, GF8400M-G 256MB, HDD 320GB...

  13. #13

    Standardní Re: [Delphi] Nepřímé připojení dat k objektu

    Nejak se mi nedaří zprovoznit vypsání dat. Asi jsem to nepochopil správně. Chci to realizovat asi takto: Budu procházet seznam od začátku do konce a na každém prvku bych chtěl vyvolat metodu VypisSe. Podle výše uvedených poznatků predpokládám že prvky jsou v seznamu uloženy jako typ TPrvek(implicitni pretypovani). Ted nemůžu přijít na myšlenku jak přetypovat prvek seznamu zpět na typ TPotomekX, abych z něho dostal data. Respektive podle čeho poznám na jaký typ se to má přetypovat, když jsou tři varianty?
    Snad jsem to napsal srozumitelne...
    NTB MSI EX600, CPU Intel Core 2 Duo T5550@1,83Ghz, 2GB RAM, GF8400M-G 256MB, HDD 320GB...

  14. #14
    Senior Member Avatar uživatele Anduril
    Založen
    12.10.2002
    Bydliště
    OVA, OL
    Věk
    42
    Příspěvky
    3 474
    Vliv
    324

    Standardní Re: [Delphi] Nepřímé připojení dat k objektu

    Pokud tuto metodu das i do tridy TPrvek a v tride TPotomekX ji spravne pretizis podle potreby, staci pak, kdyz budes volat vypisSe() na TPrvek..
    Jinak verim, ze i deplhi ma nejaky operator "instanceof" nebo neco takoveho, cim zjistis, jestli je dany objekt instanci nejake tridy.
    ntb: HP EliteBook 8460p i7-2640M | 8GB RAM | 120GB SSD + 500GB HDD | ATi HD6470 | 14" HD+ | W7 PRO
    home: HP Docking Station | HP L2045W | WD 500GB Scorpio Blue USB box
    work: HP Docking Station | HP L2445W
    audio: Epiphone G-400 SG + Sounder Telecaster | E-MU 0202 | Cambridge Audio Azur 340R | Wharfedale Diamond 9.2 | Magnat Betasub 20A | Sennheiser HD555

  15. #15

    Standardní Re: [Delphi] Nepřímé připojení dat k objektu

    Tu metodu VypisSe mam dát jako abstraktni? Nebo mám v TPrvek vytvořit tělo metody VypisSe(Prvek:TPrvek), kde zjistim(jetli to teda nějak jde) z jaké třídy je vytvořen parametr metody a podle toho přetypuji parametr na správný typ u kterého pak vyvolám metodu VypisSe?
    NTB MSI EX600, CPU Intel Core 2 Duo T5550@1,83Ghz, 2GB RAM, GF8400M-G 256MB, HDD 320GB...

  16. #16
    Senior Member Avatar uživatele Anduril
    Založen
    12.10.2002
    Bydliště
    OVA, OL
    Věk
    42
    Příspěvky
    3 474
    Vliv
    324

    Standardní Re: [Delphi] Nepřímé připojení dat k objektu

    tak v podstate to jde tak i tak. Prvni zpusob bude lepsi.
    ntb: HP EliteBook 8460p i7-2640M | 8GB RAM | 120GB SSD + 500GB HDD | ATi HD6470 | 14" HD+ | W7 PRO
    home: HP Docking Station | HP L2045W | WD 500GB Scorpio Blue USB box
    work: HP Docking Station | HP L2445W
    audio: Epiphone G-400 SG + Sounder Telecaster | E-MU 0202 | Cambridge Audio Azur 340R | Wharfedale Diamond 9.2 | Magnat Betasub 20A | Sennheiser HD555

  17. #17

    Standardní Re: [Delphi] Nepřímé připojení dat k objektu

    Citace Původně odeslal Anduril Zobrazit příspěvek
    tak v podstate to jde tak i tak. Prvni zpusob bude lepsi.
    pořádně nechápu užití abstraktní a virtuálni metody. Mám to zatím takto:
    TPrvek:
    interface
    constructor Init;
    procedure VypisSe; Virtual; Abstract;

    implementation
    constructor TPrvek.init;
    begin
    Naslednik:=nil;
    end;

    TPotomek1:
    procedure VypisSe; Override;
    begin
    Edit.Text:=Atribut; //Atribut je string
    end;

    TPotomek2:
    procedure VypisSe; Override;
    begin
    Edit.Text:=Atribut; //Atribut je string
    end;

    Takhle to nikdy nemůže fungovat že?
    NTB MSI EX600, CPU Intel Core 2 Duo T5550@1,83Ghz, 2GB RAM, GF8400M-G 256MB, HDD 320GB...

  18. #18

    Standardní Re: [Delphi] Nepřímé připojení dat k objektu

    Ejhle, ono to více méně takto funguje Nevim jak se mi to podarilo, ale je to tak. Ani jsem nemusel nic přetypovávat...
    NTB MSI EX600, CPU Intel Core 2 Duo T5550@1,83Ghz, 2GB RAM, GF8400M-G 256MB, HDD 320GB...

  19. #19

    Standardní Re: [Delphi] Nepřímé připojení dat k objektu

    Nebudu zakládat nový thread tak to hodim sem. Ještě potřebuju vytvořit metodu v třídě TPrvek aby vypisovala atributy do souboru. Na netu jsem něco nastudoval. Když je atribut typu string tak se mi do souboru uloží nesmyslný znaky. Pokud je char, tak se to uloží OK.

    stream je vytvoren takto
    Kód:
    Soubor:=TFileStream.Create(SaveDialog.FileName,fmCreate);
    a metoda
    Kód:
    procedure TSpravceData.Akce(Soubor:TFileStream);
    begin
      Soubor.Write(Atribut,SizeOf(Atribut));
    end;
    NTB MSI EX600, CPU Intel Core 2 Duo T5550@1,83Ghz, 2GB RAM, GF8400M-G 256MB, HDD 320GB...

  20. #20

    Standardní Re: [Delphi] Nepřímé připojení dat k objektu

    Nevíte tady jak do souboru zapsat string pomocí streamu?
    NTB MSI EX600, CPU Intel Core 2 Duo T5550@1,83Ghz, 2GB RAM, GF8400M-G 256MB, HDD 320GB...

  21. #21

    Standardní Re: [Delphi] Nepřímé připojení dat k objektu

    Stream.Write(promenna, pocet_znaku_v_stringu*sizeof(char));
    GigaByte GA-M55plus-S3G --- A64 3200+ @ 24oo ~ 1,375V BOX --- 2x512 Geil 667 CL4 @ 980 CL5 --- WD2500KS --- Acer AL1721ms --- 1/1 MBit/s via WiFi
    Blog

    09 F9 11 02 9D 74 E3 5B D8 41 56 C5 63 56 88 C0 aneb jeste ze ty "ochrany" programujou rozumny lidi :]

  22. #22

    Standardní Re: [Delphi] Nepřímé připojení dat k objektu

    Citace Původně odeslal MEluZíNa Zobrazit příspěvek
    Stream.Write(promenna, pocet_znaku_v_stringu*sizeof(char));
    Tak jsem to zkusel a nešlo mi to a nakonec jsem našel že to ma byt asi takto

    Soubor.Write(String[1],Length(String));

    Sice nechápu co znamená ten index, ale asi to bude něco s polem... Každopádně to ale funguje. Teď nemůžu přijít na to jak mám odřádkovat na dalsí řádek... Seek a positition me posuvaji po radku
    NTB MSI EX600, CPU Intel Core 2 Duo T5550@1,83Ghz, 2GB RAM, GF8400M-G 256MB, HDD 320GB...

  23. #23

    Standardní Re: [Delphi] Nepřímé připojení dat k objektu

    Nojo, melo by to byt spis takle:

    Stream.Write(@string, Length(string)*sizeof(char));

    Protoze write metoda si bere pointer do pameti a delku v bytech. Pak takovy usek v pameti zapise do streamu.

    Jinak, pokud chces textovy soubor tak si najdi neco o "textfile". A hlavne si najdi knizku, ze ktery se to naucis, takle skladat vedomosti po drobkach je dost na nic...
    GigaByte GA-M55plus-S3G --- A64 3200+ @ 24oo ~ 1,375V BOX --- 2x512 Geil 667 CL4 @ 980 CL5 --- WD2500KS --- Acer AL1721ms --- 1/1 MBit/s via WiFi
    Blog

    09 F9 11 02 9D 74 E3 5B D8 41 56 C5 63 56 88 C0 aneb jeste ze ty "ochrany" programujou rozumny lidi :]

  24. #24

    Standardní Re: [Delphi] Nepřímé připojení dat k objektu

    A nevis jak na to odradkovani? Ja bych to delal taky jako textfile, ale ten se mi nepodarilo dat jako parametr do metody, tak to musim delat pres stream.
    delal jsem to takhle a neslo to
    Metoda(Soubor:TextFile);

    EDIT: Aha ja jsem trotl RTFM!!! Metoda(var Soubor:Text);
    Naposledy upravil Chuck; 17.03.2008 v 18:36.
    NTB MSI EX600, CPU Intel Core 2 Duo T5550@1,83Ghz, 2GB RAM, GF8400M-G 256MB, HDD 320GB...

Informace o tématu

Users Browsing this Thread

Toto téma si právě prohlíží 1 uživatelů. (0 registrovaných a 1 anonymních)

Podobná témata

  1. ipconfig - Vista
    Založil -Braba- v sekci fóra Sítě
    Odpovědí: 2
    Poslední příspěvek: 11.03.2008, 10:31
  2. Sdílení internetového připojení ve Windows Vista
    Založil sergiX v sekci fóra Sítě
    Odpovědí: 0
    Poslední příspěvek: 29.12.2007, 19:18

Pravidla přispívání

  • Nemůžete zakládat nová témata
  • Nemůžete zasílat odpovědi
  • Nemůžete přikládat přílohy
  • Nemůžete upravovat své příspěvky
  •