Главная » 2013 » Февраль » 11 » Программа - розыгрыш (имитация форматирования жесткого диска)
08:55
Программа - розыгрыш (имитация форматирования жесткого диска)
Создание программы-прикола.

Наверняка вам когда-нибудь хотелось разыграть своего знакомого/соседа/приятеля. 
Так как на дворе 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

Edit  Text
1     Локальный диск

CheckBox     Enabled          Caption
1                   true                Быстрое (Очистка оглавления)
2                   false               Создание загрузочного диска MS-DOS

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 пишем следующее:

    ComboBox1->Canvas->FillRect ( Rect );
    ImageList1->Draw ( ComboBox1->Canvas, Rect.left + 0x8, Rect.top, Index );
    ComboBox1->Canvas->TextOutA ( Rect.left + ImageList1->Width + 0x10,
                                  Rect.top,
                                  ComboBox1->Items->Strings[Index] );  

 
Теперь в первом выпадающем списке мы можем выбрать жесткий диск:



Т.к. строчка не умещается, то изменим размеры компонентов:



Для кнопки "Форматировать" напишем следующий код:

 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



Полный её код:

//---------------------------------------------------------------------------
 
#include <vcl.h>
#pragma hdrstop
 
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma link "CGAUGES"
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
 
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2MouseMove(TObject *Sender,
      TShiftState Shift, int X, int Y)
{
 if(Button2->Top == 80)
 Button2->Top = 300;
 else
 Button2->Top = 80;         
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::FormCreate(TObject *Sender)
{
 __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);
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::ComboBox1DrawItem(TWinControl *Control, int Index,
      TRect &Rect, TOwnerDrawState State)
{
    ComboBox1->Canvas->FillRect ( Rect );
    ImageList1->Draw ( ComboBox1->Canvas, Rect.left + 0x8, Rect.top, Index );
    ComboBox1->Canvas->TextOutA ( Rect.left + ImageList1->Width + 0x10,
                                  Rect.top,
                                  ComboBox1->Items->Strings[Index] );
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::Button1Click(TObject *Sender)
{
 Timer1->Enabled = true;
 Button1->Enabled = false;        
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
 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;
 }
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::ComboBox1Change(TObject *Sender)
{
 if(ComboBox1->ItemIndex != 0)
 {
 Button1->Enabled = false;
 Button2->Enabled = false;
 }else
 {
 Button1->Enabled = true;
 Button2->Enabled = true;
 }        
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::Timer2Timer(TObject *Sender)
{
  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);
      }        
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::Label5Click(TObject *Sender)
{
 Label5->Color = clCream;
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action)
{
 if(Label5->Color != clCream)
 Action=false;
 else
 Timer2->Enabled = false;        
}
//---------------------------------------------------------------------------


Так же, желательно, сменить иконку приложения. Успехов ;-)
Категория: С++ Builder | Просмотров: 551 | Добавил: Andre99 | Рейтинг: 0.0/0
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]