Как разобраться с поведением контролллов?
 Добавлено: 06.01.2020 08:22:40
Добавлено: 06.01.2020 08:22:40Приветствую!
Использую Lazarus 2.0.6
Пишу программу для загрузки цифровых сертификатов из интернета.
Проблема в том, что когда я на вкладке расписание ставлю флажок "Включить расписание" (chbActivateSheduler), выбираю радиокнопку "Однократный запуск" (rgChooseLaunchVariant.ItemIndex=0) и указываю в сооветствующей группе на контролле выбора даты запуска (dtpOnceLaunchDate) дату ранее настоящей, у меня флажок "Включить расписание" и обе группы - Выбор однократного и многократного запуска загрузки - становятся недоступны.
Вот код:
Плиз хелп!
			Использую Lazarus 2.0.6
Пишу программу для загрузки цифровых сертификатов из интернета.
Проблема в том, что когда я на вкладке расписание ставлю флажок "Включить расписание" (chbActivateSheduler), выбираю радиокнопку "Однократный запуск" (rgChooseLaunchVariant.ItemIndex=0) и указываю в сооветствующей группе на контролле выбора даты запуска (dtpOnceLaunchDate) дату ранее настоящей, у меня флажок "Включить расписание" и обе группы - Выбор однократного и многократного запуска загрузки - становятся недоступны.
Вот код:
- Код: Выделить всё
- unit unMain;
 {$mode objfpc}{$H+}
 interface
 uses
 Classes, SysUtils, Forms, Controls, Graphics, Dialogs, ExtCtrls, Menus,
 ComCtrls, StdCtrls, DateTimePicker, IdHTTP, Types, IdComponent, inifiles,
 windows;
 type
 { TfmCer_Downloader_1_1 }
 TfmCer_Downloader_1_1 = class(TForm)
 ApplicationProperties1: TApplicationProperties;
 bBrowse: TButton;
 bCerDownload: TButton;
 bSaveSettings: TButton;
 bLoadSettings: TButton;
 bClearPathToDownload: TButton;
 chbUseProxy: TCheckBox;
 chbBasicAuth: TCheckBox;
 chbActivateSheduler: TCheckBox;
 cbPeriod: TComboBox;
 dtpOnceLaunchDate: TDateTimePicker;
 dtpOnceLaunchTime: TDateTimePicker;
 dtpManyLaunchDate: TDateTimePicker;
 dtpManyLaunchTime: TDateTimePicker;
 edInterval: TEdit;
 edProxyServer: TEdit;
 edProxyPort: TEdit;
 edProxyUser: TEdit;
 edProxyPassword: TEdit;
 edPathToDownload: TEdit;
 gbOnceLaunch: TGroupBox;
 gbManyLaunch: TGroupBox;
 IdHTTP: TIdHTTP;
 Label1: TLabel;
 Label10: TLabel;
 Label11: TLabel;
 Label12: TLabel;
 Label13: TLabel;
 Label14: TLabel;
 Label15: TLabel;
 lbManyLaunchPriorDate: TLabel;
 lbManyLaunchBeginDate: TLabel;
 lbManyLaunchPeriod: TLabel;
 Label8: TLabel;
 lbManyLaunchNextDate: TLabel;
 Label2: TLabel;
 Label3: TLabel;
 Label4: TLabel;
 Label5: TLabel;
 Label6: TLabel;
 Label7: TLabel;
 lbOnceLaunchStatus: TLabel;
 Label9: TLabel;
 lbProxyPassword: TLabel;
 lbProxyUser: TLabel;
 lbProxyPort: TLabel;
 lbProxyServer: TLabel;
 mLog: TMemo;
 miExit: TMenuItem;
 miAbout: TMenuItem;
 pcTools: TPageControl;
 ppMenu: TPopupMenu;
 pbDownloadProgress: TProgressBar;
 rgChooseLaunchVariant: TRadioGroup;
 sddSelectDir: TSelectDirectoryDialog;
 ShdTimer: TTimer;
 tsLog: TTabSheet;
 tsDownloading: TTabSheet;
 tsProxy: TTabSheet;
 tsShedulder: TTabSheet;
 tiTrayIcon: TTrayIcon;
 UpDwn: TUpDown;
 procedure bBrowseClick(Sender: TObject);
 procedure bCerDownloadClick(Sender: TObject);
 procedure bClearPathToDownloadClick(Sender: TObject);
 procedure bLoadSettingsClick(Sender: TObject);
 procedure bSaveSettingsClick(Sender: TObject);
 procedure chbActivateShedulerChange(Sender: TObject);
 procedure chbUseProxyChange(Sender: TObject);
 procedure FormActivate(Sender: TObject);
 procedure FormClose(Sender: TObject; var CloseAction: TCloseAction);
 procedure FormCreate(Sender: TObject);
 procedure IdHTTPWork(ASender: TObject; AWorkMode: TWorkMode;
 AWorkCount: Int64);
 procedure IdHTTPWorkBegin(ASender: TObject; AWorkMode: TWorkMode;
 AWorkCountMax: Int64);
 procedure IdHTTPWorkEnd(ASender: TObject; AWorkMode: TWorkMode);
 procedure miExitClick(Sender: TObject);
 procedure rgChooseLaunchVariantClick(Sender: TObject);
 procedure ShdTimerTimer(Sender: TObject);
 procedure tiTrayIconClick(Sender: TObject);
 procedure tsLogShow(Sender: TObject);
 private
 public
 end;
 var
 fmCer_Downloader_1_1: TfmCer_Downloader_1_1;
 implementation
 {$R *.lfm}
 { TfmCer_Downloader_1_1 }
 // Процедура недопущения запуска более одной копии программы
 Procedure OnlyOne();
 Begin
 CreateMutex(Nil, True, 'CER_Downloader_1.1');
 If GetLastError <> 0 Then
 Begin
 Halt;
 End;
 End;
 procedure TfmCer_Downloader_1_1.FormCreate(Sender: TObject);
 begin
 tiTrayIcon.Show;
 fmCer_Downloader_1_1.WindowState:=wsMinimized;
 //Application.MainForm.Hide;
 // Настройка для расписания
 UpDwn.Associate:=edInterval;
 UpDwn.Min:=1;
 UpDwn.Max:=31;
 UpDwn.Position:=1;
 edInterval.Refresh;
 // Запсук таймера
 ShdTimer.Enabled:=true;
 // недопущение запуска более одной копии программы
 OnlyOne();
 end;
 procedure TfmCer_Downloader_1_1.IdHTTPWork(ASender: TObject;
 AWorkMode: TWorkMode; AWorkCount: Int64);
 begin
 pbDownloadProgress.Position:=pbDownloadProgress.Position+AWorkCount;
 end;
 procedure TfmCer_Downloader_1_1.IdHTTPWorkBegin(ASender: TObject;
 AWorkMode: TWorkMode; AWorkCountMax: Int64);
 begin
 pbDownloadProgress.Max:=AWorkCountMax;
 end;
 procedure TfmCer_Downloader_1_1.IdHTTPWorkEnd(ASender: TObject;
 AWorkMode: TWorkMode);
 begin
 pbDownloadProgress.Position:=0;
 end;
 procedure TfmCer_Downloader_1_1.miExitClick(Sender: TObject);
 begin
 halt;
 end;
 procedure TfmCer_Downloader_1_1.rgChooseLaunchVariantClick(Sender: TObject);
 begin
 if rgChooseLaunchVariant.ItemIndex=0 then
 begin
 gbOnceLaunch.Enabled:=true;
 gbManyLaunch.Enabled:=false;
 end
 else
 begin
 gbOnceLaunch.Enabled:=false;
 gbManyLaunch.Enabled:=true;
 end;
 end;
 // ПРОЦЕДУРА ТИКАНЬЯ ТАЙМЕРА И ПРИ НЕОБХОДИМОСТИ - ЗАПУСК ЗАГРУЗКИ, ЕСЛИ НАСТРОЕНО РАСПИСАНИЕ
 procedure TfmCer_Downloader_1_1.ShdTimerTimer(Sender: TObject);
 var
 NowMoment: string;
 Ini: TIniFile;
 begin
 if chbActivateSheduler.Checked=true then
 begin
 // Для однокртного запуска
 if gbOnceLaunch.Enabled=true then
 begin
 if (lbOnceLaunchStatus.Caption<>'<не задано>') and ((lbOnceLaunchStatus.Caption<>'<запуск был выполнен>')) then
 begin
 NowMoment:=DateToStr(now) + ' ' + TimeToStr(Time);
 if NowMoment=trim(lbOnceLaunchStatus.Caption) then
 begin
 bCerDownloadClick(self);
 lbOnceLaunchStatus.Caption:='Выполнено: ' + lbOnceLaunchStatus.Caption;
 Ini:=TiniFile.Create(extractfilepath(paramstr(0))+'\settings.ini');
 Ini.WriteString('Sheduler', 'Status', 'Done');
 Ini.Free;
 end;
 end;
 end;
 // для многократного запуска
 if gbManyLaunch.Enabled=true then
 begin
 //
 end;
 end;
 end;
 procedure TfmCer_Downloader_1_1.FormClose(Sender: TObject;
 var CloseAction: TCloseAction);
 begin
 //fmCer_Downloader_1_1.WindowState:=wsMinimized;
 fmCer_Downloader_1_1.Visible:=false;
 fmCer_Downloader_1_1.hide;
 tiTrayIcon.Visible:=true;
 Abort;
 end;
 procedure TfmCer_Downloader_1_1.bBrowseClick(Sender: TObject);
 begin
 if sddSelectDir.Execute then
 begin
 if Length(sddSelectDir.FileName)<>3 then
 edPathToDownload.Text:=sddSelectDir.FileName + '\'
 else
 edPathToDownload.Text:=sddSelectDir.FileName;
 end;
 end;
 // Процедура скачки сертификатов из Интернета без прокси и с ним
 procedure TfmCer_Downloader_1_1.bCerDownloadClick(Sender: TObject);
 var
 url, r: WideString;
 i,j: LongInt;
 Stream: TMemoryStream;
 LogFile: TextFile;
 begin
 // Проверка на задание пути для скачки сертификатов
 if edPathToDownload.Text='' then
 begin
 MessageDlg('Предупреждение','Не выбрана папка для сохранения цифровых сертификатов!', mtWarning, [mbOK], 0);
 exit;
 end;
 try
 begin
 // скачка без прокси
 if chbUseProxy.Checked=false then
 begin
 // Сброс параметров прокси
 idHTTP.ProxyParams.Clear;
 // Скачка сертификата №1: http://rostelecom.ru/cdp/guc_gost12.crl
 Stream:=TMemoryStream.Create;
 url:='http://rostelecom.ru/cdp/guc_gost12.crl';
 for i:=1 to length(url) do
 begin
 if url[i]='.' then
 begin
 j:=i;
 end;
 end;
 r:=copy(url,j+1,length(url));
 IdHTTP.Get(url,Stream);
 Stream.SaveToFile(edPathToDownload.Text + 'guc_gost12.'+r);
 Stream.Free;
 // Скачка сертификата №2: http://reg1.sudrf.ru/CDP/4efd611cd8b8abe6ff127012b58d22b91061086c.crl
 Stream:=TMemoryStream.Create;
 url:='http://reg1.sudrf.ru/CDP/4efd611cd8b8abe6ff127012b58d22b91061086c.crl';
 for i:=1 to length(url) do
 begin
 if url[i]='.' then
 begin
 j:=i;
 end;
 end;
 r:=copy(url,j+1,length(url));
 IdHTTP.Get(url,Stream);
 Stream.SaveToFile(edPathToDownload.Text + '4efd611cd8b8abe6ff127012b58d22b91061086c.'+r);
 Stream.Free;
 // Скачка сертификата №3: http://iac.cdep.ru/ca/crl/67067459EFE0AB59F53CBB7D67C39D8B1C0D2511.crl
 Stream:=TMemoryStream.Create;
 url:='http://iac.cdep.ru/ca/crl/67067459EFE0AB59F53CBB7D67C39D8B1C0D2511.crl';
 for i:=1 to length(url) do
 begin
 if url[i]='.' then
 begin
 j:=i;
 end;
 end;
 r:=copy(url,j+1,length(url));
 IdHTTP.Get(url,Stream);
 Stream.SaveToFile(edPathToDownload.Text + '67067459EFE0AB59F53CBB7D67C39D8B1C0D2511.'+r);
 Stream.Free;
 // Запись в лог об успехе операции
 if FileExists(ExtractFilePath(ParamStr(0)) + '\log.log') then
 begin
 AssignFile(LogFile, ExtractFilePath(ParamStr(0)) + '\log.log');
 Append(LogFile);
 WriteLn(LogFile, DateToStr(Now) + ' ' + TimeToStr(Now) + ': ' + 'Загрузка сертификатов прошла успешно!');
 CloseFile(LogFile);
 end
 else
 begin
 AssignFile(LogFile, ExtractFilePath(ParamStr(0)) + '\log.log');
 Rewrite (LogFile);
 WriteLn(LogFile, DateToStr(Now) + ' ' + TimeToStr(Now) + ': ' + 'Загрузка сертификатов прошла успешно!');
 CloseFile(LogFile);
 end;
 end
 else
 begin
 // Скачать с прокси
 // Предварительная настройка прокси
 idHTTP.ProxyParams.ProxyServer:=trim(edProxyServer.Text);
 idHTTP.ProxyParams.ProxyPort:=StrToInt(trim(edProxyPort.Text));
 idHTTP.ProxyParams.ProxyUsername:=trim(edProxyUser.Text);
 idHTTP.ProxyParams.ProxyPassword:=trim(edProxyPassword.Text);
 idHTTP.ProxyParams.BasicAuthentication:=chbBasicAuth.Checked;
 // Скачка сертификата №1: http://rostelecom.ru/cdp/guc_gost12.crl
 Stream:=TMemoryStream.Create;
 url:='http://rostelecom.ru/cdp/guc_gost12.crl';
 for i:=1 to length(url) do
 begin
 if url[i]='.' then
 begin
 j:=i;
 end;
 end;
 r:=copy(url,j+1,length(url));
 IdHTTP.Get(url,Stream);
 Stream.SaveToFile(edPathToDownload.Text + 'guc_gost12.'+r);
 Stream.Free;
 // Скачка сертификата №2: http://reg1.sudrf.ru/CDP/4efd611cd8b8abe6ff127012b58d22b91061086c.crl
 Stream:=TMemoryStream.Create;
 url:='http://reg1.sudrf.ru/CDP/4efd611cd8b8abe6ff127012b58d22b91061086c.crl';
 for i:=1 to length(url) do
 begin
 if url[i]='.' then
 begin
 j:=i;
 end;
 end;
 r:=copy(url,j+1,length(url));
 IdHTTP.Get(url,Stream);
 Stream.SaveToFile(edPathToDownload.Text + '4efd611cd8b8abe6ff127012b58d22b91061086c.'+r);
 Stream.Free;
 // Скачка сертификата №3: http://iac.cdep.ru/ca/crl/67067459EFE0AB59F53CBB7D67C39D8B1C0D2511.crl
 Stream:=TMemoryStream.Create;
 url:='http://iac.cdep.ru/ca/crl/67067459EFE0AB59F53CBB7D67C39D8B1C0D2511.crl';
 for i:=1 to length(url) do
 begin
 if url[i]='.' then
 begin
 j:=i;
 end;
 end;
 r:=copy(url,j+1,length(url));
 IdHTTP.Get(url,Stream);
 Stream.SaveToFile(edPathToDownload.Text + '67067459EFE0AB59F53CBB7D67C39D8B1C0D2511.'+r);
 Stream.Free;
 // Запись в лог об успехе операции
 if FileExists(ExtractFilePath(ParamStr(0)) + '\log.log') then
 begin
 AssignFile(LogFile, ExtractFilePath(ParamStr(0)) + '\log.log');
 Append(LogFile);
 WriteLn(LogFile, DateToStr(Now) + ' ' + TimeToStr(Now) + ': ' + 'Загрузка сертификатов прошла успешно!');
 CloseFile(LogFile);
 end
 else
 begin
 AssignFile(LogFile, ExtractFilePath(ParamStr(0)) + '\log.log');
 Rewrite (LogFile);
 WriteLn(LogFile, DateToStr(Now) + ' ' + TimeToStr(Now) + ': ' + 'Загрузка сертификатов прошла успешно!');
 CloseFile(LogFile);
 end;
 end;
 end;
 except
 on e:Exception do
 begin
 //Вставляем строчку об ошибке в лог
 if FileExists(ExtractFilePath(ParamStr(0)) + '\log.log') then
 begin
 AssignFile(LogFile, ExtractFilePath(ParamStr(0)) + '\log.log');
 Append(LogFile);
 WriteLn(LogFile, DateToStr(Now) + ' ' + TimeToStr(Now) + ': ' + 'Возникла ошибка: ' + E.Message);
 CloseFile(LogFile);
 end
 else
 begin
 AssignFile(LogFile, ExtractFilePath(ParamStr(0)) + '\log.log');
 Rewrite (LogFile);
 WriteLn(LogFile, DateToStr(Now) + ' ' + TimeToStr(Now) + ': ' + 'Возникла ошибка: ' + E.Message);
 CloseFile(LogFile);
 end;
 Stream.Free;
 end;
 end;
 end;
 procedure TfmCer_Downloader_1_1.bClearPathToDownloadClick(Sender: TObject);
 begin
 edPathToDownload.Clear;
 end;
 // Процедура загрузки настроек
 procedure TfmCer_Downloader_1_1.bLoadSettingsClick(Sender: TObject);
 var
 ini: TIniFile;
 // Для однократного запуска
 TaskTime: string;
 Status: string;
 begin
 Ini:=TiniFile.Create(extractfilepath(paramstr(0))+'\settings.ini');
 // Грузим из ini-файла секцию основных настроек, General
 edPathToDownload.Text:=ini.ReadString('General','Folder', trim(edPathToDownload.Text));
 chbUseProxy.Checked:=Ini.ReadBool('General','UseProxy', false);
 chbActivateSheduler.Checked:=ini.ReadBool('General', 'UseSheduler', false);
 // Грузим из секции Прокси
 edProxyServer.Text:=Ini.ReadString('Proxy','ProxyServer', '');
 edProxyPort.Text:=IntToStr(Ini.ReadInteger('Proxy','ProxyPort', 0));
 edProxyUser.Text:=Ini.ReadString('Proxy','ProxyUser', '');
 edProxyPassword.Text:=Ini.ReadString('Proxy','ProxyPassword', '');
 chbBasicAuth.Checked:=Ini.ReadBool('Proxy','BasicAuth', false);
 // Грузим из секции расписания
 if ini.ReadBool('General', 'UseSheduler', false)=true then
 begin
 // Активируем галочку - использовать расписание
 chbActivateSheduler.Checked:=true;
 if ini.SectionExists('Sheduler') then
 begin
 TaskTime:=ini.ReadString('Sheduler', 'TaskTime', '');
 Status:=ini.ReadString('Sheduler', 'Status', '');
 if (TaskTime='') or (Status='') then
 exit;
 // Для однакратного запуска
 if TaskTime='Once' then
 begin
 chbActivateSheduler.Checked:=true;
 rgChooseLaunchVariant.ItemIndex:=0;
 dtpOnceLaunchDate.Date:=now;
 dtpOnceLaunchTime.Time:=time;
 // Обрубаем контроллы для многократного запуска
 dtpManyLaunchDate.Date:=now;
 dtpManyLaunchTime.Time:=time;
 UpDwn.Position:=1;
 edInterval.Refresh;
 cbPeriod.ItemIndex:=0;
 lbManyLaunchBeginDate.Caption:='<не задано>';
 lbManyLaunchPriorDate.Caption:='<не задано>';
 lbManyLaunchNextDate.Caption:='<не задано>';
 lbManyLaunchPeriod.Caption:='<не задано>';
 gbManyLaunch.Enabled:=false;
 // Отслеживаем выполненность/невыполненность однократного запуска
 if Status='Not yet' then
 begin
 lbOnceLaunchStatus.Caption:=ini.ReadString('Sheduler', 'Date', '') + ' ' + ini.ReadString('Sheduler', 'Time', '');
 ShdTimer.Enabled:=true;
 end;
 if Status='Done' then
 begin
 lbOnceLaunchStatus.Caption:='<запуск был выполнен>';
 end;
 end;
 // Для многократного запуска
 if TaskTime='Many' then
 begin
 end;
 end
 else
 // Если секции Sheduler не существует, тогда обрубаем контролл использовать расписание
 begin
 chbActivateSheduler.Checked:=false;
 rgChooseLaunchVariant.ItemIndex:=0;
 rgChooseLaunchVariant.Enabled:=false;
 end;
 end
 else
 begin
 //chbActivateSheduler.Checked:=false;
 //rgChooseLaunchVariant.ItemIndex:=0;
 end;
 end;
 // Процедура сохранения настроек программы
 procedure TfmCer_Downloader_1_1.bSaveSettingsClick(Sender: TObject);
 var
 ini: TIniFile;
 SelectedMoment: string;
 NowMoment: string;
 begin
 Ini:=TiniFile.Create(extractfilepath(paramstr(0))+'\settings.ini');
 Ini.WriteString('General','Folder', trim(edPathToDownload.Text));
 if chbUseProxy.Checked=true then
 begin
 Ini.WriteBool('General','UseProxy', chbUseProxy.Checked);
 Ini.WriteString('Proxy','ProxyServer', trim(edProxyServer.Text));
 try
 Ini.WriteInteger('Proxy','ProxyPort', StrToInt(trim(edProxyPort.Text)));
 except
 begin
 MessageDlg('Предупреждение','Не удается сохранить данные поля "Порт"! Вероятно, Вы ввели в это поле не численное значение!', mtWarning, [mbOK],0);
 ini.Free;
 exit;
 end;
 end;
 Ini.WriteString('Proxy','ProxyUser', trim(edProxyUser.Text));
 Ini.WriteString('Proxy','ProxyPassword', trim(edProxyPassword.Text));
 Ini.WriteBool('Proxy','BasicAuth', chbBasicAuth.Checked);
 end
 else
 begin
 Ini.WriteBool('General','UseProxy', false);
 Ini.WriteString('Proxy','ProxyServer', '');
 Ini.WriteInteger('Proxy','ProxyPort', 0);
 Ini.WriteString('Proxy','ProxyUser', '');
 Ini.WriteString('Proxy','ProxyPassword', '');
 Ini.WriteBool('Proxy','BasicAuth', false);
 end;
 //Сохранение настроек расписания
 // Сохранения факта выбора опцции - Расписание
 if chbActivateSheduler.Checked=true then
 ini.WriteBool('General', 'UseSheduler', true)
 else
 begin
 ini.WriteBool('General', 'UseSheduler', false);
 MessageDlg('Информация', 'Настройки сохранены!', mtInformation, [mbOK], 0);
 exit;
 end;
 // Для однократного запуска
 if (chbActivateSheduler.Checked=true) and (rgChooseLaunchVariant.ItemIndex=0) then
 begin
 SelectedMoment:=DateToStr(dtpOnceLaunchDate.Date) + ' ' + TimeToStr(dtpOnceLaunchTime.Time);
 NowMoment:=DateToStr(now) + ' ' + TimeToStr(time);
 if StrToDateTime(SelectedMoment) <= StrToDateTime(NowMoment) then
 begin
 MessageDlg('Предупреждение', 'Настройка однократной загрузки. Можно задать дату и время загрузки только большие чем текущие дата и время!', mtWarning, [mbOK], 0);
 dtpOnceLaunchDate.Date:=now;
 dtpOnceLaunchTime.Time:=time;
 exit;
 end;
 if ini.SectionExists('Sheduler') then
 ini.EraseSection('Sheduler');
 Ini.WriteString('Sheduler', 'TaskTime', 'Once');
 ini.WriteString('Sheduler', 'Date', DateToStr(dtpOnceLaunchDate.Date));
 ini.WriteString('Sheduler', 'Time', TimeToStr(dtpOnceLaunchTime.Time));
 lbOnceLaunchStatus.Caption:=ini.ReadString('Sheduler', 'Date', '') + ' ' + ini.ReadString('Sheduler', 'Time', '');
 // Заносим статус выполнения задания в ini-файл
 NowMoment:=DateToStr(now) + ' ' + TimeToStr(Time);
 if StrToDateTime(lbOnceLaunchStatus.Caption) > StrToDateTime(NowMoment) then
 ini.WriteString('Sheduler', 'Status', 'Not yet');
 // Обрубаем остальные контроллы для расписания
 // Для однократного запуска
 {chbActivateSheduler.Checked:=true;
 rgChooseLaunchVariant.Enabled:=true;
 rgChooseLaunchVariant.ItemIndex:=0;}
 dtpOnceLaunchDate.Date:=now;
 dtpOnceLaunchTime.Time:=time;
 // Для многократного запуска
 dtpManyLaunchDate.Date:=now;
 dtpManyLaunchTime.Time:=time;
 UpDwn.Position:=1;
 edInterval.Refresh;
 cbPeriod.ItemIndex:=0;
 lbManyLaunchBeginDate.Caption:='<не задано>';
 lbManyLaunchPriorDate.Caption:='<не задано>';
 lbManyLaunchNextDate.Caption:='<не задано>';
 lbManyLaunchPeriod.Caption:='<не задано>';
 end;
 // Для многократного запуска
 { if (chbActivateSheduler.Checked=true) and (rgChooseLaunchVariant.ItemIndex=1) then
 begin
 //
 end;}
 MessageDlg('Информация', 'Настройки сохранены!', mtInformation, [mbOK], 0);
 ini.Free;
 end;
 // Процедура активации опции Загрузки по расписанию: однократно/ многократно...
 procedure TfmCer_Downloader_1_1.chbActivateShedulerChange(Sender: TObject);
 begin
 if chbActivateSheduler.Checked=true then
 begin
 rgChooseLaunchVariant.Enabled:=true;
 rgChooseLaunchVariant.ItemIndex:=0;
 gbOnceLaunch.Enabled:=true;
 dtpOnceLaunchDate.Date:=now;
 dtpOnceLaunchTime.Time:=Time;
 gbManyLaunch.Enabled:=false;
 end;
 if chbActivateSheduler.Checked=false then
 begin
 rgChooseLaunchVariant.Enabled:=false;
 rgChooseLaunchVariant.ItemIndex:=0;
 gbOnceLaunch.Enabled:=false;
 dtpOnceLaunchDate.Date:=now;
 dtpOnceLaunchTime.Time:=Time;
 gbManyLaunch.Enabled:=false;
 end;
 end;
 procedure TfmCer_Downloader_1_1.chbUseProxyChange(Sender: TObject);
 begin
 if chbUseProxy.Checked=true then
 begin
 // делаем контроллы доступными
 lbProxyServer.Enabled:=true;
 lbProxyPort.Enabled:=true;
 lbProxyUser.Enabled:=true;
 lbProxyPassword.Enabled:=true;
 chbBasicAuth.Enabled:=true;
 edProxyServer.Enabled:=true;
 edProxyPort.Enabled:=true;
 edProxyUser.Enabled:=true;
 edProxyPassword.Enabled:=true;
 //edProxyServer.SetFocus;
 end
 else
 begin
 // делаем контроллы недоступными
 lbProxyServer.Enabled:=false;
 lbProxyPort.Enabled:=false;
 lbProxyUser.Enabled:=false;
 lbProxyPassword.Enabled:=false;
 chbBasicAuth.Enabled:=false;
 edProxyServer.Enabled:=false;
 edProxyPort.Enabled:=false;
 edProxyUser.Enabled:=false;
 edProxyPassword.Enabled:=false;
 end;
 end;
 // Процедура смены даты для настройки однократного запуска
 procedure TfmCer_Downloader_1_1.FormActivate(Sender: TObject);
 begin
 bLoadSettingsClick(self);
 // Отображение Прокси-контроллов
 if chbUseProxy.Checked=true then
 begin
 lbProxyServer.Enabled:=true;
 lbProxyPort.Enabled:=true;
 lbProxyUser.Enabled:=true;
 lbProxyPassword.Enabled:=true;
 chbBasicAuth.Enabled:=true;
 edProxyServer.Enabled:=true;
 edProxyPort.Enabled:=true;
 edProxyUser.Enabled:=true;
 edProxyPassword.Enabled:=true;
 end
 else
 begin
 lbProxyServer.Enabled:=false;
 lbProxyPort.Enabled:=false;
 lbProxyUser.Enabled:=false;
 lbProxyPassword.Enabled:=false;
 edProxyServer.Enabled:=false;
 edProxyPort.Enabled:=false;
 edProxyUser.Enabled:=false;
 edProxyPassword.Enabled:=false;
 chbBasicAuth.Enabled:=false;
 end;
 // Отображение контроллов Расписания
 chbActivateShedulerChange(self);
 end;
 procedure TfmCer_Downloader_1_1.tiTrayIconClick(Sender: TObject);
 begin
 fmCer_Downloader_1_1.Show;
 fmCer_Downloader_1_1.Top:=round(Screen.Height/4);
 fmCer_Downloader_1_1.Left:=round(Screen.Width/4);
 //fmCer_Downloader_1_1.Position:=poScreenCenter;
 fmCer_Downloader_1_1.WindowState:=wsNormal;
 fmCer_Downloader_1_1.Visible:=true;
 fmCer_Downloader_1_1.pcTools.Pages[0].Show;
 end;
 procedure TfmCer_Downloader_1_1.tsLogShow(Sender: TObject);
 var
 LogFile: widestring;
 begin
 LogFile:=ExtractFilePath(ParamStr(0)) + '\log.log';
 if FileExists(LogFile) then
 begin
 mLog.Lines.Clear;
 mLog.Lines.LoadFromFile(LogFile);
 end
 else
 begin
 mLog.Lines.Clear;
 mLog.Lines.Add('Лог-файл ещё не был создан программой! Для его создания проведите хотя бы одну загрузку цифровых сертификатов.');
 end;
 end;
 end.
Плиз хелп!