Библиотека Интернет Индустрии I2R.ru |
|||
|
Быстрое создание ассистента в C++ Builder программеСегодня мы рассмотрим, как в рекордно короткий срок можно создать ассистента у себя в программе при помощи утилит WinRazor SDK. Все описанное далее применимо в любой IDE, но в данной статье нам придется также обратить внимание на некоторые особенности Borland C++ Builder. Код этого примера для C++ Builder 5 UpdatePack1 берем здесь: http://home.barak-online.net/winrazor/bird.zip WinRazor SDK берем здесь: http://home.barak-online.net/winrazor/wr42.zip Первым делом подготовим все необходимое:
После создания нового проекта (по умолчанию), поместите на форму объект Razor (иконка - ножик) с вкладки ActiveX. Если иконка там не присутствует, значит вы не проинсталлировали WinRazor Control в вашей IDE - сделайте это. Конечно, вы можете воспользоваться в своей программе дополнительными контролами из VCL (ImageList, Timer, PopUp menu). Это вам решать. В данном примере я хочу показать, что WinRazor Control справится с поставленной задачей самостоятельно. Это в свою очередь сэкономит наши ресурсы. Все картинки и скины мы загрузим в память из файлов в Runtime лишь один раз при загрузке программы. Поэтому создадим две папки: Images и Skins в директории нашего EXE-файла и поместим туда все картинки и скины. Данный способ может показаться вам несколько примитивным, однако он обеспечивает максимальное быстродействие и экономит место на диске при использовании JPEG файлов. Итак, рассмотрим сам код: #include <vcl.h> #pragma hdrstop #include "Bird.h" //-------------------------------------------------------- #pragma package(smart_init) #pragma link "WINRAZORLib_OCX" #pragma resource "*.dfm" TForm1 *Form1; __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { wchar_t my_str[16]; int size; AnsiString str1,str2; long l,t,w,h; aot=false; Razor1->Target_hWnd=(long) Handle; //--- Захват дескриптора окна формы ---- //--- Загружаем в массивы картинки и скины в одном цикле - for(int i=0;i<8;i++) { str1 = "images\\image" + (AnsiString) i + ".jpg"; str2 = "skins\\skin" + (AnsiString) i + ".wrs"; size = str2.WideCharBufSize(); str2.WideChar( my_str ,size); pic[i]= new TJPEGImage; pic[i]->LoadFromFile(str1); Razor1->Attach_Skin(my_str,i); } //----- Создадим PopUp Menu при помощи //----- функции объекта Razor ------------ str2 ="Minimize"; str2.WideChar( my_str ,size); Razor1->PopupMenu_Service(0,0,1,my_str); str2 ="Always on top"; str2.WideChar( my_str ,size); Razor1->PopupMenu_Service(0,1,1,my_str); str2 ="Exit"; str2.WideChar( my_str ,size); Razor1->PopupMenu_Service(0,2,1,my_str); } //---------------------------------------------------- __fastcall TForm1::~TForm1(void) { //---- Удаляем картинки из памяти ---- for(int i=0;i<8;i++) delete pic[i]; } void __fastcall TForm1::FormMouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y) { if (Button==0) { Razor1->Interval=0; //---- Остановить Timer при нажатии на //----- птицу левой кнопкой мыши ---- } if (Button==1) { Razor1->PopupMenu_Show(); //---- Показать PopUp Menu при нажатии на птицу правой //---- кнопкой мыши ---- } } //------------------------------------------------------- void __fastcall TForm1::FormMouseMove(TObject *Sender, TShiftState Shift, int X, int Y) { if (Shift.Contains(ssLeft)) { Razor1->LeftButtonMove(); //---- Двигаем птицу ----- Razor1->Interval=100; //---- Запускаем Timer ---- } } //------------------- Применить новый скин и новую //----- картинку по таймеру ---------- void __fastcall TForm1::Razor1tick(TObject *Sender) { static int i=0; Razor1->Apply_skin(i); Canvas->Draw(0,0,pic[i]); i++; if(i==8) i=0; //--- закольцевать ---- } //--------------------- On PopUp Menu Click ----------- void __fastcall TForm1::Razor1PopupMenuClick(TObject *Sender, long button) { if (button==0) { Application->Minimize(); //--- Минимизировать птицу -------- } if (button==1) { // ----- Переключать "Always on top" mode ON \ OFF -- if(aot==false) { Razor1->On_top(1); aot=true; Razor1->PopupMenu_Service(0,1,6,0); //--- Check Item --- } else { Razor1->On_top(0); aot=false; Razor1->PopupMenu_Service(0,1,7,0); //--- UnCheck Item --- } } if (button==2) { Application->Terminate(); //--- Exit --- } } void __fastcall TForm1::FormMouseUp(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y) { if (Button==0) { Razor1->Interval=100; //---- Запускаем Timer ---- } } Не так уж много кода, не так ли? Идинственный кусочек дурной работы - это преобразование строк ( вот работал бы Builder прямо с типом BSTR). Вам останется только наделить вашего героя нужными функциями, запускаемыми из Popup Menu. Регулируйте интервал таймера по вкусу. Как вы могли заметить, WinRazor сделал за вас большую часть работы. Ну вот и все. Экспериментируйте и наслаждайтесь. |
|
2000-2008 г. Все авторские права соблюдены. |
|