Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2010.08.27;
Скачать: CL | DM;

Вниз

Вычитение даты-времени   Найти похожие ветки 

 
oleg1963lora   (2010-04-05 09:44) [0]

Здравствуйте Мастера! Есть такой код:


var MyMinDateTim, MyMaxDateTime : TDateTime;
    year,month,day,hour,min,sec,msec : word;
    vremya, vremya2 : string;

begin
    vremya:="01.03.2010 09:18";
    vremya2:="01.03.2010 09:19";

    MyMinDateTime:=StrToDateTime(vremya);
    MyMaxDateTime:=StrToDateTime(vremya2);

    MyMaxDateTime:=MyMaxDateTime-MyMinDateTime;
    DecodeDateTime(MyMaxDateTime,year,month,day,hour,min,sec,msec);

При вычитании получаю:
year=1899
month=12
Day=30
Hour=0
Min=1
sec=0
msec=0.

Подскажите пожалуйста где я ошибаюсь?


 
И. Павел ©   (2010-04-05 09:47) [1]

Все нормально. Время высчитывается от 1899 года. Тоесть MyMaxDateTime содержит 0.0***1, но это воспринимается как 1899 год.


 
И. Павел ©   (2010-04-05 09:48) [2]

Тоесть, например:

procedure TForm2.Button1Click(Sender: TObject);
var D:TDateTime;
begin
D:=0;
Caption:=DateTimeToStr(D);
end;


Показывает: 30/12/1899


 
Anatoly Podgoretsky ©   (2010-04-05 09:49) [3]

> oleg1963lora  (05.04.2010 09:44:00)  [0]

Ошибок нет, результат правильный, только почему ты считаешь что в результате вычитания у тебя будет датавремя?
Это раз, а два - а как ты хочешь, это совсем не понятно.


 
oleg1963lora   (2010-04-05 09:50) [4]

А как тогда получить
year=0
month=0
Day=0
Hour=0
Min=1
sec=0
msec=0 ?


 
Anatoly Podgoretsky ©   (2010-04-05 09:51) [5]

> oleg1963lora  (05.04.2010 09:50:04)  [4]

Просто от результата отнять 1899,12,30


 
oleg1963lora   (2010-04-05 09:52) [6]


> Anatoly Podgoretsky

Спасибо, понял.


 
Anatoly Podgoretsky ©   (2010-04-05 09:54) [7]

> oleg1963lora  (05.04.2010 09:52:06)  [6]

Тогда проверочное задание, приведи функцию преобразования, а то есть сомнение что ты опять понял, что ты не путаешь дату с интервалом


 
oleg1963lora   (2010-04-05 10:07) [8]


>  что ты не путаешь дату с интервалом

Не понял вопроса. Нужно из TStringList удалить строки с минутами не кратными 12


 
Sha ©   (2010-04-05 10:07) [9]

> oleg1963lora   (05.04.10 09:50) [4]
> А как тогда получить year=0

> Anatoly Podgoretsky ©   (05.04.10 09:51) [5]
> Просто от результата отнять 1899,12,30

Ща запутаю :)
Потом попытайся длину интервала выразить в часах.


 
И. Павел ©   (2010-04-05 10:16) [10]

[8] oleg1963lora   (05.04.10 10:07)
Используйте:
DecodeTime(Time, Hout, Min, Sec, MSec)


 
oleg1963lora   (2010-04-05 10:20) [11]

Так ?

   MyMaxDateTime:=MyMaxDateTime-MyMinDateTime;
   DecodeDateTime(MyMaxDateTime,year,month,day,hour,min,sec,msec);
   year:=year-1899;
   month:=month-12;
   day:=day-30;
   Year:=Year*Month*Day*Hour*Min;
   Month:=Month*Day*Hour*Min;
   Day:=Day*Hour*Min;
   hour:=Hour*Min;

   T:=Year+Month+Day+Hour+Min;
   if not (T in [11..13]) then
                              SummList.Delete(i+1);


 
Anatoly Podgoretsky ©   (2010-04-05 10:28) [12]

> oleg1963lora  (05.04.2010 10:20:11)  [11]

Объясни суть данно манипуляции?

Year:=Year*Month*Day*Hour*Min;


 
И. Павел ©   (2010-04-05 10:28) [13]

> Year*Month*Day*Hour*Min

