[Delphi] Używanie procedury classy na podstawe pointera

0

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ć?

0

override ;)

0

co tam robią pointery i wskaźniki??? Dlaczego klasy nazywasz od H??

0

Co rozumiesz przez override? Jesli wywoluje powiedzmy

Uklad.G1.UpdateList(VLE1)

to wszystko jest ok i dziala jak nalezy. Problem w tym ze nie wiem jak i gdzie przechowywac informacje o ostatnim wybranym elemencie zeby po OnValidate w ValueListEditor zapisac zmienione wartosci do odpowiedniego elementu.

H uzywam zeby rozroznic swoje klasy od standardowych, to chyba nie robi roznicy?

1 użytkowników online, w tym zalogowanych: 0, gości: 1