Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Потрепаться";
Текущий архив: 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.63 MB
Время: 0.029 c
8-95460
Поно
2002-03-21 20:30
2002.07.29
Как проиграть в своей проге два аудио файла одновременно


3-95253
Alenka
2002-07-09 10:31
2002.07.29
Запомнить значение в текущей ячейки


14-95497
tovSuhov
2002-07-01 07:21
2002.07.29
Единый госэкзамен (ЕГЭ)


1-95291
AlekseyK
2002-07-15 18:32
2002.07.29
ComPort


1-95372
jen_bond
2002-07-15 11:19
2002.07.29
Возможно ли??





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский