Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 09.04.2011, 15:08   #1
Dojikito
Новичок
Джуниор
 
Регистрация: 25.03.2011
Сообщений: 2
По умолчанию Написание скринсейвера

Приветствую. Требуется помощь в доведении программы до приличного состояние. Изначальное задание было написать скринсэйвер с простой анимацией. Проблема заключается в том, что я не могу сделать так что бы программа работала на весь экран и была адаптивна к разным расширениям экрана.

прилагаю текст на котором я пока остановился:

//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "Unit3.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm3 *Form3;
//---------------------------------------------------------------------------
__fastcall TForm3::TForm3(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
int x=-68,y=500; // Начальное положение базовой точки

// Рисуем на поверхности формы кораблик
void __fastcall TForm3::Ship(int x,int y)
{
int dx=4,dy=4; // Шаг сетки
// Корпус и надстройку будем рисовать
// при помощи метода Polygon
TPoint p1[7]; // Координаты точек корпуса
TPoint p2[8]; // Координаты точек надстройки

TColor pc,bc; //Текущий цвет карандаша и кисти

// Сохраним текущий цвет карандаша и кисти
pc=Canvas->Pen->Color;
bc=Canvas->Brush->Color;

// Установим нужный цвет карандаша и кисти
Canvas->Pen->Color=clBlack;
Canvas->Brush->Color=clWhite;

// Корпус
p1[0].x=x; p1[0].y=y;
p1[1].x=x; p1[1].y=y-2*dy;
p1[2].x=x+10*dx; p1[2].y=y-2*dy;
p1[3].x=x+11*dx; p1[3].y=y-3*dy;
p1[4].x=x+17*dx; p1[4].y=y-3*dy;
p1[5].x=x+14*dx; p1[5].y=y;
p1[6].x=x; p1[6].y=y;
Canvas->Polygon(p1,6);

// Надстройка
p2[0].x=x+3*dx; p2[0].y=y-2*dy;
p2[1].x=x+4*dx; p2[1].y=y-3*dy;
p2[2].x=x+4*dx; p2[2].y=y-4*dy;
p2[3].x=x+13*dx; p2[3].y=y-4*dy;
p2[4].x=x+13*dx; p2[4].y=y-3*dy;
p2[5].x=x+11*dx; p2[5].y=y-3*dy;
p2[6].x=x+10*dx; p2[6].y=y-2*dy;
p2[7].x=x+3*dx; p2[7].y=y-2*dy;
Canvas->Polygon(p2,7);

Canvas->MoveTo(x+5*dx,y-3*dy);
Canvas->LineTo(x+9*dx,y-3*dy);

// Капитанский мостик
Canvas->Rectangle(x+8*dx,y-4*dy,x+11*dx,y-5*dy);

// Трубы
Canvas->Rectangle(x+7*dx,y-4*dy,x+8*dx,y-7*dy);

// Иллюминаторы
Canvas->Ellipse(x+11*dx,y-2*dy,x+12*dx,y-1*dy);
Canvas->Ellipse(x+13*dx,y-2*dy,x+14*dx,y-1*dy);

// Мачта
Canvas->MoveTo(x+10*dx,y-5*dy);
Canvas->LineTo(x+10*dx,y-10*dy);

// Оснастка
Canvas->Pen->Color=clWhite;
Canvas->MoveTo(x+17*dx,y-3*dy);
Canvas->LineTo(x+10*dx,y-10*dy);
Canvas->LineTo(x,y-2*dy);

// Восстанавливаем цвет карандаша и кисти
Canvas->Pen->Color=pc;
Canvas->Brush->Color=bc;
}

// Обработка события OnTimer
void __fastcall TForm3::Timer1Timer(TObject *Sender)
{
// Стереть кораблик - закрасить цветом, совпадающим
// с цветом фона (формы)
Canvas->Brush->Color=Form3->Color;
Canvas->FillRect(Rect(x-1,y+1,x+68,y-40));

// Вычислить координаты базовой точки
x+=1;
if(x>ClientWidth)
{
// Кораблик "уплыл" за правую границу формы
x=-70; // Чтобы кораблик "выплывал" из-за левой
// границы формы
y=random(Form3->ClientHeight);
}
// Нарисовать кораблик на новом месте
Ship(x,y);
}

Безусловно, написано неграмотно. Программа войдет в курсовой проект. Буду очень признателен за помощь.
Dojikito вне форума Ответить с цитированием
Старый 11.04.2011, 10:36   #2
Dojikito
Новичок
Джуниор
 
Регистрация: 25.03.2011
Сообщений: 2
По умолчанию

Дописал :
// Обработка события OnCreate для формы
void __fastcall TForm3::OnCreate(TObject *Sender)
{
Form3->Width = Screen->Width;
Form3->Height = Screen->Height;
}

// Обработка события OnKeyDown для формы
void __fastcall TForm3::OnKeyDown(TObject *Sender)
{
Close();
}

// Обработка события OnMouseDown для формы
void __fastcall TForm3::OnMouseDown(TObject *Sender)
{
Close();
}

// Обработка события OnMouseMove для формы
void __fastcall TForm3::OnMouseMove(TObject *Sender)
{
Close();
}

Однако программа ни при нажатии клавиш ни при движении мышки не закрывается ((( что не так?
Dojikito вне форума Ответить с цитированием
Старый 11.04.2011, 14:57   #3
tsar_
Форумчанин
 
Аватар для tsar_
 
Регистрация: 06.01.2011
Сообщений: 369
По умолчанию

Порылся в своих архивах, нашел видеоурок, посвященный созданию заставки. Доведен до ума. Ссылка на файлы (около 100МБ):

http://www.4shared.com/dir/-XKxMlM4/screendesktop.html


файлы bmw*.jpg- картинки, которые использовались в засатвке;
project1.scr- собственно заставка;
screendesktop.wmv- видеокрок;
txt-файлик- инструкция по установке заставки.
Программирую по необходимости

Последний раз редактировалось tsar_; 11.04.2011 в 15:03.
tsar_ вне форума Ответить с цитированием
Старый 11.04.2011, 16:37   #4
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,434
По умолчанию

Цитата:
Сообщение от Dojikito Посмотреть сообщение
Однако программа ни при нажатии клавиш ни при движении мышки не закрывается ((( что не так?

Оформите код при момощи:


Далее кладите на форму таймер и в нём проверяйте нажатие клавишь при помощи:
Код:
//Смотрим Delphi help - Virtual Key Codes 
If GetAsyncKeyState({виртуальный код кнопки}) <> 0 then
главное у таймера интервал по меньше!
Человек_Борща вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Создание новогоднего скринсейвера (веб камера) Ghost_V Помощь студентам 3 15.12.2009 23:33
Как задать время до появления скринсейвера Vask Win Api 4 17.01.2009 21:30
Написание сервисов Domovoy Свободное общение 4 17.07.2008 12:26
Скринсейвера на С++ zender Общие вопросы C/C++ 1 10.01.2008 11:37