Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2002.10.14;
Скачать: [xml.tar.bz2];

Вниз

Даты   Найти похожие ветки 

 
LOAD   (2002-10-01 18:44) [0]

Друзья! Можно ли в Delphy нормально работать с датами? Мне нужно график построить, а по оси X надо, чтобы автоматически промежуток времени делился на несколько частей и эти дни выводились в кажестве подписей. Не соображу, как это сделать...


 
grig_perejaslov   (2002-10-01 18:52) [1]

Написать свой компонент, который будет выводить этот график.
А далее считаешь кол-во лет, месяцов, дней, часов, минут в зависимости от требуемой точности и, сравнивая их, строишь график.


 
Link   (2002-10-01 19:02) [2]

Может я что-то не понял..
График-то я напишу, как строится, но мне нужны подписи по оси X.
Промежуток будет задаваться не большой, на несколько минут, просто данные выводятся из базы данных, где каждая запись сохраняется с частотой в одну секунду. Мне нужно, чтобы значения подписей были через равное кол-во времени. А это кол-во времени должно вычисляться программой и прибавляться тоже программой... Как это сделать?


 
Smithson   (2002-10-01 19:04) [3]

DateToStr, StrToDate, DecodeDate, EncodeDate, F1


 
Link   (2002-10-01 19:24) [4]



> Smithson


Почитал F1, вроде так:

var
Date:double;
.......
Date:=MakeRep.ADOQuery2.FieldByName("timestamp").AsFloat/2;
Edit3.Text:=DateToStr(Date);

Дано число:
01.03.02 1:21:33
Выдаёт:
30.01.51
А почему нет времени?
А с промежутком: вычитать из большей даты меньшую и делить на нужное число?


 
Link   (2002-10-01 19:57) [5]

LOAD и Link - это одно лицо.
А может всё-таки объясните: почему нет времени и почему нельзя использовать даты вида 01.03.02 1:25:39 Неужели можно только вида 01.03.02 1:25, как написанов F1?


 
TTCustomDelphiMaster   (2002-10-01 20:16) [6]

F1 - FormatDateTime


 
Robot   (2002-10-03 19:01) [7]

Я опять возвращаюсь к этому вопросу. Всё равно что-то не то.

> TTCustomDelphiMaster

Я посмотрел F1. Но там описано, как дату расчленять. А мне необходимо:
1. Вычислить промежуток времени (из одной даты вычесть другую)
2. Поделить этот промежуток на установленное число (чтобы знать период времени, который следует позже прибавлять)
3. Прибавлять вычисленный промежуток. И каждый рад выводить получившуюся дату в виде 01.03.02 1:21:33.

Это всё нужно, чтобы на графике по оси X было время.
Мне это просто необходимо. Пожалуйста, кто что знает, поделитесь...


 
Link   (2002-10-03 19:05) [8]

Извините, что опять под другим именем (Robot).


 
Jeer   (2002-10-03 20:08) [9]

А в чем проблема ?
TDateTime это Double тип.
Формат 1s,15e,52f.
Целая часть - дни, дробная - часть суток с мзр 24*60*60*1000/(2^52) ms

Так и работай с Double.


 
TTCustomDelphiMaster   (2002-10-03 20:42) [10]

А вон Вы про что...

Тогда делайте так
dDelta = (MaxDate-MinDate)/Ndel;

а потом в цикле выводите на экран
formatdatetime(" ...", MinDate+i*dDelta);


 
Link   (2002-10-04 12:16) [11]

Спасибо за помощь.
Но
> Jeer

Я ещё плохо разбираюсь с TDateTime, поэтому не доконца понял, что ты имеешь в виду.


> TTCustomDelphiMaster

Я тоже так сразу подумал, но в том то и проблема, что при MinDate+i*dDelta выводится значение, равное MinDate.
Может я что-то не то делаю?


 
Link   (2002-10-04 13:51) [12]

Нет, я ошибся, всё верно. Я намудрил в другом месте.
Спасибо за помощь!


 
Zergling   (2002-10-04 14:11) [13]

Type
TVOrientation=
(toHorizontal,toVertikal,toTop,toBottom,toLeft,toRight,toVCentr,toHCentr,toVHCentr);

// Рзмешение текста по центру
Procedure TextOutPos(Dest:TCanvas;X,Y:Integer;Text:String;Orientation:TVOrientation);
var H,W:Integer;
Begin
H:=Dest.TextHeight(Text);
W:=Dest.TextWidth(Text);
Case Orientation of
toVCentr : Y:=Y-H div 2;
toHCentr : X:=X-W div 2;
toVHCentr : Begin Y:=Y-H div 2; X:=X-W div 2; End;
End;
Dest.TextOut(X,Y,Text);
End;

// Вывод линейки времени
Procedure LineTime
// L-Длина линии, Part-на сколько частей поделить
(Dest:TCanvas;X,Y,L:Integer;MinTime,MaxTime:TTime;Part:Word;Orientation:TVOrientation);
var h,m,s,ms:Word;
I:Integer;
Odds:Real;
PartOdds:Real;
TimeStr:String;

Procedure TimePrn(V1,V2:Byte;var Txt:String);
Begin
Txt:=IntToStr(V1)+":"+IntToStr(V2);
End;

Begin
if MaxTime<MinTime then Exit;
Part:=Part-1;
L:=Part*(L div Part);
Odds:=MaxTime-MinTime;
PartOdds:=Odds/Part;

For I:=0 to Part do
Begin
DecodeTime(MinTime+PartOdds*I,h,m,s,ms);
if MaxTime-MinTime>0.0416666666666667 then TimePrn(h,m,TimeStr) else TimePrn(m,s,TimeStr);
Case Orientation of
toHorizontal : TextOutPos(Dest,X+(L div Part*I),Y,TimeStr,toVHCentr);
toVertikal : TextOutPos(Dest,X,Y+(L div Part*I),TimeStr,toVHCentr);
End;
End;
End;



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2002.10.14;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.009 c
1-45358
veZuk
2002-10-06 11:26
2002.10.14
Синусоида


4-45651
Soul2
2002-08-31 01:46
2002.10.14
ОКНА


1-45390
bbn
2002-10-02 20:58
2002.10.14
Как установить фокус на программно-созданном элементе ?


1-45330
Karbo
2002-10-05 14:46
2002.10.14
Есть ли в delphi 3 -delphi 5 компонент TValueListEditor ?


1-45455
soware
2002-10-03 08:13
2002.10.14
Колесо МЫШИ





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский