Witam,
Piszę program i mam mały zgryz.
Stworzyłem sobie nową klasę HElement, następnie stworzyłem sobie kilka klas które dziedziczą po HElement (HGuzik, HKabel itp).
Teraz tworzę listę takich elementów, mogę na dany element kliknąć na formatce i edytować jego parametry w ValueListEdit i wszystko trybi.
Problem się zaczął kiedy chciałem zapisać zmiany z VLE do danego obiektu.
Użyłem więc pointera który jest ustawiany po kliknięciu na dany element ale problem teraz jak go wykorzystać w drugą stronę? tzn jak ustawić klasę do której musi odbyć się zapis.
Troszkę kodu:
...
type
HElement = class(TObject)
public
function UpdateList(var VL: TValueListEditor):Pointer; virtual; abstract;
procedure UpdateValues(var VL: TValueListEditor); virtual; abstract;
end;
HGuzik = class(HElement)
Nazwa: string;
Stan: Integer;
function UpdateList(var VL: TValueListEditor):Pointer;
procedure UpdateValues(var VL: TValueListEditor);
end;
HKabel = class(HElement)
Nazwa: string;
Dlugosc: Integer;
function UpdateList(var VL: TValueListEditor):Pointer;
procedure UpdateValues(var VL: TValueListEditor);
end;
TUklad = class
G1: HGuzik;
G2: HGuzik;
K1: HKabel;
K2: Hkabel;
OstatniWybranyElement: ^HElement;
end;
...
var
Uklad: TUklad;
UpdateList jest różny dla różnych klas np:
function HGuzik.UpdateList(var VL: TValueListEditor):Pointer;
begin
VL.Strings.Clear;
VL.InsertRow('Nazwa',Nazwa,true);
VL.InsertRow('Stan',IntToStr(Stan),true);
Result:=Self;
end;
Wszystko pięknie trybi, problem w tym, że nie wiem jak wywołać UpdateValues żeby zmieniły się wartości w odpowiedniej klasie.
Nie mogę wywołać
HElement(Uklad.OstatniWybranyElement).UpdateValues(VLE1)
bo się sypie program (procedura abstrakcyjna) bo HElement nie ma zdeklarowanej tej procedury.
Jak to inaczej mogę wywołać?