Make(delphi) ver(4.04 build 183) Add(MainForm,2953706,371,63) { Width=340 Height=103 Caption="Вычисление разницы между датами" BorderStyle=1 Position=1 } Add(InlineCode,7065131,322,119) { WorkPoints=#6:doCalc| EventPoints=#6:onCalc| DataPoints=#7:DatTim1|7:DatTim2| Code=#15:unit HiAsmUnit;|0:|9:interface|0:|21:uses kol,Share,Debug;|0:|4:type|28: THiAsmClass = class(TDebug)|10: private|19: D,H,M,S:integer;|13: ss:string;|0:|9: public|22: DatTim1: THI_Event;|22: DatTim2: THI_Event;|21: onCalc: THI_Event;|0:|49: procedure doCalc(var _Data:Tdata; Index:Word);|0:|5: end;|0:|14:implementation|0:|0:|29:procedure THiAsmClass.doCalc;|37:function timename(i:integer):integer;|15:var str:string;|15: l:integer; |5:begin|19: str:=int2str(i);|18: l:=Length(str);|52: if (str[l-1] = '1') then result:= 0 // for 10..19|7: else|19: case str[l] of|27: '1': result := 1;|27: '2'..'4': result := 2;|23: else result := 0; |9: end;|4:end;|0:|6: const|41: TimeStr: array [0..3,0..2] of string =|27: (('дней','день','дня'),|28: ('часов','час','часа'),|33: ('минут','минута','минуты'),|37: ('секунд','секунда','секунды'));|4: var|22: d1,d2,raz,hms:real;|15: sec:integer;|5:begin|9: ss:='';|34: d1 := ReadReal(_Data,DatTim1,0);|34: d2 := ReadReal(_Data,DatTim2,0);|18: if d1 > d2 then|18: raz := d1 - d2|6: else|19: raz := d2 - d1;|51: D := Trunc(raz); // получаем дни|63: if D>0 then ss:=ss+int2str(D)+' '+TimeStr[0,Timename(D)]+' ';|19: hms := (raz - D);|54: sec := round(86400 * hms); // часть суток в секундах|25: H := Trunc(sec / 3600);|63: if h>0 then ss:=ss+int2str(H)+' '+TimeStr[1,Timename(H)]+' ';|36: M := Trunc((sec - H * 3600) / 60);|63: If M>0 then ss:=ss+int2str(M)+' '+TimeStr[2,Timename(M)]+' ';|36: S := sec - (M * 60) - ( H * 3600);|59: If S>0 then ss:=ss+int2str(S)+' '+TimeStr[3,Timename(S)];|25: _hi_OnEvent(onCalc,ss);|4:end;|0:|4:end.| link(onCalc,15591121:doText,[]) link(DatTim1,6604904:DateTime,[(328,104)(251,104)]) link(DatTim2,14730868:DateTime,[]) } Add(DatePicker,6604904,245,63) { Left=45 Top=15 Width=230 Height=21 Point(DateTime) link(OnChange,2529396:doTimer,[(284,69)(284,50)(235,50)(235,125)]) } Add(Time,14730868,322,63) { Point(DateTime) } Add(Label,15591121,371,119) { Left=25 Top=45 Width=279 Height=19 Font=[Arial,9,1,16711680,204] Caption="" AutoSize=1 Alignment=2 } Add(Timer,2529396,266,119) { Enable=1 link(onTimer,7065131:doCalc,[]) }