Tworzenie komponentów

0

Słowem wstępu: Jestem ?dość? początkujący jak chodzi o pisanie własnych komponentów, ale wszystkie konwencjonalne źródła wiedzy zamiast pomóc mi rozwiązać problem, wprowadzają mnie w błąd (!).

Tworze nową kontrolkę TFlaLabel na bazie TLabel. Wszystko chodzi z wyjątkiem procedury Create dla nowego komponentu:

constructor TFlaLabel.Create(AOwner : TComponent);
begin
inherited
FlashEnabled := True;
FFlaschRate := 800;

Timer := TTimer.Create(Self);
Timer.Interval := FFlaschRate;
Timer.OnTimer := OnTimer;
end;

Kod nie przechodzi nawet kompilacji. Podejrzewam, że to, dlatego że książka jest do D4 a ja pisze w D5 ;(.
Może ktoś miał już podobny kłopot??

0

begin
inherited
FlashEnabled := True;

a nie ma być:

begin
inherited create
FlashEnabled := True;

[???]

0

Właśnie nie :( , też nie chodzi.
Error: Not enough actual parameters. Dodam, że przechodzi tylko wtedy, jak całkiem usunie się słowo inherited, ale wtedy wysypuje się podczas działania programu.

0

Przypuszczam że piszesz ten komponent na podstawie książki Delphi 4 dla każdego. Jeżeli chodzi o ten kod to jedyną różnica jaką zauwazyłem jest to, że przypisujesz wartośc własciwości FlashEnabled a nie FFlashEnabled. Może o to chodzi, ale jeżeli nie to porównaj sobie swój kod z przykładami do nowszej wersji ksiązki z której korzystasz - Delphi 6 dla każdego.

0

Jak się wpisze:

constructor TFlaLabel.Create(AOwner : TComponent);
begin
inherited Create(AOwner);
...
end.

To podczas wykonywania programu: Acces violation at address 0044055C in module 'Project1.exe'. Read of adderss 00000038.

0

Sprawdź deklarację czy jest:

constructor Create(AOwner : TComponent); override

Konstruktor musi być przedefiniowany jak wyżej.

Sprawdź budowę kontruktora w TLabel .. wynika, że jest dobrze.

0

no a spróbuj "wyciąć" wszystko poza dziedziczonym kostruktorem czyli

...
inherited Create(AOwner);
...

i sprawdzic czy zadziala jesli tak to szukaj bledów dalej az natkniesz sie na blad... . Troche lamerski sposób no ale w koncu sie dojdzie... ;)

0

Panowie, nie o to chodzi prawdopodobnie. Po pierwsze. Konstruktor nie musi być override.
A zapis: inherited = inherited create
(oczywiście w konstruktorze)

Poza tym, jak bym, jako klasę bazową wybrał TCustomLabel, a nie TLabel.

I wracając do Twojego problemu, prawdopodobnie chodzi o Timer:

Timer.onTimer:=OnTimer;

Sprawdź swoją procedurę onTimer, czy ma takie parametry, jakie powinna mieć.
(bodajże: onTimer(Sender: TObject))

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