Логин: Пароль:    Регистрация Всеми возможностями сайта можно пользоваться
только после авторизации.
   Забыли пароль?

Поиск
L



Статистика
u
Пользователи онлайн: нет
Гостей онлайн: 6
Всего онлайн: 6
Зарегистрировано юзеров: 7441
Комментариев на сайте: 665
Новый юзер: Chloeidomb



Последние комментарии
c
Ginaneula прокомментировал "Урок 3 - Конструкция IF...THEN...ELSE":
[img]https://kapsuly-lipocarnit.ru/files/lipocarnit_1/img/product-head1.png[/img] [url=https://kapsuly-lipocarnit.ru/][img]https://karga.info/wp-content/uploads/2019/02/orig.jpg[/img][/url] Купить Липокарнит в Могилёве (Беларусь) через интернет-аптеку Функции Производитель: ООО "КоролевФарм" Форма выпуска: капсул Упаковка: полимер Объем: 72 г Срок действия: 2 года Доставка: почтой, курьером Оплата : наличными, карта Фотографии продукции Чтобы заказать Липокарнит, оставьте свои контактные данные в форме ниже, и мы свяжемся с вами как можно скорее. [url=https://kapsuly-lipocarnit.ru/]lipocarnit отзывы реальные[/url] - Мы обещаем полную анонимность. Ваши данные не будут переданы 3 людям. Внимание: внимательно проверьте введенный номер и не забудьте включить телефон, чтобы наш оператор мог с вами связаться. Левокарнитин для похудения Городская суета стимулирует постоянный стресс. Большинство людей не справляются с ними, они начинают компенсировать отвратительное настроение избытком соленой и высококалорийной пищи, что приводит к увеличению веса. Ожирение является предпосылкой других приобретенных заболеваний, таких как диабет, гипертония, склероз сосудистого русла, болезни сердца. Чтобы сохранить здоровье на долгие годы, вы должны иметь нормальный вес. Для этого есть комплекс Липокарнит. Что это за продукт Липокарнит - фармацевтический продукт, созданный российскими и швейцарскими учеными специально для лечения ожирения у пациентов с избыточным весом. Преимуществом продукта является стопроцентная натуральная композиция растительного происхождения, которая не подвергает организм чрезмерным нагрузкам при метаболизме его компонентов. Биологически активная добавка к пище доступна в форме капсул от производителя. Обмана нет Перед выпуском лечебного средства для продажи производитель выполнил медицинские тесты. Была взята контрольная группа клиентов, которые худели с помощью ежедневных физических нагрузок, правильного питания, различных органических добавок. Исследуемая группа не изменила привычного распорядка дня и образа жизни. Он просто воспринимал продукт Липокарнит. Динамика снижения веса один раз в день регистрировалась в дневнике. Данные контрольной группы были значительно ниже, чем в исследовании. Испытания и противопоказания для введения фармацевтического продукта По крайней мере, некоторые продукты имеют свои собственные ограничения на потребление. Пищевая добавка Липокарнит характеризуется небольшим перечнем противопоказаний. Отзывы Противопоказания Любая степень ожирения беременность; лактация; отвратительная переносимость фармацевтического продукта; аллергическая реакция на активные или вспомогательные компоненты препарата; Дефицит лактазы. Медицинские исследования не выявили побочных эффектов при введении биодобавки. Влияние [url=https://kapsuly-lipocarnit.ru/]липокарнит купить в могилеве[/url]а на организм Продукт положительно влияет на работу всех органов и систем пациента. Нормализует работу печени, восстанавливает ее клетки. Помогает очистить кишечный тракт, средство удаления накопившихся токсических веществ. Оказывает разрушительное действие на атеросклеротические бляшки артерий, что увеличивает их внутренний просвет. Благодаря этому эффекту улучшается питание органов и тканей, снижается риск инфаркта миокарда и инфаркта миокарда. Липокарнит снижает уровень холестерина и уровень сахара в крови. Биокомплекс повышает активность клеток мозговой ткани, ускоряет проведение нервных импульсов, улучшает память и общее самочувствие. Биоактивная добавка ускоряет клеточный метаболизм за счет истончения подкожного жира. В дополнение к этим эффектам липокарнит способен нормализовать гормональный фон организма человека. Препарат устраняет нарушение функции щитовидной железы. Многие женщины с историей гипотиреоза заметили улучшение своего общего состояния, укрепление ногтей, волос, нормализацию менструального цикла и отсутствие ночного пота при приеме Липокарнита. Состав и характеристика фармацевтического препарата Биокомплекс содержит три активных элемента. К ним относятся: липоевая кислота; L-корнитин; пиколинат хрома Основные эффекты биологических компонентов активной добавки компоненты Воздействие на организм ускоряет обмен веществ в клетках; подавляет всасывание обычных углеводов; разрушает жировые клетки, направляет энергию, выделяемую для восстановления силы тела; оказывает омолаживающее действие на кожу. облагораживает познавательные способности человека; стимулирует физическую активность пациента; снимает синдром приобретенной усталости; Способ введения энергии от расщепления жиров в конструкцию молекул белкового соединения ускоряет рост мышц. удаляет токсичные соединения, свободные радикалы, способ их абсорбции в кишечнике; снижает уровень сахара в крови; восстанавливает клетки мышечной и костной ткани. В совокупности эти три вещества выполняют регенеративную функцию для всех тканей организма. Примечание о введении биоактивных добавок Фармацевтический препарат следует употреблять потребителям с ожирением и избыточным весом по 1-2 капсулы 2 раза в день во время еды утром и вечером, запивая большим количеством воды. Вступительный курс составляет 1 месяц. Если результат не был достигнут, потребление Lipocarnitum может быть продолжено после 2-месячного перерыва. Перед введением препарата проконсультируйтесь с врачом. Не принимайте биологический комплекс самостоятельно. Где я могу найти Липокарнит Товар эксклюзивный, аналогов не имеет. В аптеке пт нет. Липокарнит можно приобрести только на нашем официальном сайте. Сейчас идет акция: фармацевтический продукт можно получить со скидкой 50% для всех посетителей. Рекламная продукция ограничена (осталось 60 упаковок). Поставщик имеет все необходимые лицензии и сертификаты для внедрения продукта. Посетите сайт производителя, закажите отличный продукт для похудения. Чтобы не покупать поддельный фармацевтический продукт, не покупайте биокомплекс в магазинах и других местах. Каждый пакет имеет свой уникальный код безопасности. Он может быть размещен на сайте производителя для проверки подлинности лечебного средства. Сколько стоит диетический продукт Общая стоимость липокарнита - 1980 руб. Цена лечебного средства со скидкой 50% составляет 990 рублей. Количество товара ограничено. Возьми комплекс по хорошей цене, сожги лишние килограммы, наслаждайся своей безупречной фигурой. Мы стараемся сделать все, чтобы вы не спали и были красивыми.
AshleyDuh прокомментировал "Урок 3 - Конструкция IF...THEN...ELSE":
[img]https://kapsuly-lipocarnit.ru/files/lipocarnit_1/img/product-head1.png[/img] [url=https://kapsuly-lipocarnit.ru/][img]https://karga.info/wp-content/uploads/2019/02/orig.jpg[/img][/url] Липокарнит в Казани Аптека 24 г. [url=https://kapsuly-lipocarnit.ru/]липокарнит для похудения[/url] - Казань, ул. Энергетиков, 3, 7 (843) 205–57–99 Таттехмедфарм г. Казань, ул. Охранники, 31/42, 7 (843) 222–00–03 Сакура, аптека № 1 г. Казань, ул. Адоратского, 1а, 7 (843) 527–61–72 Приусадебный участок г. Казань, ул. Ричард Зорге, 57, 7 (843) 204–05–60 Вита Казань, ул. Декабристы, 131, 7 (843) 239–15–20 Аккуратная аптека Казань, Сибирский тракт, 22, 7 (843) 279–50–35 Последняя покупка: просто Сейчас 99 человек смотрят этот продукт Последняя покупка: просто Сейчас 99 человек смотрят этот продукт Приготовление натуральных ингредиентов Это не лекарство и пищевая добавка Доставка : от 99 руб. укажите оператор Платеж : наличные / карта при получении Липокарнит - правильный курс для естественной потери веса до 10 кг на курс Для 90% людей с великолепными формами похудение сравнимо с изощренными пытками инквизиции. Отказ от любимых блюд, строгий контроль аппетита, ежедневные изнурительные нагрузки и постоянное нервное напряжение до следующего взвешивания. До недавнего времени через него проходили все, кто осмелился избавиться от лишнего веса в виде жира на боку, животе, бедрах и других частях тела. Но такие методы помогают только 40% людей с избыточным весом, потому что очень часто причиной его набора является не недостаточная активность или переедание, а замедление метаболических процессов. Чтобы стать победителем в борьбе за гармонию, диетологи рекомендуют покупать Липокарнит - в Казани нет других средств для похудения, которые могут деликатно и безопасно разгонять обменные процессы и сжигать жировые отложения без потери здоровья. Что такое Липокарнит, состав продукта Препарат Липокарнит - это 100% органический продукт, состоящий из активных аминокислот, способствующих расщеплению жировых клеток. Выпускается в виде желатиновых капсул, внутри которых находится белый порошок. Их удобно принимать, а активные вещества всасываются в кишечнике, отвечают за всасывание органических аминокислот. Благодаря этому активные ингредиенты полностью усваиваются. В состав препарата входит: Липоевая кислота - это органическое вещество, участвующее в переработке глюкозы и других сахаров. При ее участии утилизируются метаболиты, потенциально опасные для клеток печени, а жировые ткани превращаются в энергию и воду.Липоевая кислота показана для использования профессиональными спортсменами для улучшения метаболических процессов и поддержания физической формы. Пиколинат хрома - органическое производное триптофана, способствует образованию мышечной массы и расщеплению жира. Полезным свойством соединения при похудении является ослабление аппетита. [img]https://kapsuly-lipocarnit.ru/files/lipocarnit_1/img/review-3.jpg[/img] L-карнитин - это органическая аминокислота, которая превращает жировую ткань в энергию и воду. Дополнительным полезным свойством этого вещества является снижение уровня холестерина в крови. Аминокислота подавляет всасывание жиров в кишечнике. Средство оказывает комплексное воздействие на организм: помогает уменьшить количество жира в организме и предотвращает его повторное накопление. Как работает [url=https://kapsuly-lipocarnit.ru/]липокарнит в аптеках казани[/url] Действие препарата сильно отличается от других препаратов для похудения. Препарат не создает чувства сытости, не изменяет процесс пищеварения, но в то же время помогает избавиться от жировых отложений. Это стало возможным благодаря уникальной способности Lipocarnitum перепрограммировать обмен энергии и обмен веществ в организме. Активные вещества сами по себе не влияют на жировые клетки. Они заставляют организм активизировать свои собственные ресурсы. Результат: разрушение мембран жировых клеток; Расщепление жира - энергия и вода высвобождаются; Энергия, получаемая от сжигания жира, направляется в жизненно важные органы. Эта короткая схема содержит естественный процесс, представленный природой, но по какой-то причине нарушенный. Возвращение в состояние, естественное для здорового организма, не проходит бесследно. На фоне снижения веса нормализуются артериальное давление, уровень глюкозы в крови и холестерина. Общее состояние организма улучшается, энергия увеличивается. При использовании Липокарнита нет необходимости менять привычки питания. Тренировки в тренажерном зале также необязательны. После недели приема препарата прилив энергии будет таким, что сам организм потребует повышенной активности. С курсом приема препарат не вызывает привыкания. Тело, настроившись на режим, необходимый для похудения, продолжает бороться с лишним весом самостоятельно. Эффект длится 60 дней. Как взять Несмотря на то, что Липокарнит не продается в аптеке в Казани, применение препарата следует проводить строго по инструкции. Нарушение описанных в нем правил потенциально опасно для здоровья. Липокарнит на завтрак и ужин принимайте по 1 или 2 капсуле в зависимости от исходного веса. Курс похудения длится 30 дней. За это время наблюдается потеря веса не менее 2 кг (при небольшом лишнем весе). У тучных людей с высокой степенью ожирения потеря веса достигает до 20 кг в месяц. При необходимости дальнейшего похудения курс повторяют через 60 дней, когда предыдущий теряет силу. Побочные эффекты и противопоказания При использовании в соответствии с инструкцией побочные эффекты после приема Липокарнита не возникают. Ему также не хватает серьезных противопоказаний. Препарат подходит для похудения у диабетиков и тех, кто испытал гормональные изменения. Единственная категория людей, которым противопоказано применение препарата - это беременные и кормящие женщины. В редких случаях после применения капсул индивидуальные реакции непереносимости возникают в виде: дискомфорт в кишечнике; сыпь на коже; n; [img]https://kapsuly-lipocarnit.ru/files/lipocarnit_1/img/review-2.jpg[/img] заложенность носа. При появлении симптоматических препаратов, назначенных лечащим врачом, это поможет. Купить Липокарнит Не рекомендуется приобретать капсулы для похудения данной марки в магазинах товаров для здоровья. Производитель не поставляет препарат в розничные сети. Вы можете заказать его только у официальных представителей в интернете.Это позволило гарантировать, что цена на Липокарнит в Казани соответствует заявленной производителем, поскольку нет торговых наценок. Кроме того, при покупке у дистрибьюторов, к которым относится Аптека-5, предоставляется 100% гарантия качества и подлинности товара. В Аптеке-5 вы можете заказать Липокарнит со скидкой, пока действует акция. Постоянным клиентам предоставляются дополнительные бонусы. Вы можете совершить покупку через корзину без регистрации или заказав обратный звонок менеджера. Инструкция по применению Прием препарата Липокарнит рекомендуется в течение 30 дней. Пить по 1 или 2 капсулы в день на завтрак и ужин. При необходимости курс повторяют через 2 месяца после окончания предыдущего.

