Валентин Озеров - Советы по Delphi. Версия 1.4.3 от 1.1.2001
- Название:Советы по Delphi. Версия 1.4.3 от 1.1.2001
- Автор:
- Жанр:
- Издательство:неизвестно
- Год:неизвестен
- ISBN:нет данных
- Рейтинг:
- Избранное:Добавить в избранное
-
Ваша оценка:
Валентин Озеров - Советы по Delphi. Версия 1.4.3 от 1.1.2001 краткое содержание
…начиная с 1001. Смотрите другие файлы…
Советы по Delphi. Версия 1.4.3 от 1.1.2001 - читать онлайн бесплатно полную версию (весь текст целиком)
Шрифт:
Интервал:
Закладка:
Приведение даты
Delphi 1
procedure TForm1.MaskEdit1Exit(Sender: TObject);
var
y, m, d : word;
begin
decodedate(strtodate(maskedit1.text) + 11, y, m, d);
maskedit2.text := inttostr(m) + '/' + inttostr(d) + '/' + inttostr(y);
end;
Даты и недели
Delphi 1
У меня есть программа, которая делает примерно то, что вы хотите. Она сообщает для даты текущую неделю и день недели. Вам необходимо лишь реализовать вычисление предела для дат недели. Кроме того, формат в этом коде для дат задан в виде "06/25/1996".
Вы должны создать форму с именем "Forma", компонентом TEdit с именем "Edit1", четырьмя метками и кнопкой с именем "GetWeekBtn". Убедитесь в том, что обработчиком события формы OnCreate является метод FormCreate.
Надеюсь, что помог вам.
unit Forma;
interface
uses
SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls,Forms, Dialogs, StdCtrls;
type
TForma1 = class(TForm)
Edit1: TEdit;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
GetWeekBtn: TButton;
Label4: TLabel;
procedure GetWeekBtnClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
private { Private declarations }
Function HowManyDays(pYear,pMonth,pDay:word):integer;
public { Public declarations }
end;
var
Forma1: TForma1;
implementation
{$R *.DFM}
Uses Inifiles;
procedure TForma1.FormCreate(Sender: TObject);
var WinIni:TInifile;
begin
WinIni:=TIniFile.Create('WIN.INI');
WinIni.WriteString('intl','sShortDate','MM/dd/yyyy');
WinIni.Free;
end;
Function TForma1.HowManyDays(pYear,pMonth,pDay:word):integer;
var Sum:integer;
pYearAux:word;
begin
Sum:=0;
if pMonth>1 then Sum:=Sum+31;
if pMonth>2 then Sum:=Sum+28;
if pMonth>3 then Sum:=Sum+31;
if pMonth>4 then Sum:=Sum+30;
if pMonth>5 then Sum:=Sum+31;
if pMonth>6 then Sum:=Sum+30;
if pMonth>7 then Sum:=Sum+31;
if pMonth>8 then Sum:=Sum+31;
if pMonth>9 then Sum:=Sum+30;
if pMonth>10 then Sum:=Sum+31;
if pMonth>11 then Sum:=Sum+30;
Sum:=Sum + pDay;
if ((pYear - (pYear div 4)*4)=3D0) and (pMonth>2) then inc(Sum);
HowManyDays:=Sum;
end; { HowManyDays }
procedure TForma1.GetWeekBtnClick(Sender: TObject);
var
ADate: TDateTime;EditAux:String;
Week,year,month,day:Word;
begin
EditAux:=Edit1.Text;
ADate := StrToDate(EditAux);
Label1.Caption := DateToStr(ADate);
DecodeDate(Adate,Year,Month,Day);
Case DayOfWeek(ADate) of
1: Label4.Caption:='Воскресенье';
2: Label4.Caption:='Понедельник';
3: Label4.Caption:='Вторник';
4: Label4.Caption:='Среда';
5: Label4.Caption:='Четверг';
6: Label4.Caption:='Пятница';
7: Label4.Caption:='Суббота';
end
Week:=(HowManyDays(year,month,day) div 7) +1;
Label3.Caption:='Неделя No. '+IntToStr(Week);
end;
end.
Количество дней между двумя датами I
Delphi 1
ПЕРЕМЕННЫЕ:
Year1, Month1, Day1,
Year2, Month2, Day2,
YearResult, MonthResult, DayResult: Word;
TDay1, TDay2, DateDiff: TDateTime;
КОД:
TDay1 := EncodeDate(Year1, Month1, Day1);
TDay2 := EncodeDate(Year2, Month2, Day2);
DateDiff := TDay2 – TDay1; {предположим, что TDay2 позднее, чем TDay1}
DecodeDate(DateDiff, YearResult, MonthResult, DayResult);
DateDiff имеет тип LongInt (хотя и является объектом TDateTime), и содержит количество дней между датами.
Количество дней между двумя датами II
Delphi 1
Для DateDiff:
Вы смотрели на функцию DecodeDate? Это не точно именно то, что вам нужно, но на ее основе можно сделать вашу функцию именно с нужной вам функциональностью.
Для величины Present:
function PresentValue(const cashflows : array of double; { отсортированные транзакции, начальный индекс - cashflows[0] }
n : integer; { количество транзакций в массиве }
rate : double; { оценочный процент за истекший период }
atbegin : boolean) : double; { true, если транзакция была в начале периода,false если в конце }
var
i: integer;
factor: double;
begin
factor := (1 + rate / 100.0);
result := 0;
for i := n - 1 downto 0 do result := (result + cashflows[n]) / factor;
if atbegin then result := result * factor;
end;
Конвертирование даты
Delphi 1
TheDateField.AsString := TheDateString;
TheDateString := TheDateField.AsString;
это делает преобразование подобно DateToStr и StrToDate. Аналогично:
TheDateField.AsDateTime := StrToDate(TheDateString);
TheDateString := DateToStr(TheDateField.AsDateTime);
Число текущей недели
Delphi 1
Здесь включены 2 вспомогательные функции, необходимые для работы вашей функции. Одна проверяет високосный год, другая возвращает число дней месяца (с проверкой високосного года), третья, ту, что вы хотели, возвращает текущую неделю года.
{***************************************************************************}
function kcIsLeapYear(nYear: Integer): Boolean;
begin
Result := (nYear mod 4 = 0) and ((nYear mod 100 <> 0) or (nYear mod400 = 0));
end;
{***************************************************************************}
function kcMonthDays(nMonth, nYear: Integer): Integer;
const
DaysPerMonth: array[1..12] of Integer = (31, 28, 31, 30, 31, 30, 31,31, 30, 31, 30, 31);
begin
Result := DaysPerMonth[nMonth];
if (nMonth = 2) and kcIsLeapYear(nYear) then Inc(Result);
end;
{***************************************************************************}
Шрифт:
Интервал:
Закладка: