LibKing » Книги » comp-programming » Валентин Озеров - Советы по Delphi. Версия 1.4.3 от 1.1.2001

Валентин Озеров - Советы по Delphi. Версия 1.4.3 от 1.1.2001

Тут можно читать онлайн Валентин Озеров - Советы по Delphi. Версия 1.4.3 от 1.1.2001 - бесплатно полную версию книги (целиком). Жанр: comp-programming. Здесь Вы можете читать полную версию (весь текст) онлайн без регистрации и SMS на сайте LibKing.Ru (ЛибКинг) или прочесть краткое содержание, предисловие (аннотацию), описание и ознакомиться с отзывами (комментариями) о произведении.
libking
  • Название:
    Советы по Delphi. Версия 1.4.3 от 1.1.2001
  • Автор:
  • Жанр:
  • Издательство:
    неизвестно
  • Год:
    неизвестен
  • ISBN:
    нет данных
  • Рейтинг:
    4/5. Голосов: 101
  • Избранное:
    Добавить в избранное
  • Ваша оценка:

Валентин Озеров - Советы по Delphi. Версия 1.4.3 от 1.1.2001 краткое содержание

Советы по Delphi. Версия 1.4.3 от 1.1.2001 - описание и краткое содержание, автор Валентин Озеров, читайте бесплатно онлайн на сайте электронной библиотеки LibKing.Ru

…начиная с 1001. Смотрите другие файлы…

Советы по Delphi. Версия 1.4.3 от 1.1.2001 - читать онлайн бесплатно полную версию (весь текст целиком)

Советы по Delphi. Версия 1.4.3 от 1.1.2001 - читать книгу онлайн бесплатно, автор Валентин Озеров
Тёмная тема

Шрифт:

Сбросить

Интервал:

Закладка:

Сделать

Result := True;

end;

end;

functionEncodeTime(Hour, Min, Sec, MSec: Word): TDateTime;

begin

if notDoEncodeTime(Hour, Min, Sec, MSec, Result) thenConvertError(LoadStr(STimeEncodeError));

end;

Как вы можете видеть, проверка Time24Hour присутствует. Я думал в Browser все будет также. Ничего подобного! Я уж грешным делом подумал, что Time24Hour объявили устаревшим, исключили из поддержки, выбросили частично из кода, но забыли почистить файл помощи. Вы так не думаете?

Переменная времени

Delphi 1

Используйте переменную типа TDateTime.

procedureTForm1.XXXXXXXClick(Sender: TObject);

varStartTime, EndTime, ElapsedTime :TDateTime;

begin

StartTime := Now;

{Здесь поместите свой код}

EndTime := Now;

ElapsedTime := EndTime - StartTime;

Label1.Caption := TimeToStr(ElapsedTime);

end;

{теперь все это в памяти, но в нашем случае это хорошее место. }

var

before,after,elapsed : TDateTime;

Ehour, Emin, Esec, Emsec : WORD;

before := now;

some_process();

after := now;

elapsed := after - before;

decodetime(elapsed, Ehour, Emin, Esec, Emsec);

теперь Ehour:Emin:Esec.Emsec будет содержать истекшее время.

Это то, что я хотел. fStartWhen содержит дату/время начала процесса. (fStartWhen := NOW). OneSecond — константа, определенная как 1/24/3600. (Да, эта программа может выполняться для нескольких дней. Но даже самый быстрый P5 может не справиться с большим количеством данных!)

PROCEDURE TformDBLoad.UpdateTime;

VAR Delta: TDateTime

BEGIN

fLastUpdate := NOW

IFABS(fStartWhen - fLastUpdate ) < OneSecond THEN EXIT

Delta := fLastUpdate - fStartWhendoElapsedTime.Caption := FORMAT('%1. дней из %s', [INT(Delta),FORMATDATETIME('hh:nn:ss', FRAC(Delta))])

END;

Математика

Как научить Delphi делать правильное округление дробных чисел?

Nomadicсоветует:

Целая коллекция способов -

Для решения этой проблемы мною написана функция, которую можно модифицировать для всех случаев. Смысл заключается в том, что рассматривается строка. После этого все проблемы с округлением снялись.

FunctionRoundStr(Zn:Real;kol_zn:Integer):Real;

{Zn-значение; Kol_Zn-Кол-во знаков после запятой}

Var

snl,s,s0,s1,s2: String;

n,n1:Real;

nn,i:Integer;

begin

s:=FloatToStr(Zn);

if(Pos(',',s)>0) and(Zn>0) and(Length(Copy(s,Pos(',',s)+1,length(s)))>kol_zn) then begin

s0 := Copy(s,1,Pos(',',s)+kol_zn-1);

s1 := Copy(s,1,Pos(',',s)+kol_zn+2);

s2 := Copy(s1,Pos(',',s1)+kol_zn,Length(s1));

n := StrToInt(s2)/100;nn := Round(n);

ifnn >= 10 then begin

snl := '0,';

Fori := 1 tokol_zn - 1 dosnl := snl + '0';

snl := snl+'1';