Создание хранителя экрана (ScreenSaver)

Поэтому сам хранитель должен быть как можно меньшего объема. Для уменьшения объема файла в описанной ниже программе не используется визуальные компоненты Delphi, включение хотя бы одного из них приведет к увеличению размера файла свыше 200кб, а так, описанная ниже программа, имеет размер всего 20Кб! Технически, хранитель экрана является нормальным EXE файлом (с расширением .SCR), который управляется через командные параметры строки. Например, если пользователь хочет изменить параметры вашего хранителя, Windows выполняет его с параметром "-c" в командной строке. Поэтому начать создание вашего хранителя экрана следует с создания примерно следующей функции:

procedure RunScreenSaver;
var S : String;
begin
  S := ParamStr(1);
  if (Length(S) > 1) then begin
    Delete(S,1,1); { delete first char - usally "/" or "-" }
    S[1] := UpCase(S[1]);
  end;
  LoadSettings; { load settings from registry }
  if (S = 'C') then RunSettings
  else If (S = 'P') then RunPreview
  else If (S = 'A') then RunSetPassword
  else RunFullScreen;
end;
Поскольку нам нужно создавать небольшое окно предварительного просмотра и полноэкранное окно, их лучше объединить используя единственный класс окна. Следуя правилам хорошего тона, нам также нужно использовать многочисленные нити. Дело в том, что, во-первых, хранитель не должен переставать работать даже если что-то "тяжелое" случилось, и во-вторых, нам не нужно использовать таймер.

