MaterStudiorum.ru - домашняя страничка студента.
Минимум рекламы - максимум информации.


Авиация и космонавтика
Административное право
Арбитражный процесс
Архитектура
Астрология
Астрономия
Банковское дело
Безопасность жизнедеятельности
Биографии
Биология
Биология и химия
Биржевое дело
Ботаника и сельское хоз-во
Бухгалтерский учет и аудит
Валютные отношения
Ветеринария
Военная кафедра
География
Геодезия
Геология
Геополитика
Государство и право
Гражданское право и процесс
Делопроизводство
Деньги и кредит
Естествознание
Журналистика
Зоология
Издательское дело и полиграфия
Инвестиции
Иностранный язык
Информатика
Информатика, программирование
Исторические личности
История
История техники
Кибернетика
Коммуникации и связь
Компьютерные науки
Косметология
Краткое содержание произведений
Криминалистика
Криминология
Криптология
Кулинария
Культура и искусство
Культурология
Литература и русский язык
Литература(зарубежная)
Логика
Логистика
Маркетинг
Математика
Медицина, здоровье
Медицинские науки
Международное публичное право
Международное частное право
Международные отношения
Менеджмент
Металлургия
Москвоведение
Музыка
Муниципальное право
Налоги, налогообложение
Наука и техника
Начертательная геометрия
Новейшая история, политология
Оккультизм и уфология
Остальные рефераты
Педагогика
Полиграфия
Политология
Право
Право, юриспруденция
Предпринимательство
Промышленность, производство
Психология
Психология, педагогика
Радиоэлектроника
Разное
Реклама
Религия и мифология
Риторика
Сексология
Социология
Статистика
Страхование
Строительные науки
Строительство
Схемотехника
Таможенная система
Теория государства и права
Теория организации
Теплотехника
Технология
Товароведение
Транспорт
Трудовое право
Туризм
Уголовное право и процесс
Управление
Управленческие науки
Физика
Физкультура и спорт
Философия
Финансовые науки
Финансы
Фотография
Химия
Хозяйственное право
Цифровые устройства
Экологическое право
Экология
Экономика
Экономико-математическое моделирование
Экономическая география
Экономическая теория
Эргономика
Этика
Юриспруденция
Языковедение
Языкознание, филология
    Начало -> Информатика, программирование -> Создание хранителя экрана

Название:Создание хранителя экрана
Просмотров:54
Раздел:Информатика, программирование
Ссылка:none(0 KB)
Описание:Главное о чем стоит упомянуть это, что ваш хранитель экрана будет работать в фоновом режиме, и он не должен мешать работе других запущенных программ. Поэтому сам хранитель должен быть как можно меньшего объема.

Университетская электронная библиотека.
www.infoliolib.info

Часть полного текста документа:

Создание хранителя экрана
    Главное о чем стоит упомянуть это, что ваш хранитель экрана будет работать в фоновом режиме, и он не должен мешать работе других запущенных программ. Поэтому сам хранитель должен быть как можно меньшего объема. Для уменьшения объема файла в описанной ниже программе не используется визуальные компоненты 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); //что бы не повесить windows
    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. ............



 
     

Вечно с вами © MaterStudiorum.ru