1.В файл проекта {*.DPR} добавить строку {$D SCRNSAVE <название хранителя>} после строки подключения модулей (Uses…).
2.У окна формы убрать системное меню, кнопки и придать свойству WindowState значение wsMaximize.
3.Предусмотреть выход из хранителя при нажатии на клавиши клавиатуры, мыши и при перемещении курсора мыши.
4.Проверить параметры с которым был вызван хранитель и если это /c - показать окно настройки хранителя, а иначе (можно проверять на /s, а можно и не проверять) сам хранитель. /p - для отображения в окне установок хранителя экрана.
5.Скомпилировать хранитель экрана.
Read more »
Filed in Графика by admin | Февраль 27, 2008 | No Comments
function ScreenSaverEnabled: Boolean;
var
status: Bool;
begin
SystemParametersInfo(SPI_GETSCREENSAVEACTIVE, 0, @status, 0);
Result := status = True;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
if ScreenSaverEnabled then
Caption := ‘Screensaver is enabled.’
else
Caption := ‘Screensaver is disabled.’
end;
Filed in Графика by admin | Февраль 27, 2008 | No Comments
В зоопаpке pебенок, возбужденно тыча пальцем
на клетку с пpиматами (обезьянами :), кpичит:
- Мама ! Мама ! Смотpи - пpогpаммисты !
- Почему ты так pешил ?
- Они как папа ! - не мытые, лохматые и мозоль на попе !!!
SendMessage(Application.Handle, WM_SYSCOMMAND, SC_SCREENSAVE, 0);
Filed in Графика by admin | Февраль 27, 2008 | No Comments
Новая игра. Казахский DOOM!
Никаких тебе лабиринтов! Голая степь!
Многие из вас знакомы с этим термином. Так характеризуют программы, которые выводят на экран спрайтового персонажа, не создавая при этом окна. Я очень давно искал данный пример в сети, и теперь решил вас порадовать. Программа состоит из нескольких узлов, кои будут приведены ниже…
p.s К сожалению вам надо позаботиться о кадрах анимации этого персонажа самим т.к рисунки я послать немогу…
Read more »
Filed in Графика by admin | Февраль 27, 2008 | No Comments
uses
shellapi;
procedure InstallScreenSaver(const FileName: string);
begin
{ Set this screensaver as default screensaver and open the properties dialog}
ShellExecute(Application.Handle, ‘open’, PChar(’rundll32.exe’),
PChar(’desk.cpl,InstallScreenSaver ‘ + FileName), nil, SW_SHOWNORMAL);
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
InstallScreenSaver(’c:\YourScreenSaverFile.scr’);
end;
Filed in Графика by admin | Февраль 27, 2008 | No Comments
function GetScreenSaverTimeout: Integer;
begin
SystemParametersInfo(SPI_GETSCREENSAVETIMEOUT, 0, @Result, 0);
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
ShowMessage(IntToStr(GetScreenSaverTimeout) + ‘ Sec.’);
end;
Filed in Графика by admin | Февраль 27, 2008 | No Comments
Встречаются два юзера. Один другому:
- Что-то лицо мне ваше знакомо, вы в скринсейверах не снимались?
procedure TForm1.Button1Click(Sender: TObject);
begin
{Turn it off}
SystemParametersInfo(SPI_SETSCREENSAVEACTIVE, 0, nil, 0);
{Turn it on}
SystemParametersInfo(SPI_SETSCREENSAVEACTIVE, 1, nil, 0);
end;
Filed in Графика by admin | Февраль 27, 2008 | No Comments
Пpогpаммеpы квасят на пpиpоде. Идут pазговоpы, тpали-вали… Один pассказывает: - Познакомился тут с девушкой на дискотеке! Бесподобная деваха! И фигуpка, и мозги есть, и танцует хоpошо! Так вот, pешил pickup”нуть ее к себе домой. Пpигласил, она согласилась. Пpишли, выпили винца, поговоpили о том, о сем, музыку послушали. Потом я ее поцеловал, пpиподнял аккуpатно, посадил задницей на клавиатуpу, поднял юбку… Остальные: - Так у тебя компутеp дома стоит?!?! А какой???
В примере описывается создание простейшего скринсейвера, а так же его установка и запуск.
Для написания скринсейвера нам необходимо включить следующие процедуры:
FormShow
скрыть курсор, установка обработки сообщений, начало отображения скринсейвера
FormHide
окончание отображения скринсейвера, отображение курсора
DeactivateScrSaver
обработка сообщений, деактивирование, если нажата мышка или клавиатура
Read more »
Filed in Графика by admin | Февраль 27, 2008 | No Comments
Хранитель экрана (ScreenSaver) в Windows – это программа, размещенная в каталоге Windows или Windows\System. Расширение эта программа должна иметь scr. При запуске ScreenSaver должен реагировать на параметры. Если первый параметр – “/p”, нужно создать окно предварительного просмотра. Если первый параметр – “/s”, нужно запустить сам ScreenSaver. В ином случае нужно показать окно настроек хранителя экрана.
Для предварительного просмотра Windows создает окно, на месте которого ScreenSaver должен что-то рисовать. Чтобы отслеживать сообщения о перерисовке окна Preview, а также о его перемещении и закрытии, нужно создать дочернее окно в том же месте и такого же размера. Для этого нужно использовать WinAPI. Цикл, в котором обрабатываются сообщения, удобно сделать через PeekMessage, поскольку в этом случае можно создать событие OnIdle. В нем нужно рисовать что-то в окне предварительного просмотра.
Read more »
Filed in Графика by admin | Декабрь 27, 2007 | No Comments
uses
Inifiles, ShellApi;
procedure TForm1.Button1Click(Sender: TObject);
var
Ini: TInifile;
ScreenSaverFile: string;
function GetLongFileName(const FileName: string): string;
var
aInfo: TSHFileInfo;
begin
if SHGetFileInfo(PChar(FileName), 0, aInfo, SizeOf(aInfo), SHGFI_DISPLAYNAME) <> 0 then
Result := string(aInfo.szDisplayName)
else
Result := FileName;
end;
begin
Ini := TInifile.Create(’system.ini’);
ScreenSaverFile := GetLongFileName(Ini.Readstring(’boot’, ‘SCRNSAVE.EXE’, ‘Not Available’));
Ini.Free;
label1.Caption := ScreenSaverFile;
end;
Filed in Графика by admin | Декабрь 27, 2007 | No Comments
interface
private
procedure AppMessage(var Msg: TMsg; var handled: Boolean);
end;
implementation
procedure TForm1.AppMessage(var Msg: TMsg; var handled: Boolean);
begin
if (Msg.Message = WM_SYSCOMMAND) and (Msg.wParam = SC_SCREENSAVE) then
Handled := True;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
Application.OnMessage := AppMessage;
end;
{
Note: The Screensaver is only disabled during the lifespan of
your application.
Bemerkung: Der Screensaver bleibt nur solange deaktiviert,
wie ihre Applikation lдuft. $
}
Filed in Графика by admin | Декабрь 27, 2007 | No Comments
О, Гюльчатай, сними же свой скринсейвер!
Сначала мы проверяем, установлен ли Screen Saver, если нет - возвращаемся с отрицательным ответом, в противном случае - запускаем его и возвращаем true.
function RunScreenSaver: bool;
var
b: boolean;
begin
result := false;
if SystemParametersInfo(SPI_GETSCREENSAVEACTIVE, 0, @b, 0) <> true then
exit;
if not b then
exit;
PostMessage(GetDesktopWindow, WM_SYSCOMMAND, SC_SCREENSAVE, 0);
result := true;
end;
Filed in Графика by admin | Декабрь 27, 2007 | No Comments
Время от времени я наблюдаю вопросы с просьбой рассказать о процессе создания с помощью Delphi хранителя экрана, которого можно было бы выбрать с помощью панели управления (Control Panel / Desktop). После того, как я увидел несколько общих ответов, частично отвечавших на заданный вопрос, я решил создать данный совет и полностью посвятить вас в технологию создания хранителя экрана Windows от начала до конца. Приведенный ниже код позволяет создать предмет нашего разговора, а именно - простой хранитель экрана Windows.
Read more »
Filed in Графика by admin | Декабрь 27, 2007 | No Comments