Процедура для запуска хранителя на полном экране приблизительно такова:
procedure RunFullScreen;
var
  R : TRect;
  Msg : TMsg;
  Dummy : Integer;
  Foreground : hWnd;
begin
  IsPreview := False; MoveCounter := 3; 
  Foreground := GetForegroundWindow;
  while (ShowCursor(False) > 0) do ;
  GetWindowRect(GetDesktopWindow,R);
  CreateScreenSaverWindow(R.Right-R.Left,R.Bottom-R.Top,0);
  CreateThread(nil,0,@PreviewThreadProc,nil,0,Dummy);
  SystemParametersInfo(spi_ScreenSaverRunning,1,@Dummy,0);
  while GetMessage(Msg,0,0,0) do
    begin
    TranslateMessage(Msg);
    DispatchMessage(Msg);
  end;
  SystemParametersInfo(spi_ScreenSaverRunning,0,@Dummy,0);
  ShowCursor(True);
  SetForegroundWindow(Foreground);
end;
Во-первых, мы проинициализировали некоторые глобальные переменные (описанные далее), затем прячем курсор мыши и создаем окно хранителя экрана. Имейте в виду, что важно уведомлять Windows, что это - хранителя экрана через SystemParametersInfo (это выводит из строя Ctrl-Alt-Del чтобы нельзя было вернуться в Windows не введя пароль). Создание окна хранителя:
function CreateScreenSaverWindow(Width,Height : Integer; ParentWindow : hWnd) : hWnd;
var WC : TWndClass;
begin
  with WC do
    begin
    Style := cs_ParentDC;
    lpfnWndProc := @PreviewWndProc;
    cbClsExtra := 0; cbWndExtra := 0; hIcon := 0; hCursor := 0;
    hbrBackground := 0; lpszMenuName := nil; 
    lpszClassName := 'MyDelphiScreenSaverClass';
    hInstance := System.hInstance;
  end;
  RegisterClass(WC);
  if (ParentWindow 0) then
    Result := CreateWindow('MyDelphiScreenSaverClass','MySaver'ws_Child Or ws_Visible or
ws_Disabled,0,0,Width,Height,ParentWindow,0,hInstance,nil)
  else
    begin
    Result := CreateWindow('MyDelphiScreenSaverClass','MySaver',ws_Visible or ws_Popup,0,0,Width,Height,
0,0,hInstance,nil);SetWindowPos(Result,hwnd_TopMost,0,0,0,0,swp_NoMove or swp_NoSize or swp_NoRedraw);
  end;
  PreviewWindow := Result;
