Форум: "Потрепаться";
Текущий архив: 2002.07.29;
Скачать: [xml.tar.bz2];
ВнизСамый простой алгоритм часов Найти похожие ветки
← →
DeMoN-777 (2002-07-02 18:23) [0]Мастера не подскажете самый простой алгоритм часов.
← →
Fiend (2002-07-02 18:33) [1]ТИК-ТАК->ТИК-ТАК->ТИК-ТАК->ТИК-ТАК->ТИК-ТАК->ТИК-ТАК->ТИК-ТАК->ТИК-ТАК->ТИК-ТАК->ТИК-ТАК->ТИК-ТАК->ТИК-ТАК->
Перевод стрелки
← →
RV (2002-07-02 18:44) [2]рано еще для перевода, еще 49 раз надо
← →
Lola (2002-07-02 18:58) [3]Ты правда определись, какие часы переводить: наручные, настенные, компьютерные или цифры в часы?
← →
MBo (2002-07-02 19:17) [4]procedure timer1timer(Sender:TObject);
begin
label1.caption:=timetostr(now);
end;
← →
Сергей Суровцев (2002-07-02 19:27) [5]Спичку поставь на подоконник, будут солнечные!
← →
Igorek (2002-07-02 20:56) [6]А для механических часов написать алгоритм слабо? ;-)))
---
"Я ему про Фому, а он мне про Ерему"
← →
MBo (2002-07-02 21:16) [7]>Igorek
А надо? :)
← →
DeMoN-777 (2002-07-02 21:41) [8]Ну так-же ведь не делается ?
procedure TForm1.Timer1Timer(Sender: TObject);
var
Sek1, Sek2, Min1, Min2, Hour1, Hour2, Hour3, Hour4 : Byte;
begin
Sek2:=Sek2+1;
Image10.Picture.LoadFromFile( ExtractFilePath(Application.ExeName)+"Num\"+inttostr(Sek2)+".bmp");
Image1.
if Sek2 >= 10 then
begin
Image10.Picture.LoadFromFile( ExtractFilePath(Application.ExeName)+"Num\0.bmp");
Sek2:=0;
Sek1:=Sek1+1;
Image9.Picture.LoadFromFile( ExtractFilePath(Application.ExeName)+"Num\"+inttostr(Sek1)+".bmp");
end;
if Sek1 >= 6 then
begin
Image9.Picture.LoadFromFile( ExtractFilePath(Application.ExeName)+"Num\0.bmp");
Min2:=Min2+1;
Image7.Picture.LoadFromFile( ExtractFilePath(Application.ExeName)+"Num\"+inttostr(Min2)+".bmp");
Sek1:=0;
end;
if min2 >= 10 then
begin
Image7.Picture.LoadFromFile( ExtractFilePath(Application.ExeName)+"Num\0.bmp");
Min1:=Min1+1;
Image6.Picture.LoadFromFile( ExtractFilePath(Application.ExeName)+"Num\"+inttostr(Min1)+".bmp");
Min2:=0;
end;
if min1 >= 6 then
begin
Image6.Picture.LoadFromFile( ExtractFilePath(Application.ExeName)+"Num\0.bmp");
Hour4:=Hour4+1;
Image4.Picture.LoadFromFile( ExtractFilePath(Application.ExeName)+"Num\"+inttostr(Hour4)+".bmp");
Min1:=0;
end;
if Hour4 >= 10 then
begin
Image4.Picture.LoadFromFile( ExtractFilePath(Application.ExeName)+"Num\0.bmp");
Hour3:=Hour3+1;
Image3.Picture.LoadFromFile( ExtractFilePath(Application.ExeName)+"Num\"+inttostr(Hour3)+".bmp");
Hour4:=0;
end;
if Hour3 >= 10 then
begin
Image3.Picture.LoadFromFile( ExtractFilePath(Application.ExeName)+"Num\0.bmp");
Hour2:=Hour2+1;
Image2.Picture.LoadFromFile( ExtractFilePath(Application.ExeName)+"Num\"+inttostr(Hour2)+".bmp");
Hour3:=0;
end;
if Hour2 >= 10 then
begin
Image2.Picture.LoadFromFile( ExtractFilePath(Application.ExeName)+"Num\0.bmp");
Hour1:=Hour1+1;
Image1.Picture.LoadFromFile( ExtractFilePath(Application.ExeName)+"Num\"+inttostr(Hour1)+".bmp");
Hour2:=0;
end;
if Hour2 >= 10 then
begin
ShowMessage("Ну вы блин даёте");
end;
end;
Или это оптимально ;) ?
← →
DeMoN-777 (2002-07-02 21:53) [9]Это конечно не часы, а пример.
← →
это РВ, тока не получается у меня зайти (2002-07-02 22:02) [10]там в процедуру когда заходишь Сек2 чему равно?
не 0 всегда?
а в чем проблема, можть по другому можно решить
← →
Anatoly Podgoretsky (2002-07-02 22:16) [11]DeMoN-777 © (02.07.02 21:41)
А Sound где, Козлевич
← →
DeMoN-777 (2002-07-02 22:23) [12]>Anatoly Podgoretsky © (02.07.02 22:16)
А Sound где, Козлевич
Где козлевич ?, я вас кажется никогда не оскорблял, а наоборот относился к вам с уважением.
А если это изза этого лесного алгоритма, то между прочим это вообще не моих рук дело. Я просто задал вопрос и хотел бы получить ответ на него, а вместо этого..............
← →
Anatoly Podgoretsky (2002-07-02 22:26) [13]DeMoN-777 © (02.07.02 22:23)
Не читаем мы классиков
← →
RV (2002-07-02 22:28) [14]а в чем проблема, можть по другому можно решить
← →
iZEN (2002-07-02 22:37) [15]Для DeMoN-777.
Возьмите часики со стрелочками из примеров к Java Development Kit, может это поможет с общими идеями, -- ещё с первых версий JDK там валялись в виде аплета.
← →
DeMoN-777 (2002-07-02 23:25) [16]Немного переделал.
Правда считает только минуты и сек.
Так вернее будет ?
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ExtCtrls;
type
TForm1 = class(TForm)
Panel1: TPanel;
Image4: TImage;
Image5: TImage;
Image6: TImage;
Image7: TImage;
Image8: TImage;
Timer1: TTimer;
procedure Panel1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure FormCreate(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
BitmapArray: array [0..10] of TBitmap;
Sek2, Sek1, Min2, Min1, Hour2, Hour1: Byte;
implementation
{$R *.DFM}
procedure TForm1.Panel1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
const SC_DragMove = $F012;
begin
if button=mbleft then
begin
ReleaseCapture;
perform(WM_SysCommand, SC_DragMove, 0);
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
var i:Byte;
begin
For i:=0 to 9 do
begin
BitmapArray[i] := TBitmap.Create;
BitmapArray[i].LoadFromFile(ExtractFilePath(Application.ExeName)+"Num\"+inttostr(i)+".bmp");
end;
sek2:=0;
sek1:=0;
Min2:=0;
Min1:=0;
Hour2:=0;
Hour1:=0;
end;
procedure TForm1.Timer1Timer(Sender: TObject);
begin
Sek2:=Sek2+1;
Image8.Picture.Bitmap:=BitmapArray[sek2];
if Sek2 >= 10 then
begin
Image8.Picture.Bitmap:=BitmapArray[0];
Sek2:=0;
Sek1:=Sek1+1;
Image7.Picture.Bitmap:=BitmapArray[sek1];
end;
if Sek1 >= 6 then
begin
Image7.Picture.Bitmap:=BitmapArray[0];
Sek1:=0;
Min2:=Min2+1;
Image5.Picture.Bitmap:=BitmapArray[Min2];
end;
if min2 >= 10 then
begin
Image5.Picture.Bitmap:=BitmapArray[0];
Min2:=0;
Min1:=Min1+1;
Image4.Picture.Bitmap:=BitmapArray[Min1];
end;
if min1 >= 6 then
begin
Image4.Picture.Bitmap:=BitmapArray[0];
Min1:=0;
Beep;
end;
end;
end.
← →
DeMoN-777 (2002-07-02 23:27) [17]>Anatoly Podgoretsky © (02.07.02 22:26
Неа не читаем.
← →
RV (2002-07-02 23:35) [18]можть и вернее...
ну а надо то че сделать?
я так понял там у тя циферки красивые рисуются
так можть timetostr(now) и разобрать полученную строку
← →
DeMoN-777 (2002-07-02 23:38) [19]>RV © (02.07.02 23:35
>так можть timetostr(now) и разобрать полученную строку
Это уже идея.
← →
DeMoN-777 (2002-07-03 00:23) [20]Хотя нет чтот-то я торможу мне надо не сис. время а свой таймер.
Есть у кого-нить идеи по оптимизации ?
← →
RV (2002-07-03 09:09) [21]/заливаем огонь из чайника и задача свелась к предидущей
завести переменую типа времени и по таймеру инкременируем
timetostr(переменная) и разобрать полученную строку
← →
Alexandr (2002-07-03 10:09) [22]есть компонент Tclock
его кладешь на форму и вызываешь Clock1.Run и все.
← →
Anatoly Podgoretsky (2002-07-03 11:21) [23]DeMoN-777 © (02.07.02 21:41)
По оптимизации
1. не оптимально вычленять путь в каждой строке, сделай переменную Path := ExtractFilePath(Application.ExeName)+"Num\", тоже в исправленном варианте от 02.07.02 23:25 вынеси это за пределы цикла, а в цикле BitmapArray[I].LoadFromFile(Path+IntToStr(I)+".bmp");
2. Не гарантируется срабатывание таймера каждую секунду, надо заменять на вычисление, при старте CurTime := StartTime := Now, а вычисление в таймере так, Now - StartTime и получение в формате word через DecodeTime, или через S := Format("hhnnss",CurTime) и получение значений из строки по индексу S[1,2,3,4,5,6] сразу в строковом виде, мне больше нравится этот вариант.
И будет у тебя короткий, быстрый и легко читаемый код
← →
DeMoN-777 (2002-07-03 13:28) [24]Всем огромное спасибо за высказанные мнения !
← →
Wizard_Ex (2002-07-03 16:20) [25]Очень интересное обсуждение
--------------------------------------------------------------------------------
Обхохочешься
Страницы: 1 вся ветка
Форум: "Потрепаться";
Текущий архив: 2002.07.29;
Скачать: [xml.tar.bz2];
Память: 0.5 MB
Время: 0.008 c