???
Зачем их перемножать? Я не понял алгоритм...
Строки, не кратные 12, это:
1.2.2009 1:12
1.2.2009 1:24
1.2.2009 1:36
Или же нужно считать число минут с нулевого года, и проверять на кратность это число?


 
Anatoly Podgoretsky ©   (2010-04-05 10:29) [14]

> Sha  (05.04.2010 10:07:09)  [9]

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


 
Anatoly Podgoretsky ©   (2010-04-05 10:30) [15]


> Не понял вопроса. Нужно из TStringList удалить строки с
> минутами не кратными 12

Откуда взялся TStringList и кратность 12


 
oleg1963lora   (2010-04-05 10:43) [16]


> Откуда взялся TStringList и кратность 12

Есть входной текстовый файл, который я заливаю в стринглист и парсингую на дату, время и значение:

01.03.2010 9:17 51,67450333
01.03.2010 9:18 50,23653793
01.03.2010 9:19 50,01485062
01.03.2010 9:20 50,05120087
01.03.2010 9:21 49,83310699
01.03.2010 9:22 50,04480743
01.03.2010 9:23 50,07955933
01.03.2010 9:24 50,54929733
01.03.2010 9:25 50,60521698

Если разница между соседними строками по времени не входит в диапазон 11-13 минутами их надо удалить. Цель - сокращение входного файла


 
Sha ©   (2010-04-05 10:49) [17]

> Anatoly Podgoretsky ©   (05.04.10 10:29) [14]

Еще можно считать интервал в минутах...


 
И. Павел ©   (2010-04-05 10:52) [18]

Если разница между датами [0.0076389...0.009027778] то они отличаются на 11-13 минут.


 
Sha ©   (2010-04-05 10:53) [19]

> oleg1963lora   (05.04.10 10:43) [16]
> Если разница между соседними строками по времени не входит в диапазон 11-13 минутами их надо удалить.

Интересно, какой результат ожидается, если соседние строки следуют через час?


 
Sha ©   (2010-04-05 10:57) [20]

> oleg1963lora   (05.04.10 10:43) [16]
> Есть входной текстовый файл, который я заливаю в стринглист и парсингую

Нафига грузить все, если нужна часть?


 
oleg1963lora   (2010-04-05 11:01) [21]


> Интересно, какой результат ожидается, если соседние строки
> следуют через час?

В урну! Доктор сказал - в морг!


 
Sha ©   (2010-04-05 11:04) [22]

> oleg1963lora   (05.04.10 11:01) [21]

К сожалению для тебя, в Паскале нет такого оператора.


 
Sha ©   (2010-04-05 11:15) [23]

Когда вместо того, чтобы обдумать алгоритм, у программиста возникает желание
скорее начать стучать по клавиатуре, то неизбежно рождается бред вроде

> Если разница между соседними строками по времени не входит в диапазон 11-13 минутами их надо удалить.


 
Anatoly Podgoretsky ©   (2010-04-05 11:18) [24]

> oleg1963lora  (05.04.2010 10:43:16)  [16]

Что то мне кажется, что подобная ветка уже была, так ничем и кончилась

Дату привести к TDatetime и умножить на 1440 дальше остаток от деления на 12 и анализ результата


 
Jeer ©   (2010-04-05 11:20) [25]


> oleg1963lora   (05.04.10 11:01) [21]


Очень запущенный случай.


 
Jeer ©   (2010-04-05 11:22) [26]


> Что то мне кажется, что подобная ветка уже была, так ничем
> и кончилась


10-го марта это обсуждалось.
За это время можно было хотя бы китайский выучить.


 
oleg1963lora   (2010-04-05 11:24) [27]


> Что то мне кажется, что подобная ветка уже была, так ничем
> и кончилась

В том-то и дело. Сейчас идет речь о моем увольнении, так что Спасите мою задницу!


 
Jeer ©   (2010-04-05 11:24) [28]


> и умножить на 1440 дальше остаток от деления на 12 и анализ
> результата


время измерения может так и не попасть в желаемый диапазон, а в итоге все выкинется.
Ему уже предлагалось сделать интерполяцию с шагом 12 минут - не дошло, видимо.


 
Jeer ©   (2010-04-05 11:26) [29]


> В том-то и дело. Сейчас идет речь о моем увольнении, так
> что Спасите мою задницу!


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


 
Anatoly Podgoretsky ©   (2010-04-05 11:31) [30]

