Справочник советов и примеров по C++Builder

       

Форма




  • Запрещение кнопки закрытия [X] формы

    // Чтобы запретить кнопку закрытия формы, напишите следующий

    // код (Form1- ваша форма, Button1 - кнопка на ней):
    void __fastcall TForm1::Button1Click(TObject *Sender)

    {

    HMENU MenuHandle = GetSystemMenu(Handle, false);

    if(MenuHandle)

      DeleteMenu(MenuHandle, SC_CLOSE, MF_BYCOMMAND);

    }

  • Запрещение кнопки максимизации [[]] формы

    // Чтобы запретить кнопку максимизации формы, напишите

    // следующий код (Form1- ваша форма, Button1 - кнопка на ней):

    void __fastcall TForm1::Button1Click(TObject *Sender)

    {

    HMENU MenuHandle = GetSystemMenu(Handle, false);

    if(MenuHandle)

      DeleteMenu(MenuHandle, SC_MAXIMIZE, MF_BYCOMMAND);

    }

    // ПРИМЕЧАНИЕ: максимизация формы двойным щелчком мыши

    // по заголовку также будет невозможна

  • Запрещение кнопки минимизации [_] формы

    // Чтобы запретить кнопку минимизации формы, напишите

    // следующий код (Form1- ваша форма, Button1 - кнопка на ней):
    void __fastcall TForm1::Button1Click(TObject *Sender)

    {

    HMENU MenuHandle = GetSystemMenu(Handle, false);

    if(MenuHandle)

      DeleteMenu(MenuHandle, SC_MINIMIZE, MF_BYCOMMAND);

    }

  • Отмена закрытия формы при нажатии Alt+F4

    // Чтобы форма не закрывалась при нажатии комбинации клавиш

    // Alt+F4, разместите на форме компонент TActionList(ActionList1),

    // создайте новый TAction(Action1), и в свойстве ShortCut у Action1

    // пропишите комбинацию клавиш Alt+F4, а обработчик события

    // OnExecute должен выглядеть следующим образом

    // (Form1- ваша форма):
    void __fastcall TForm1::Action1Execute(TObject *Sender)

    {

    // чтобы при сохранении C++Builder не уничтожил обработчик

    }

  • Отмена закрытия формы при нажатии Alt+F4 (Вариант 2)

    //В обpаботчике FormKeyDown пишешь:
    if (Shift.Contains(ssAlt)&&Key==VK_F4) Tag=1;

    //В обpаботчике FormCloseQuery:

    if(Tag)

    {

    CanClose=false;

    Tag=0;

    }

  • Перемещение формы мышью не за заголовок

    // Напишите следующий обработчик события OnMouseDown формы
    void __fastcall TForm1::FormMouseDown(TObject *Sender, TMouseButton Button,


    TShiftState Shift, int X, int Y)

    {

     long SC_DRAGMOVE = 0xF012;

     if(Button == mbLeft)

      {

      ReleaseCapture();

      SendMessage(Handle, WM_SYSCOMMAND, SC_DRAGMOVE, 0);

     }

    }



  • Изменение размеров формы (развернуть и т.д.)

    // Напишите следующий код:
    Form1->WindowState = wsMaximized; // развернуть
    Form1->WindowState = wsMinimized; // минимизировать
    Form1->WindowState = wsNormal; // первоначальный размер



  • Как сделать кусок окна прозрачным

    // Для того чтобы сделать кусок формы прозрачным,

    // напишите следующий код:

    //Прямоугольный кусок

    HRGN R1=CreateRectRgn(0, 0, Width, Height);

    HRGN R2=CreateRectRgn(4, 24, Width-4, Height-4);

    CombineRgn(R1, R1,R2, RGN_DIFF);

    SetWindowRgn(Handle, R1, TRUE);

    //Кусок в виде элипса
    HRGN hRgn1 = CreateRectRgn(0, 0, Width, Height);

    HRGN hRgn2 = CreateEllipticRgn(0, 0, Width, Height);

    HRGN hRgn3 = CreateRectRgn(0, 0, Width, Height);

    CombineRgn(hRgn3, hRgn1, hRgn2, RGN_DIFF);

    SetWindowRgn(Handle, hRgn3, TRUE);

    //можно заменить hRgn3 на hRgn2

    //Кусок в виде пятиугольника

    HRGN Reg1, Reg2;

    HRGN Region;

    POINT p[5];

    p[0] = Point(100, 0);

    p[1] = Point(Width-100, 0);

    p[2] = Point(Width, Height/2);

    p[3] = Point(Width/2, Height);

    p[4] = Point(0, Height/2);

    Region = CreatePolygonRgn(p, 5, ALTERNATE);

    SetWindowRgn(Handle, Region, true);



  • Создание новой формы во время работы программы

    // Для того чтобы создать новую форму напишите:

    // следующих код:

    TForm * Formik= new TForm(this);

    TButton* button=new TButton(Application);

    button->Parent=Formik;

    button->Caption="New Button";

    button->Left=10;

    button->Top=15;

    button->Show();

    Formik->Caption=123;

    Formik->ShowModal();

    delete Formik;



  • Как сделать прозрачную форму в W2K/XP

    // Для того чтобы сделать прозрачную форму напишите:

    int Transparency = 75;//насколько прозрачным будет окно (0-100%)

    long ExtStyle = GetWindowLong(Handle, GWL_EXSTYLE);

    SetWindowLong(Handle, GWL_EXSTYLE, ExtStyle | WS_EX_LAYERED);



    SetLayeredWindowAttributes(Handle, 0 , (255 * Transparency) / 100,

    LWA_ALPHA);



  • Прозрачное окно с реакцией на нажатия кнопок, панелей

    // Для того чтобы создать форму напишите:

    void __fastcall TForm1::Photo()

    {

    int X0,Y0;

    bool Flag;

    TRect ScreenRect;

    TCanvas* ScreenCanvas=new TCanvas;

    try

    {

      Top=0;

      Left=Screen->Width;

      Width=Screen->Width;

      Height=Screen->Height;

      ScreenRect=Rect(0,0,Width,Height);

      ScreenCanvas->Handle=GetDC(0);

      Image1->Canvas->CopyRect(ScreenRect, ScreenCanvas,ScreenRect);

      ReleaseDC(Handle,ScreenCanvas->Handle);

      Left=Top;

    } __finally

    {

      delete ScreenCanvas;

    }

    }



  • Новая форма как отдельное окно

    // Для того чтобы создать новую форму напишите:

    void __fastcall TForm1::CreateParams(TCreateParams& Params)

    {

    TForm::CreateParams(Params);

    Params.WndParent = 0;

    }



  • Приложение без формы

    Создайте новый проект. Дальше: Project->Remove from project



  • Определения класса окна определённого приложения

    Для того чтобы определить класс определённого приложения напишите следующий код:

    HWND hWnd=FindWindow(NULL,"Калькулятор");//для русскоязычной Windows

    if (hWnd)

    {

    char buff[100];

    GetClassName(hWnd,buff,100);

    ShowMessage(buff);

    }

    Автор: Srpj Сайт:



  • Как заполнить канву формы, фоном рабочего стола

    // Напишите следующий код:

    PaintDesktop(Form1->Canvas->Handle);


    Содержание раздела