Zacząłem uczyć się Delphi dwa dni temu, ale utknąłem. Zepsułem się, ponieważ nic nie idzie po mojej myśli, więc postanowiłem napisać tutaj. Chciałem stworzyć klasę, która będzie miała pole z własnym obiektem TTimer i która wykona jakąś akcję w pewnym przedziale czasowym. Czy to możliwe? Załóżmy, że mamy taki kod:Czy obiekt TTimer może być polem klasy Delphi?
Sth = class
private
public
clock:TTimer;
procedure clockTimer(Sender: TObject);
constructor Create();
end;
constructor Sth.Create()
begin
clock.interval:=1000;
clock.OnTimer := clockTimer;
end;
procedure Sth.clockTimer(Sender: TObject);
begin
//some action on this Sth object at clock.interval time...
end;
Mój kod jest podobny, ale nie działa poprawnie. Kiedy wywołuję konstruktora program ulega awarii (naruszenie dostępu w linii: clock.interval: = 1000;). Nie wiem, co robi, ale myślę, że to nie problem. Czy możliwe jest stworzenie takiej klasy, jaką chcę?
TTimery są bardzo często polami klas Delphi. Klasy formularzy są klasami, a za każdym razem, gdy umieszczasz TTimer w formularzu, IDE deklaruje dla ciebie pole TTimer. –
Wiem, że IDE deklaruje dla mnie pole TTimer po umieszczeniu go na formularzu. Ale chciałem umieścić TTimer jako pole klasy, które nie ma formy. Chciałem napisać osobną klasę (plik * .pas) bez formularza i połączyć go z formularzem głównym. Tak więc, bez formy, musiałem sam napisać wszystkie deklaracje. Nie wiem, czy to dobre podejście (nie używając formularza z klasami drugorzędnymi), jeszcze nie znam jeszcze kwestii form. Ale teraz wszystko działa dobrze po odpowiedzi Davida Heffernana. – xan
Ten podstawowy problem (nie wiedziałeś, że musisz tworzyć obiekty przed użyciem) wskazuje mi, że możesz skorzystać z lektury podstawowych materiałów, takich jak pierwsze rozdziały jednej z dużych starych książek Delphi, takich jak Marco cantu jeden (opanowanie delphi 7 lub coś podobnego), lub przynajmniej spędzanie więcej czasu na http://www.delphibasics.co.uk/ –