> oleg1963lora  (05.04.2010 11:01:21)  [21]

Вот так с предыдущим обсуждением и поступили, отправили в урну.


 
Anatoly Podgoretsky ©   (2010-04-05 11:33) [31]

> Jeer  (05.04.2010 11:22:26)  [26]

Точно и точно такое же бардачное обсуждение, видимо безнадежно.


 
Anatoly Podgoretsky ©   (2010-04-05 11:34) [32]

> oleg1963lora  (05.04.2010 11:24:27)  [27]

Я думаю лучше выбор сделать в пользу предприятия, выгоднее спасать его.


 
Anatoly Podgoretsky ©   (2010-04-05 11:34) [33]

> Jeer  (05.04.2010 11:24:28)  [28]

Я по техзаданию, а если оно неправильное, то я не виноват.


 
Anatoly Podgoretsky ©   (2010-04-05 11:35) [34]

> Jeer  (05.04.2010 11:26:29)  [29]

Форумов не хватит.


 
И. Павел ©   (2010-04-05 11:41) [35]

Коллеги, давайте не будем флудить, раз у человека серьезные проблемы, а отвечать по деля.
Формат TDateTime представляет дату как дробное число, в котором целая часть - число дней, прошедших с како1-то даты 1989 года, а дробная часть - часть от прошедшего дня (например 0.5 - это полдень). Исходя из этого можно анализировать разницу между двумя датами.


> Дату привести к TDatetime и умножить на 1440 дальше остаток
> от деления на 12 и анализ результата

Вот, в частности, способ. Или просто из разницы дат выделять минуты функцией EncodeTime


 
И. Павел ©   (2010-04-05 11:42) [36]

деля -> делу :)
прошедших с како1-то даты -> прошедших с какой-то даты


 
Anatoly Podgoretsky ©   (2010-04-05 11:49) [37]

> И. Павел  (05.04.2010 11:41:35)  [35]

Он этого не понимает, это уже вторая ветка.


 
И. Павел ©   (2010-04-05 11:49) [38]

Вот тут лбсуждался аналогичный вопрос:
http://forum.sources.ru/index.php?act=ST&f=11&t=81193


 
Sha ©   (2010-04-05 11:49) [39]

> oleg1963lora   (05.04.10 11:24) [27]
> Спасите мою задницу!

Мысленно строим график результатов измерений от времени (непрерывная кусочно-линейная функция).
Сохраняем ее значения в точках, соответствующих нужным моментам времени.


 
Desdechado ©   (2010-04-05 12:39) [40]

Одного не понимаю: почему автор считает, что результат разности двух дат - это дата?
Вот из 5 апреля вычесть 1 апреля - это что, 4 апреля будет, что ли? Дуристика какая-то. Разница - 4 дня, т.е. длина интервала времени, но никак не дата. Так зачем же результат приводить к дате?
А вот эта длина интервала - суть дробное число, в сутках, которое уже можно проанализировать на предмет величины для последующих операций "сокращения входного файла".


 
oleg1963lora   (2010-04-05 13:23) [41]


>  число, в сутках, которое уже можно проанализировать на
> предмет величины

Именно об этом и идет речь. Просто я по ходу пьесы столкнулся с вычитанием 12 минут из 3. Арифметически получил отрицат. число, а должен был получить 51. Такая же ситуация с переход часов в сутки, суток в месяцы и до года. Так что без полной даты-времени у меня не выходит.


 
И. Павел ©   (2010-04-05 13:43) [42]

> [41] oleg1963lora   (05.04.10 13:23)

Вот так можно проверить (+-1 сек, так как это нецелые числа и возникают проблемы с округлением):

procedure TForm1.btn1Click(Sender: TObject);
var
   vremya, vremya2 : string;
   D1, D2:TDateTime;
   MyMinDateTime, MyMaxDateTime:TDateTime;
begin
 D1:=StrToDateTime("30.12.1899 0:10:59");
 D2:=StrToDateTime("30.12.1899 0:13:01");

 vremya:="01.03.2010 09:18";
 vremya2:="01.03.2010 09:31";

 MyMinDateTime:=StrToDateTime(vremya);
 MyMaxDateTime:=StrToDateTime(vremya2);

 MyMaxDateTime:=MyMaxDateTime-MyMinDateTime;
 if (MyMaxDateTime>=D1) and (MyMaxDateTime<=D2) then Application.MessageBox("Разница между датами от 11 до 13 минут", "", 0);
