У компа есть две функции: в него можно играть, также в него можно не играть!
Что ж, продолжаем! На этом уроке вы узнаете много нового - как анимировать изображение, как пользоваться DXInput, сколько способов проверять столкновения и где какие лучше употреблять, как поворачивать картинки на разные углы… Перейдем от слов к делу. Первая тема - как анимировать изображения. Возьмем пример из 3-го урока и анимируем саму летающую тарелку. Раньше спрайт был такой -
Мы сделаем его таким:
Откройте Paint - все анимированные спрайты мы будем собирать именно в нем. Кроме этого, возьмем какой-нибудь редактор посерьезнее, умеющий работать с анимированными gif’ами. Я возьму уже известный вам с прошлых уроков Macromedia Fireworks. После чего делаем так - открываем первый кадр, копируем изображение в буфер, вставляем в новй рисунок в Painte’е. Кстати, размеры рисунка вычисляются так - высота не изменяется, а ширина - ширина анимрованного рисунка х количество кадров. В данном случае формат рисунка - 60х25, в файле 3 кадра. Размер рисунка в Paint’e будет 180х25. Как вы наверное догадались, мы будем создавать этакую киноленту. Спрайт анимированной тарелки в развертке для Delphi будет таким:
Read more »
Filed in Графика by admin | Декабрь 27, 2007 | 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