end;
Теперь окна созданы используя вызовы API. Я удалил проверку ошибки, но обычно все проходит хорошо, особенно в этом типе приложения.

Теперь Вы можете погадать, как мы получим handle родительского окна предварительного просмотра? В действительности, это совсем просто: Windows просто передает handle в командной строке, когда это нужно. Таким образом:
procedure RunPreview;
var
  R : TRect;
  PreviewWindow : hWnd;
  Msg : TMsg;
  Dummy : Integer;
begin
  IsPreview := True;
  PreviewWindow := StrToInt(ParamStr(2));
  GetWindowRect(PreviewWindow,R);
  CreateScreenSaverWindow(R.Right-R.Left,R.Bottom-R.Top,PreviewWindow);
  CreateThread(nil,0,@PreviewThreadProc,nil,0,Dummy);
  while GetMessage(Msg,0,0,0) do
    begin
    TranslateMessage(Msg);
        DispatchMessage(Msg);
  end;
end;
Как Вы видите, window handle является вторым параметром (после "-p").

Чтобы "выполнять" хранителя экрана - нам нужна нить. Это создается с вышеуказанным CreateThread. Процедура нити выглядит примерно так:
function PreviewThreadProc(Data : Integer) : Integer; StdCall;
var R : TRect;
begin
  Result := 0; Randomize;
  GetWindowRect(PreviewWindow,R);
  MaxX := R.Right-R.Left; MaxY := R.Bottom-R.Top;
  ShowWindow(PreviewWindow,sw_Show); UpdateWindow(PreviewWindow);
  repeat
    InvalidateRect(PreviewWindow,nil,False);
    Sleep(30);
  until QuitSaver;
  PostMessage(PreviewWindow,wm_Destroy,0,0);
end;
Нить просто заставляет обновляться изображения в нашем окне, спит на некоторое время, и обновляет изображения снова. А Windows будет посылать сообщение WM_PAINT на наше окно (не в нить!). Для того, чтобы оперировать этим сообщением, нам нужна процедура:
function PreviewWndProc(Window : hWnd; Msg,WParam,LParam : Integer): Integer; StdCall;
begin
  Result := 0;
  case Msg of
    wm_NCCreate : Result := 1;
    wm_Destroy : PostQuitMessage(0);
    wm_Paint : DrawSingleBox; { paint something }
    wm_KeyDown : QuitSaver := AskPassword;
    wm_LButtonDown, wm_MButtonDown, wm_RButtonDown, wm_MouseMove : 
    begin
      if (Not IsPreview) then
            begin
        Dec(MoveCounter);
        if (MoveCounter <= 0) then QuitSaver := AskPassword;
      end;
    end;
  else
      Result := DefWindowProc(Window,Msg,WParam,LParam);
  end;
end;
Если мышь перемещается, кнопка нажата, мы спрашиваем у пользователя пароль:
function AskPassword : Boolean;
var
  Key : hKey;
  D1,D2 : Integer; { two dummies }
  Value : Integer;
  Lib : THandle;
  F : TVSSPFunc;
begin
  Result := True;
  if (RegOpenKeyEx(hKey_Current_User,'Control Panel\Desktop',0,Key_Read,Key) = Error_Success) then
  begin
    D2 := SizeOf(Value);
    if (RegQueryValueEx(Key,'ScreenSaveUsePassword',nil,@D1,@Value,@D2) = Error_Success) then
    begin
      if (Value 0) then
            begin
        Lib := LoadLibrary('PASSWORD.CPL');
        if (Lib > 32) then
                begin
          @F := GetProcAddress(Lib,'VerifyScreenSavePwd');
          ShowCursor(True);
          if (@F nil) then Result := F(PreviewWindow);
          ShowCursor(False);
          MoveCounter := 3; { reset again if password was wrong }
          FreeLibrary(Lib);
        end;
      end;
    end;
  RegCloseKey(Key);
  end;
End;
Это также демонстрирует использование Registry на уровне API. Также имейте в виду как мы динамически загружаем функции пароля, используюя LoadLibrary. Запомните тип функции? TVSSFunc ОПРЕДЕЛЕН как:
type
  TVSSPFunc = Function(Parent : hWnd) : Bool; StdCall;
  
Теперь почти все готово, кроме диалога конфигурации. Это запросто:
procedure RunSettings;
var Result : Integer;
begin
  Result := DialogBox(hInstance,'SaverSettingsDlg',0,@SettingsDlgProc);
  if (Result = idOK) then SaveSettings;
end;
Трудная часть -это создать диалоговый сценарий (запомните: мы не используем здесь Delphi-формы!). Я сделал это, используя 16-битовую Resource Workshop (остался еще от Turbo Pascal для Windows). Я сохранил файл как сценарий (текст), и скомпилированный это с BRCC32:
SaverSettingsDlg DIALOG 70, 130, 166, 75
STYLE WS_POPUP | WS_DLGFRAME | WS_SYSMENU
CAPTION "Settings for Boxes"
FONT 8, "MS Sans Serif"
BEGIN
DEFPUSHBUTTON "OK", 5, 115, 6, 46, 16
PUSHBUTTON "Cancel", 6, 115, 28, 46, 16
CTEXT "Box &Color:", 3, 2, 30, 39, 9
COMBOBOX 4, 4, 40, 104, 50, CBS_DROPDOWNLIST | CBS_HASSTRINGS
CTEXT "Box &Type:", 1, 4, 3, 36, 9
COMBOBOX 2, 5, 12, 103, 50, CBS_DROPDOWNLIST | CBS_HASSTRINGS
LTEXT "Boxes Screen Saver for Win32 Copyright (c) 1996 Jani
Jдrvinen.", 7, 4, 57, 103, 16,
WS_CHILD | WS_VISIBLE | WS_GROUP
END
Почти также легко сделать диалоговое меню:
function SettingsDlgProc(Window : hWnd; Msg,WParam,LParam : Integer): Integer; stdcall;
var S : String;
begin
  Result := 0;
  case Msg of
    wm_InitDialog :
        begin
      { initialize the dialog box }
      Result := 0;
    end;
    wm_Command :
        begin
      if (LoWord(WParam) = 5) then EndDialog(Window,idOK)
      else if (LoWord(WParam) = 6) then EndDialog(Window,idCancel);
    end;
    wm_Close : DestroyWindow(Window);
    wm_Destroy : PostQuitMessage(0);
  else
      Result := 0;
  end;
end;
После того, как пользователь выбрал некоторые установочные параметры, нам нужно сохранить их.
procedure SaveSettings;
var
  Key : hKey;
  Dummy : Integer;
begin
  if (RegCreateKeyEx(hKey_Current_User,'Software\SilverStream\SSBoxes',0,nil,
Reg_Option_Non_Volatile,Key_All_Access,nil,Key,@Dummy) = Error_Success) then
    begin
    RegSetValueEx(Key,'RoundedRectangles',0,Reg_Binary,@RoundedRectangles,SizeOf(Boolean));
    RegSetValueEx(Key,'SolidColors',0,Reg_Binary, @SolidColors,SizeOf(Boolean));
    RegCloseKey(Key);
  end;
end;
Загружаем параметры так:
procedure LoadSettings;
var
  Key : hKey;
  D1,D2 : Integer; { two dummies }
  Value : Boolean;