end;


 
oleg1963lora   (2010-04-05 13:56) [43]


> Вот так можно проверить (+-1 сек, так как это нецелые числа
> и возникают проблемы с округлением):

Интересная идея. На мой взгляд так можно легко забить клин на год и работать только с минутами. Спасибо, сейчас попробую


 
Desdechado ©   (2010-04-05 13:59) [44]


> Просто я по ходу пьесы столкнулся с вычитанием 12 минут
> из 3. Арифметически получил отрицат. число, а должен был получить 51

TDateTime - это в сутках, какие нафиг минуты?
Вычитаешь меньшее из большего, а результат: в целой части сутки, в дробной - доли суток, которые, надеюсь, сможешь перевести в часы-минуты-секунды.


 
Игорь Шевченко ©   (2010-04-05 15:03) [45]

И. Павел ©   (05.04.10 11:41) [35]


> Коллеги, давайте не будем флудить, раз у человека серьезные
> проблемы


а кого это должно волновать ? Тебя ? Свяжись с ним по почте, реши его проблему, всех дел-то


 
Sha ©   (2010-04-05 16:19) [46]

> oleg1963lora   (05.04.10 11:24) [27]

прочитал http://delphimaster.net/view/2-1269419918/

Похоже, для каждого 12-минутного интервала надо просто писать в БД последнее значение температуры.


var
 LineNo: integer;

function GetData(var dt: TDateTime; var Temperature: double): boolean;
var
 s: string;
 i: integer;
