Autor Téma: V cykle mám Items.Assign - pri uvoľňovaní AV  (Přečteno 25 krát)

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4633
  • Karma: 40
    • Verze Delphi: XE7 professional
V cykle mám Items.Assign - pri uvoľňovaní AV
« kdy: 25-01-2020, 17:55:05 »
Kód: Delphi [Vybrat]
  1.   for I := 0 to lstPatternFlatRoom[Kind].Count - 1 do
  2.     lstPatternFlatRoom[Kind][I].cbbTitle.Items.Assign(lstTitle);
Podľa návodu sa skopíruje aj objekt. Ja to chápem tak, že sa vytvorí nová inštancia. Podľa všetkého to je ináč. Pri čistení prvého cbbTitle.Items to zbehne a pri ďalších to už hádže AV.
Vysvetlí mi to niekto?
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 2646
  • Karma: 133
    • Verze Delphi: D2007, XE3, DX10
Re:V cykle mám Items.Assign - pri uvoľňovaní AV
« Odpověď #1 kdy: 25-01-2020, 19:15:01 »
Kód: Delphi [Vybrat]
  1.   for I := 0 to lstPatternFlatRoom[Kind].Count - 1 do
  2.     lstPatternFlatRoom[Kind][I].cbbTitle.Items.Assign(lstTitle);
Podľa návodu sa skopíruje aj objekt. Ja to chápem tak, že sa vytvorí nová inštancia. Podľa všetkého to je ináč. Pri čistení prvého cbbTitle.Items to zbehne a pri ďalších to už hádže AV.
Vysvetlí mi to niekto?
Vzdyt to je porad to same: to cisteni ti zrejme uvolni instance objektu a zbydou ti na ne odkazy do nikam tj. na neexistujici objekty.

Jestli mas zdrojovky, tak prece nemuze byt zadny problem, abys zjistil, co presne dela Assign (velmi pravdepodobne jen zkopiruje ukazatel na instanci objektu) a co se deje pri tom tvem cisteni. Jak jsi uz nekdy psal, se standardnim ComboBoxem jsi problemy nemel.

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4633
  • Karma: 40
    • Verze Delphi: XE7 professional
Re:V cykle mám Items.Assign - pri uvoľňovaní AV
« Odpověď #2 kdy: 25-01-2020, 20:01:12 »
To je trochu iné. Je to štandardný ComboBox, ale ako vidieť v ukážke, tak zoznam priraďujem do viacerých ComboBoxov. V tom je ten problém. Asi sa musím pozrieť do zdrojáka :(  V helpe sa píše, že sa skopíruje objekt. Všetko nasvedčuje tomu, že sa skopíruje len ukazovateľ.
Chcel som skrátiť čas vytvárania formulára. Tak zbežne som zistil, že je jedno či použijem uvedenú konštrukciu, alebo si každý ComboBox naplním samostatne. Tým to je vyriešené.
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.