n1 := StrToFloat(Copy(s,1,Pos(',',s)+kol_zn))+StrToFloat(snl);

s := FloatToStr(n1);

ifPos(',',s) > 0 thens1 := Copy(s,1,Pos(',',s)+kol_zn);

end elses1 := s0 + IntToStr(nn);

ifs1[Length(s1)]=',' thens1 := s1 + '0';

Result := StrToFloat(s1);

end elseResult := Zn;

end;

Все-таки работа со строками здесь излишество -

functionRoundEx( X: Double; Precision : Integer ): Double;

{Precision : 1 - до целых, 10 - до десятых, 100 - до сотых...}

var

ScaledFractPart, Temp : Double;

begin

ScaledFractPart := Frac(X)*Precision;

Temp := Frac(ScaledFractPart);

ScaledFractPart := Int(ScaledFractPart);

ifTemp >= 0.5 thenScaledFractPart := ScaledFractPart + 1;

ifTemp <= -0.5 thenScaledFractPart := ScaledFractPart - 1;

RoundEx := Int(X) + ScaledFractPart/Precision;

end;

Разное

Генерация еженедельных списков задач

Мне необходима программа, которая генерировала бы еженедельные списки задач. Программа должна просто показывать количество недель в списке задач и организовывать мероприятия, не совпадающие по времени. В моем текущем планировщике у меня имеется 12 групп и планы на 11 недель.

Мне нужен простой алгоритм, чтобы решить эту проблему. Какие идеи?

Вот рабочий код (но вы должны просто понять алгоритм работы):

unitUnit1;

interface

usesWindows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;

typeTForm1 = class(TForm)

ListBox1: TListBox;

Edit1: TEdit;

Button1: TButton;

procedureButton1Click(Sender: TObject);

private{ Private declarations }

public{ Public declarations }

end;

varForm1: TForm1;

implementation

{$R *.DFM}

constmaxTeams = 100;

var

Teams: Array[1..maxTeams] ofinteger;

nTeams, ix, week, savix: integer;

functionWriteBox(week: integer): string;

var

str: string;

ix: integer;

begin

Result := Format('Неделя=%d ',[week]);

forix := 1 tonTeams do begin

ifodd(ix) thenResult := Result+' '

elseResult := Result+'v';

Result := Result+IntToStr(Teams[ix]);

end;

end;

procedureTForm1.Button1Click(Sender: TObject);

begin

nTeams := StrToInt(Edit1.Text);

ifOdd(nTeams) theninc(nTeams); {должны иметь номера каждой группы}

ListBox1.Clear;

forix := 1 tonTeams doTeams[ix] := ix;

ListBox1.Items.Add(WriteBox(1));

forweek := 2 tonTeams-1 do begin

Teams[1] := Teams[nTeams-1]; {используем Teams[1] в качестве временного хранилища}

forix := nTeams downto2 do if notOdd(ix) then begin

savix := Teams[ix];

Teams[ix] := Teams[1];

Teams[1] := savix;

end;

forix := 3 tonTeams-1 do ifOdd(ix) then begin

savix := Teams[ix];

Teams[ix] := Teams[1];

Teams[1] := savix;

end;

Teams[1] := 1; {восстанавливаем известное значение}

ListBox1.Items.Add(WriteBox(week));

end;

end;

end.

Mike Orriss

Генерация случайного пароля

The_Sprite советует:

Вам понадобилось, чтобы Ваше приложение само создавало пароли ? Возможно данный способ Вам пригодится. Всё очень просто: пароль создаётся из символов, выбираемых случайным образом из таблицы.

Совместимость: Delphi 5.x (или выше)

Собственно сам исходничек: Пароль создаётся из символов, содержащихся в таблице.

Внимание: Длина пароля должна быть меньше, чем длина таблицы!

// запускаем генератор случайных чисел (только при старте приложения).

procedureTForm1.FormCreate(Sender: TObject);

begin

Randomize;

end;

functionRandomPwd(PWLen: integer): string;

// таблица символов, используемых в пароле

Читать дальше
Тёмная тема

Шрифт:

Сбросить

Интервал:

Закладка:

Сделать


Валентин Озеров читать все книги автора по порядку

Валентин Озеров - все книги автора в одном месте читать по порядку полные версии на сайте онлайн библиотеки LibKing.




Советы по Delphi. Версия 1.4.3 от 1.1.2001 отзывы


Отзывы читателей о книге Советы по Delphi. Версия 1.4.3 от 1.1.2001, автор: Валентин Озеров. Читайте комментарии и мнения людей о произведении.


Понравилась книга? Поделитесь впечатлениями - оставьте Ваш отзыв или расскажите друзьям

Напишите свой комментарий
Большинство книг на сайте опубликовано легально на правах партнёрской программы ЛитРес. Если Ваша книга была опубликована с нарушениями авторских прав, пожалуйста, направьте Вашу жалобу на PGEgaHJlZj0ibWFpbHRvOmFidXNlQGxpYmtpbmcucnUiIHJlbD0ibm9mb2xsb3ciPmFidXNlQGxpYmtpbmcucnU8L2E+ или заполните форму обратной связи.
img img img img img