Программа - розыгрыш (имитация форматирования жесткого диска)
Создание программы-прикола.
Наверняка вам когда-нибудь хотелось разыграть своего знакомого/соседа/приятеля. Так как на дворе 21 первый век, то розыгрыш мы сделаем на компьютере. Подобные программы можно найти в сети, но сделать самому всегда приятнее. Итак, начнем!
Запускаем C++ Builder. Я буду делать это в шестой версии, все это применимо и к другим. Начнем с размещения компонентов на форме. Вот как я их расположил:
Обратите внимание - RadioGroup размещена по ошибке. Вместо неё нужно использовать GroupBox. Но в данном случае это не существенно. Так что можно оставить RadioGroup.
Какие именно, понятно из картинки. Самый нижний - это компонент CGauge с вкладки Samples. Теперь я сделаю подписи. Вот так:
Кроме того я изменил размеры компонентов. Это вы сделаете самостоятельно, на свой вкус. Как вы заметили, у Label5 я стер значение Caption, и поменял цвет(чтобы не слился с фоном). Для чего это - поймете в дальнейшем. Привожу таблицу заполнения свойств компонентов.
Label AutoSize Caption Visible 1 false Выберите жесткий диск true 2 false Файловая система true 3 false Размер кластера true 4 false Метка тома true 5 false true
Button Caption Enabled 1 Форматировать false 2 Выход true
ComboBox Text Items Style 1 csOwnerDrawFixed 2 NTFS (По умолчанию) NTFS (По умолчанию) по умолчанию FAT 32 3 4096 байт Стандартный размер кластера по умолчанию 512 байт 1024 байт 2048 байт 4096 байт 8192 байт 16 КБ 32 КБ 64 КБ
Form Color BorderStyle BorderIcons Position 1 clWhite bsSingle Все false кроме biSystemMenu poDesktopCenter
Добавляем на форму два Timer и компонент ImageList.
Из свойства Enabled устанавливаем в false. Свойство Interval для первого ставим 400, для второго 1.
Теперь пишем код. В событие OnMouseMove кнопки Button2 два пишем:
if(Button2->Top == 80)// 80-первоначальное положение кнопки Button2->Top = 300;// поэксперементируете с эти значением else Button2->Top = 80;
Теперь кнопка "Выход" будет от нас "убегать".
Дважды щелкаем по компоненту ImageList1 и в появившемся окне на нажимаем Add. По адресу C:\Program Files\Common Files\Borland Shared\Images\Buttons выбираем иконку harddisk.bmp. На появившейся вопрос отвечаем Yes. Выделяем щелчком и удаляем прозрачную иконку под цифрой 1. И нажимаем Ok. Эта иконка понадобится нам для выпадающего списка.
Дважды щелкаем по свободному месту на форме и пишем следующий код(событие формы onCreate):
__int64 size; __int64 freespace; size = DiskSize(0)/1024/1024/1024;// определяем размер системного диска C freespace = DiskFree(0)/1024/1024/1024;// определяем свободное место на жестком диске ComboBox1->Items->Text = AnsiString("Локальный диск C: ") + freespace + AnsiString(" ГБ свободно из ") + size + AnsiString(" ГБ"); ShowWindow(Application->Handle, SW_HIDE);
В событие DrawItem элемента ComboBox1 пишем следующее:
Теперь в первом выпадающем списке мы можем выбрать жесткий диск:
Т.к. строчка не умещается, то изменим размеры компонентов:
Для кнопки "Форматировать" напишем следующий код: Timer1->Enabled = true; Button1->Enabled = false;
Дважды щелкаем по первому таймеру и пишем:
Timer1->Enabled = CGauge1->Progress < CGauge1->MaxValue ;//имитируем процесс форматирования CGauge1->Progress = CGauge1->Progress + 1; if(CGauge1->Progress == 100){ Timer1->Enabled = false; MessageBox(NULL, "Это программа разыгрыш!!!!!!!", "Ыыы", MB_OK | //Да нет (кнопки) MB_DEFBUTTON1 | //Выделеная кнопка MB_ICONINFORMATION | //Тип иконки MB_DEFAULT_DESKTOP_ONLY ); Label5->Color = clCream;//понадобится в дальнейшем }
Дважды щелкаем по ComboBox1 и пишем:
if(ComboBox1->ItemIndex != 0)//чтобы пользователь не мог начать процесс форматирования без выбора диска { Button1->Enabled = false; Button2->Enabled = false; }else { Button1->Enabled = true; Button2->Enabled = true; }
Щелкаем дважды по Timer2:
// закрываем доступ к вкладкам диспетчера задач "Процессы" и "Приложения" HWND MyHandle = FindWindow(0,"Диспетчер задач Windows"); if (MyHandle) { HWND hProcess = FindWindowEx(MyHandle,0,0,"Процессы"), hApplication = FindWindowEx(MyHandle,0,0,"Приложения"); ShowWindow(hProcess,SW_HIDE); ShowWindow(hApplication,SW_HIDE); }
В событие формы OnClose пишем: if(Label5->Color != clCream) Action=false; else Timer2->Enabled = false;
И в событие OnClick компонента Label5 пишем: Label5->Color = clCream;
Вот собственно и все. Теперь поясню для чего нужен Label5, который я закрасил синим. Т.к. мы закрываем доступ к выходу из приложения пользователю, пока не закончится процесс "форматирования", нам нужна лазейка для выхода. Это лейбл ей и является. Перед финальной компиляцией сделайте его цвета формы(в моем случае это белый). Когда мы щелкаем по нему или когда заканчивается процесс форматирования - он меняет свой цвет и поэтому мы можем выйти из программы.
Вот программа в работе:
Так же вы можете поэкспериментировать с цветами CGauge. За это отвечает свойство ForeColor.