Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Делфи _ Компонент

Автор: Egor Vladimirovich 19.12.2006 1:24

Подскажите как сделать компонент системные часы?! Буду очень благодарен.Поиск юзал ни чего не нашел!

Автор: klem4 19.12.2006 1:34

Нужно системное время выводить ? Скажем в кепшн формы ? Вот так:


Кидаешь на форму компонент TTimer

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls;

type
TForm1 = class(TForm)
Timer1: TTimer;
procedure FormCreate(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;


implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);

begin
Timer1.Interval := 1000; // 1c
Timer1.Enabled := true;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
Form1.Caption := FormatDateTime('hh:mm:ss', Now);
end;

end.


Автор: Egor Vladimirovich 19.12.2006 20:14

Спсибо klem4.
Что то вроде такого,но надо сделать свой компанент. Что бы его бросаешь но форму,жмеш Ф9 и сразу в окошке появлялось системное время,например использовать Tlabel. А твой компанент например можно увидеть в панели-закладке standart.

Автор: klem4 19.12.2006 20:23

Зачем свой-то ... TTimer на вкладке System находится ...

Автор: Egor Vladimirovich 20.12.2006 1:27

Цитата(klem4 @ 19.12.2006 16:23) *

Зачем свой-то ... TTimer на вкладке System находится ...

В этом и заключаеться задание,именно свой компанент!

Автор: klem4 20.12.2006 2:41

Тоесть нужено создать и зарегистрировать в делфи свой собственный компонент (например наследник TLabel) который будет постоянно отображать системное время ?

Автор: Egor Vladimirovich 20.12.2006 21:24

Цитата(klem4 @ 19.12.2006 22:41) *

Тоесть нужено создать и зарегистрировать в делфи свой собственный компонент (например наследник TLabel) который будет постоянно отображать системное время ?

Так точно! good.gif Поможешь?!

Автор: klem4 20.12.2006 22:45

В общем примерно это должно выглядить вот так, но почему-то при запуске программы с такой компонентой возникает ошибка, хотя кодга в Design mode кидаю этот лейбл на форму он уже начинает отображать текущее время, а вот при запуске программы выдает class TTimer not found ... Что не верно ?

unit TimerLabel;

interface

uses
Windows, Messages, SysUtils, Classes, Controls, StdCtrls,
ExtCtrls;

type
TTimerLabel = class(TLabel)
private
fTimer: TTimer;
protected
procedure MyOnTimer(Sender: TObject);
public
constructor Create(AOwner: TComponent); override;
published

end;

procedure Register;

implementation

procedure Register;
begin
RegisterComponents('klem4', [TTimerLabel]);
end;

constructor TTimerLabel.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
fTimer := TTimer.Create(AOwner);
fTimer.OnTimer := MyOnTimer;
fTimer.Interval := 1000;
fTimer.Enabled := true;
end;

procedure TTimerLabel.MyOnTimer(Sender: TObject);
begin
Caption := FormatDateTime('hh:mm:ss', Now);
end;

end.

Автор: Egor Vladimirovich 20.12.2006 23:41

Спасибо klem4! good.gif good.gif good.gif

Автор: klem4 20.12.2006 23:58

Egor Vladimirovich , да незачто пока, не работает ведь ...

Автор: hiv 21.12.2006 14:31

Цитата(klem4 @ 20.12.2006 19:58) *

Egor Vladimirovich , да незачто пока, не работает ведь ...

А что не работает?
К стати надо бы и деструктор переопределить...
destructor TTimerLabel.Destroy;
begin
fTimer.Enabled := false;
fTimer.Free;
inherited Destroy;
end;

Автор: klem4 21.12.2006 18:34

Цитата
А что не работает?


hiv, а ты зарегистрировал компонент и в тестовой программе все ок ?

Автор: hiv 21.12.2006 18:52

Вроде нашел последнее отличие моего варианта:

fTimer := TTimer.Create(Self);

PS: У меня все ок, только не регится в группе Standard (вернее регится но не показывается в списке), в любой со своим названием без проблем...

Автор: klem4 21.12.2006 19:24

Цитата
fTimer := TTimer.Create(Self);


Вот оно smile.gif Я тоже хотел сделать именно это по задумке но не знал что написать, пробовал this но такого нет, а надо было self

yes2.gif

Автор: Egor Vladimirovich 26.12.2006 20:24

Цитата(klem4 @ 21.12.2006 15:24) *

Вот оно smile.gif Я тоже хотел сделать именно это по задумке но не знал что написать, пробовал this но такого нет, а надо было self

yes2.gif

klem4 от вашего первого варианта нашел как запустить,на форме появлялся сам клмпанент Ttimer(часики)!.Удалил эти часы,все откомпилировалось. thx за помощь!