begin;
 inc(LineNo);
 Result:=(LineNo>=0) and (LineNo<Form1.Memo1.Lines.Count);
 if Result then begin;
   s:=Form1.Memo1.Lines[LineNo];
   i:=Pos(#32,s);
   if i>0 then i:=PosEx(#32,s,i+1);
   Result:=i>0;
   if Result then try;
     Temperature:=StrToFloat(Copy(s, i+1, MaxInt));
     dt:=StrToDateTime(Copy(s, 1, i-1));
   except
     Result:=false;
     end
   end;
 end;

function PutData(dt: TDateTime; Temperature: double): boolean;
begin;
 Result:=true;
 Form1.Memo2.Lines.Add(DateTimeToStr(dt)+" "+FloatToStr(Temperature));
 end;

const
 cIntervalsPerDay= 120;

function DateTimeToIntervalNo(dt: TDateTime): int64;
begin;
 Result:=Trunc(dt * cIntervalsPerDay);
 if Result<=0 then Result:=1;
 end;

function IntervalNoToDateTime(no: int64): TDateTime;
begin;
 Result:=no / cIntervalsPerDay;
 end;

function ProcessData: boolean;
var
 dt: TDateTime;
 Temperature, OldTemperature: double;
 Interval, NextInterval: int64;
begin;
 Result:=true;
 NextInterval:=0;
 OldTemperature:=0;
 while GetData(dt, Temperature) do begin;
   Interval:=DateTimeToIntervalNo(dt);
   if NextInterval<=0
   then NextInterval:=Interval+1
   else while Interval>=NextInterval do begin;
     PutData(IntervalNoToDateTime(NextInterval), OldTemperature);
     NextInterval:=NextInterval+1;
     end;
   OldTemperature:=Temperature;
   end;
 end;

procedure TForm1.Button1Click(Sender: TObject);
begin;
 LineNo:=-1;
 Memo2.Lines.Clear;

 ProcessData;
 end;


Исправь процедуры GetData, PutData для своего случая.


 
Sha ©   (2010-04-05 16:24) [47]

Для таких данных

15.03.2010 8:18 32,98893738
15.03.2010 8:31 32,77963257
15.03.2010 8:31 29,89930534
15.03.2010 8:31 26,62034416
15.03.2010 8:31 23,75000381
15.03.2010 8:31 20,82294464
15.03.2010 8:31 18,2397995
15.03.2010 8:32 16,26139832
15.03.2010 8:35 33,5317688
15.03.2010 8:35 30,3993988
15.03.2010 8:36 27,1519928
15.03.2010 8:36 23,95251846
15.03.2010 8:44 27,1519928
15.03.2010 8:55 23,75000381
15.03.2010 10:01 32,98893738


такой результат

15.03.2010 8:24:00 32,98893738
15.03.2010 8:36:00 23,95251846
15.03.2010 8:48:00 27,1519928
15.03.2010 9:00:00 23,75000381
15.03.2010 9:12:00 23,75000381
15.03.2010 9:24:00 23,75000381
15.03.2010 9:36:00 23,75000381
15.03.2010 9:48:00 23,75000381
15.03.2010 10:00:00 23,75000381


Обрати внимание на результат для 8:36:00, попробуй его объяснить.


 
Jeer ©   (2010-04-05 16:34) [48]

Продолжая тему от 24 марта для страдающего oleg1963lora - может и спасет сейчас этот код его задницу, но потом надо думать о смене работы:

-Сделано исключительно в образовательных целях.
-Оптимальность не преследовалась.

Проверено на его реальных данных

Исходный:
14.03.2010 09:34:43 14.5231561660767
14.03.2010 09:46:43 14.1527576446533
14.03.2010 09:58:43 14.1268815994263
14.03.2010 10:10:43 14.1656522750854
14.03.2010 10:22:42 13.9622182846069
14.03.2010 10:34:43 13.6965284347534
14.03.2010 10:46:42 13.9146432876587
14.03.2010 10:58:43 14.36341381073
14.03.2010 11:10:43 14.207914352417

Отфильтрованный:
14.03.2010 09:36:00 14.4835441018008
14.03.2010 09:48:00 14.1499903453797
14.03.2010 10:00:00 14.1310279077839
14.03.2010 10:12:00 14.1438658810064
14.03.2010 10:24:00 13.9334751385772
14.03.2010 10:36:00 13.7198870489853
14.03.2010 10:48:00 13.9631926646318
14.03.2010 11:00:00 14.3467840074741

type
 TDTArray = array of TDateTime;
var
 arDT, arDT12: TDTArray; // массивы времени исходный и кратный 12 мин
 arValues, arInterpol: array of double; // массивы значений исходный и прореженный интерполированный
 lst: TStringList;
 fsLoc: TFormatSettings;

// Поиск и возврат индекса в массиве со значением, меньшим заданного
function FindMiddle(const arValues: TDTArray; aValue: double; var idx: integer): boolean;
var i, hi: integer;
begin
 Result := False;
 hi := Length(arValues) - 1;
 for i := 0 to hi do
   if arValues[i] >= aValue then begin
     if (i > 0) then Result := True;
     idx := i - 1;
     Break;
   end;
end;

// Юникод в Анси
function UTF16_2_ANSI(const strFile: string): AnsiString;
var
 inBuf: PWideChar;
 hFile, fRead: Cardinal;
 fSize: DWORD;
begin
 Result := "";
 hFile := CreateFile(PChar(strFile), GENERIC_READ, 0, nil, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
 if hFile = INVALID_HANDLE_VALUE then Exit;
 inBuf := nil;
 try
   fSize := GetFileSize(hFile, nil);
   if fSize = 0 then Exit;
   GetMem(inBuf, fSize);
   if ReadFile(hFile, inBuf^, fSize, fRead, nil) and (Ord(inBuf^) = $FEFF) then
     Result := (WideCharLenToString(inBuf + 1, (fRead div 2) - 1));
 finally
   FreeMem(inBuf);
   CloseHandle(hFile);
 end;
end;

// Парсинг входного файла
procedure TfmStatusForm.m_Parse;
var i, j, k, m: integer;
 s, ss: string;
begin
 lst := TStringList.Create;
 try
   lst.Text := UTF16_2_ANSI(opd.FileName);
   j := 0;
   GetLocaleFormatSettings(LOCALE_SYSTEM_DEFAULT, fsLoc);

   with fsLoc do begin
     DecimalSeparator := ",";
     DateSeparator := ".";
     ShortDateFormat := "DD.MM.YYYY";
     ShortTimeFormat := "HH:MM:SS";
   end;

   SetLength(arDT, lst.Count);
   SetLength(arValues, lst.Count);
   for i := 0 to lst.Count - 1 do begin
     s := Trim(lst[i]);
     if (Length(s) > 19) then begin
       k := Pos(#32, s);
       m := Pos(#9, s);
       if (k > 0) and (m > 0) and (m > k) then begin
         ss := Copy(s, 1, m - 1);
         arDT[j] := StrToDateTime(ss, fsLoc);
         arValues[j] := StrToFloat(Copy(s, m + 1, Length(s) - m), fsLoc);
         Inc(j);
       end;
     end;
   end; // for
 finally
   lst.Free;
 end; // try

 SetLength(arDT, j - 1);
 SetLength(arValues, j - 1);

 lbx.Clear;
 fsLoc.DecimalSeparator := ".";
 for i := 0 to High(arDT) do
   lbx.Items.Add(DateTimetoStr(arDT[i], fsLoc) + #9 + FloatToStr(arValues[i], fsLoc));

end;

// Прореживание массива и интерполяция ( линейная )
procedure TfmStatusForm.m_Interpol;
const
 cMPD = 24 * 60.0;
 c12 = 12;
var
i, j, k: integer;
 xi: integer;
 xd: double;
 x1, y1, dx, dy: double;
begin
 SetLength(arDT12, Length(arDT));
 SetLength(arInterpol, Length(arDT));
 k := 0;
 xi := round((int(arDT[0] * cMPD / c12) + 1) * c12);
 for i := 0 to High(arDT) - 2 do begin
   xd := xi / cMPD;
   if not FindMiddle(arDT, xd, j) then break;
   x1 := arDT[j];
   dx := arDT[j + 1] - x1;
   y1 := arValues[j];
   dy := arValues[j + 1] - y1;
   arInterpol[k] := y1 + (dy / dx) * (xd - x1);
   arDT12[k] := xd;
   Inc(k);
   Inc(xi, c12);
 end; // for
 SetLength(arInterpol, k);

 fsLoc.DecimalSeparator := ".";
 lbx.Clear;
 for i := 0 to High(arInterpol) do
   lbx.Items.Add(DateTimetoStr(arDT12[i], fsLoc) + #9 + FloatToStr(arInterpol[i], fsLoc));

end;


 
Anatoly Podgoretsky ©   (2010-04-05 16:45) [49]

> Jeer  (05.04.2010 16:34:48)  [48]

Interpol это не интерполяция, а международный розыск преступников


 
Jeer ©   (2010-04-05 16:50) [50]


> Anatoly Podgoretsky ©   (05.04.10 16:45) [49]
>
> > Jeer  (05.04.2010 16:34:48)  [48]
>
> Interpol это не интерполяция, а международный розыск преступников


Вай.. не оттуда функцию скопи-пастил :(


 
Jeer ©   (2010-04-06 22:37) [51]

Неужели мужика уволили ?
Да нет, в общем-то, и не зря - но всегда сердце щемит за "ушедших на дно" :(


 
oleg1963lora   (2010-04-09 16:12) [52]

Здравствуйте Мастера!!!
Хочу поделиться радостью с трудом сделанной работы.
Пусть я плавал за моря, хоть и долго, но не зря.
Сполнил всетаки заданье хитроумного Царя! (В данном контексте - начальника) (с) Филатов

Посмотрите что у меня получилось на

http://narod.ru/disk/19548920000/ParserFile.pas.html.

Огромное спасибо Анатолию Подгорецкому, Jeer, Sha  и многим другим за помощь и дельные советы.
Отдельное спасибо И.Павел за сочувствие и моральную поддержку.

Показал сделанное начальству и оно отложило мое увольнение на неопределенное время. Ядро программы сделано, дальше буду навешивать различные полезные игрушки.
(Модуль содержит конвертер из Unicode в ASCII (обычный текстовик),
парсер входного файла и загрузчик в mdb-файл)
Сделано в Code Gear Delphi 2009.


 
Jeer ©   (2010-04-09 16:30) [53]

Спасся человек :)

P.S.
Нервным, parserFile.pas лучше не смотреть.



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

Текущий архив: 2010.08.27;
Скачать: CL | DM;

Наверх




Память: 0.66 MB
Время: 0.06 c
2-1274178138
NBAH1990
2010-05-18 14:22
2010.08.27
Как запретить нажатие Alt+Tab, Ctrl+alt+del, ctrl+esc, alt+f4 ?


2-1270730334
JohnKorsh
2010-04-08 16:38
2010.08.27
Можно ли из Delphi изменить IP адрес?


2-1270662405
Vincero
2010-04-07 21:46
2010.08.27
Узнать текущую ширину edit а


15-1268075230
Loginov Dmitry
2010-03-08 22:07
2010.08.27
Windows 7 и RunAs


15-1266164269
CSS
2010-02-14 19:17
2010.08.27
Win7 - не запускается проводник





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