Виртуальная библиотека Delphi - [6]
>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 Begin
> RoundedRectangles := Value;
> End;
> If (RegQueryValueEx(Key,'SolidColors',nil,@D1, @Value,@D2) = Error_Success) Then Begin
> SolidColors := Value;
> End;
> 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 программу.
Конец.
Use Val... ;-)
перевод: Владимиров А.М.
От переводчика. Если все же очень трудно обойтись без использования Delphi-форм, то можно поступить как в случае с вводом пароля: форму изменения параметров хранителя сохранить в виде DLL и динамически ее загружать при необходимости. Т.о. будет маленький и шустрый файл самого хранителя экрана и довеска DLL для конфигурирования и прочего (там объем и скорость уже не критичны).
Иногда может возникнуть необходимость в выключении на время устройств ввода — клавиатуры и мыши. Например, это неплохо сделать на время выполнения кода системы защиты от копирования, в играх, или в качестве "наказания" при запуске программы по истечению срока ее бесплатного использования… Однако наилучшее ее применение — отключение клавиатуры и мыши на время работы демонстрационки, основанной на воспроизведении записанных заранее перемещений мышки и клавиатурного ввода (см. об этом отдельный раздел этой книги). Это элементарно сделать при помощи API:
>EnableHadwareInput(Enable:boolean): boolean;
Enable — требуемое состояние устройств ввода (True — включены, false — выключены). Если ввод заблокирован, то его можно разблокировать вручную — нажать Ctrl+Alt+Del, при появлении меню "Завершение работы программы" ввод разблокируется.
В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.
В книге собраны предания и поверья о призраках ночи — колдунах и ведьмах, оборотнях и вампирах, один вид которых вызывал неподдельный страх, леденивший даже мужественное сердце.
В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.
В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.
…«Песнь о Нибелунгах» принадлежит к числу наиболее известных эпических произведений человечества. Она находится в кругу таких творений, как поэмы Гомера и «Песнь о Роланде», «Слово о полку Игореве» и «Божественная комедия» Данте — если оставаться в пределе европейских литератур…В. Г. Адмони.
В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.
В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.
Сейчас во многих школах, институтах и других учебных заведениях можно встретить компьютеры старого парка, уже отслужившие свое как морально, так и физически. На таких компьютерах можно изучать разве что Dos, что далеко от реалий сегодняшнего дня. К тому же у большинства, как правило, жесткий диск уже в нерабочем состоянии. Но и выбросить жалко, а новых никто не дает. Различные спонсоры, меценаты, бывает, подарят компьютер (один) и радуются, как дети. Спасибо, конечно, большое, но проблемы, как вы понимаете, этот компьютер в общем не решает, даже наоборот, усугубляет, работать на старых уже как-то не хочется, теперь просто есть с чем сравнивать.
В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.
В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.
В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.
Python - объектно-ориентированный язык сверхвысокого уровня. Python, в отличии от Java, не требует исключительно объектной ориентированности, но классы в Python так просто изучить и так удобно использовать, что даже новые и неискушенные пользователи быстро переходят на ОО-подход.