begin
  if (RegOpenKeyEx(hKey_Current_User,'Software\SilverStream\SSBoxes',0,Key_Read,Key) = Error_Success) then
    begin
    D2 := SizeOf(Value);
    if (RegQueryValueEx(Key,'RoundedRectangles',nil,@D1,@Value, @D2) = Error_Success) then
      RoundedRectangles := Value;
    if (RegQueryValueEx(Key,'SolidColors',nil,@D1,@Value,@D2) = Error_Success) then
      SolidColors := Value;
    RegCloseKey(Key);
  end;
end;
Легко? Нам также нужно позволить пользователю, установить пароль. Я честно не знаю почему это оставлено разработчику приложений! Тем не менее:
procedure RunSetPassword;
var
  Lib : THandle;
  F : TPCPAFunc;
begin
  Lib := LoadLibrary('MPR.DLL');
  if (Lib > 32) then
    begin
    @F := GetProcAddress(Lib,'PwdChangePasswordA');
    if (@F nil) then F('SCRSAVE',StrToInt(ParamStr(2)),0,0);
    FreeLibrary(Lib);
  end;
end;
Мы динамически загружаем (недокументированную) библиотеку MPR.DLL, которая имеет функцию, чтобы установить пароль хранителя экрана, так что нам не нужно беспокоиться об этом. TPCPAFund определён как:
type
  TPCPAFunc = Function(A : PChar; Parent : hWnd; B,C : Integer) : Integer; StdCall;
  
Не спрашивайте меня что за параметры B и C ! :-)

Теперь единственная вещь, которую нам нужно рассмотреть - самая странная часть: создание графики. Я не великий гуру графики, так что вы не увидите затеняющие многоугольники, вращающиеся в реальном времени. Я только сделал некоторые ящики.
procedure DrawSingleBox;
var
  PaintDC : hDC;
  Info : TPaintStruct;
  OldBrush : hBrush;
  X,Y : Integer;
  Color : LongInt;
begin
  PaintDC := BeginPaint(PreviewWindow,Info);
  X := Random(MaxX); Y := Random(MaxY);
  if SolidColors then
    Color := GetNearestColor(PaintDC,RGB(Random(255),Random(255),Random(255)))
  else
      Color := RGB(Random(255),Random(255),Random(255));
  OldBrush := SelectObject(PaintDC,CreateSolidBrush(Color));
  if RoundedRectangles then
    RoundRect(PaintDC,X,Y,X+Random(MaxX-X),Y+Random(MaxY-Y),20,20)
  else
      Rectangle(PaintDC,X,Y,X+Random(MaxX-X),Y+Random(MaxY-Y));
  DeleteObject(SelectObject(PaintDC,OldBrush));
  EndPaint(PreviewWindow,Info);
end;
И последнее — глобальные переменные:
var
  IsPreview : Boolean;
  MoveCounter : Integer;
  QuitSaver : Boolean;
  PreviewWindow : hWnd;
  MaxX,MaxY : Integer;
  RoundedRectangles : Boolean;
  SolidColors : Boolean;
  
Затем исходная программа проекта (.dpr). Красива, а!?
program MySaverIsGreat;
 
uses Windows, messages, Utility; { defines all routines }
 
{$R SETTINGS.RES}
 
begin
  RunScreenSaver; 
end.
Ох, чуть не забыл! Если, Вы используете SysUtils в вашем проекте (например фуекцию StrToInt) вы получите EXE-файл больше чем обещанный в 20K :-) Если Вы хотите все же иметь 20K, надо как-то обойтись без SysUtils, например самому написать собственную StrToInt процедуру.

Если все же очень трудно обойтись без использования Delphi-форм, то можно поступить как в случае с вводом пароля: форму изменения параметров хранителя сохранить в виде DLL и динамически ее загружать при необходимости. Т.о. будет маленький и шустрый файл самого хранителя экрана и довеска DLL для конфигурирования и прочего (там объем и скорость уже не критичны).

Вот и всё, Удачи!

Источник: www.thedelphi.ru
Автор: Савельев Александр
Опубликовано: 21 Сентября 2014
Просмотров:


Зарегистрируйтесь или авторизуйтесь, чтобы добавлять комментарии.