Delphi-int.ru: портал программистов

Вход Регистрация | Забыли пароль?

Просмотр кода

Идентификатор: ff168ddb Описание: 5580 Код загружен: 16 августа 2011, 16:27 (min@y™)

unit uRoutines;
 
interface
 
uses
  Windows, SysUtils, Controls, ComCtrls, Classes, Registry, Forms;
 
function ListColumnsToStr(AColumns: TListColumns): string;
procedure StrToListColumns(const S: string; AColumns: TListColumns);
function GetFileVersion: string;
procedure AutoRun(const Enabled: Boolean);
function AutoRunExists: Boolean;
function TimeInPeriod(const ATime, AFrom, ATo: TTime): Boolean;
function TimeSpan(const AFrom, ATo: TTime): TTime;
function TimeSpanInPeriod(const ASpanFrom, ASpanTo, AFrom, ATo: TTime): Boolean;
function IntToStrLeadingZeros(const Value, Places: Integer): string;
function BetweenInt(const Value, LowLimit, HighLimit: Integer): Boolean;
 
// Глобальные переменные и константы
const
  // Запуск только одной копии программы
  OneInstMutexName       = 'WCOneInstanceMutex';
  OneInstActivateMessage = 'WCActivateMessage';
 
  // О программе и версии
  AboutText = 'Программа Worker Clocker предназначена для несчастных '#13#10 +
              'работников, коротающих время до конца рабочего дня.'#13#10 +
              'Разработал от нефига делать min@y™ (© 2009),'#13#10 +
              'mailto:minay.tm@gmail.com'#13#10#13#10 +
              'Версия программы: %s.';
 
  // Звуки пользователя - что это такое?
  WhatIsIt = 'В этом списке звуковые файлы *. wav и/или *.mp3, заданные пользователем (не более 128 штук).'#13#10 +
             'Первые 10 из них будут проигрываться по глобальным комбинациям клавиш WIN+1...WIN+0.'#13#10 +
             'Для остановки воспроизведения нажми WIN+пробел.';
 
  // Курсоры
  crHand = 1;
  crFist = 2;
var
  // Запуск только одной копии программы
  MutexHandle:     THandle;
  WCM_ACTIVATE:    Cardinal;
 
implementation
 
uses rpVersionInfo;
 
function ListColumnsToStr(AColumns: TListColumns): string;
var
  Index: Integer;
begin
  Result:= '';
  for Index:= 0 to AColumns.Count - 1 do
    if Index <> 0
      then Result:= Result + ';' + IntToStr(AColumns[Index].Width)
      else Result:= IntToStr(AColumns[Index].Width);
end;
 
procedure StrToListColumns(const S: string; AColumns: TListColumns);
var
  Index, Width: Integer;
  List: TStringList;
begin
  List:= TStringList.Create();
  try
    List.Delimiter:= ';';
    List.DelimitedText:= S;
 
    for Index:= 0 to List.Count - 1 do
      begin
        if Index > AColumns.Count - 1
          then Break;
 
        if TryStrToInt(List[Index], Width)
          then AColumns[Index].Width:= Width;
      end;
  finally
    List.Free();
  end;
end;
 
function GetFileVersion: string;
var
  Info: TrpVersionInfo;
begin
  Info:= TrpVersionInfo.Create(nil);
  try
    Result:= Format(AboutText, [Info.FileVersion]);
  finally
    Info.Free();
  end;
end;
 
procedure AutoRun(const Enabled: Boolean);
var
  Reg: TRegistry;
begin
  Reg:= TRegistry.Create();
  try
    Reg.RootKey:= HKEY_CURRENT_USER;
    Reg.OpenKey('Software\Microsoft\Windows\CurrentVersion\Run', True);
 
    if Enabled // Добавление в автозагрузку
      then Reg.WriteString('WorkerClocker', ParamStr(0))
      else begin // Удаление из автозагрузки
             if Reg.ValueExists('WorkerClocker')
               then try
                      Reg.DeleteValue('WorkerClocker');
                    except
                      Application.MessageBox(PChar('Не удалось удалить ключ автозапуска.'),
                                             PChar('Ошибка'),
                                             MB_OK + MB_ICONERROR);
                    end;
           end;
  finally
    Reg.Free();
  end;
end;
 
function AutoRunExists: Boolean;
var
  Reg: TRegistry;
begin
  Reg:= TRegistry.Create();
  try
    Reg.RootKey:= HKEY_CURRENT_USER;
    Reg.OpenKey('Software\Microsoft\Windows\CurrentVersion\Run', True);
    Result:= Reg.ValueExists('WorkerClocker');
  finally
    Reg.Free();
  end;
end;
 
// Вычисление попадания времени суток ATime в период между AFrom и ATo
function TimeInPeriod(const ATime, AFrom, ATo: TTime): Boolean;
var
  X, F, T: TTime;
begin
  X:= Frac(ATime); // На всякий случай
  F:= Frac(AFrom); // На всякий случай
  T:= Frac(ATo);   // На всякий случай
 
  if T >= F
    then Result:= (X >= F) and (X <= T)
    else Result:= (X >= F) and (X < 1.0) or (X >= 0.0) and (X <= T);
end;
 
// Вычисление длительности периода между временами суток AFrom и ATo
function TimeSpan(const AFrom, ATo: TTime): TTime;
var
  F, T: TTime;
begin
  F:= Frac(AFrom); // На всякий случай
  T:= Frac(ATo);   // На всякий случай
 
  if T >= F
    then Result:= Frac(T - F)
    else Result:= Frac(1 - (F - T));
end;
 
// Вычисление попадания периода вермени суток [ASpanFrom...ASpanTo]
// целиком в период [AFrom...ATo]
function TimeSpanInPeriod(const ASpanFrom, ASpanTo, AFrom, ATo: TTime): Boolean;
begin
  Result:= TimeInPeriod(ASpanFrom, AFrom, ATo) and TimeInPeriod(ASpanTo, AFrom, ATo);
end;
 
function IntToStrLeadingZeros(const Value, Places: Integer): string;
begin
  Result:= IntToStr(Value);
  while Length(Result) < Places do
    Result:= '0' + Result;
end;
 
function BetweenInt(const Value, LowLimit, HighLimit: Integer): Boolean;
begin
  Result:= (Value >= LowLimit) and (Value <= HighLimit);
end;
 
end.

Ссылка на данный код:

На главную страницу сервиса обмена кодом »