Форум: "Основная";
Текущий архив: 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