Borland C++ FAQ
Страница 15. Форма


 Форма

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

    // Чтобы запретить кнопку закрытия формы, напишите следующий
    // код (Form1- ваша форма, Button1 - кнопка на ней):
    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
    HMENU MenuHandle = GetSystemMenu(Handle, false);
    if(MenuHandle)
      DeleteMenu(MenuHandle, SC_CLOSE, MF_BYCOMMAND);
    }

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

    // Чтобы запретить кнопку максимизации формы, напишите
    // следующий код (Form1- ваша форма, Button1 - кнопка на ней):
    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
    HMENU MenuHandle = GetSystemMenu(Handle, false);
    if(MenuHandle)
      DeleteMenu(MenuHandle, SC_MAXIMIZE, MF_BYCOMMAND);
    }
    // ПРИМЕЧАНИЕ: максимизация формы двойным щелчком мыши
    // по заголовку также будет невозможна


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

    // Чтобы запретить кнопку минимизации формы, напишите
    // следующий код (Form1- ваша форма, Button1 - кнопка на ней):
    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
    HMENU MenuHandle = GetSystemMenu(Handle, false);
    if(MenuHandle)
      DeleteMenu(MenuHandle, SC_MINIMIZE, MF_BYCOMMAND);
    }

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

    // Чтобы форма не закрывалась при нажатии комбинации клавиш
    // Alt+F4, разместите на форме компонент TActionList(ActionList1),
    // создайте новый TAction(Action1), и в свойстве ShortCut у Action1
    // пропишите комбинацию клавиш Alt+F4, а обработчик события
    // OnExecute должен выглядеть следующим образом
    // (Form1- ваша форма):
    void __fastcall TForm1::Action1Execute(TObject *Sender)
    {
    // чтобы при сохранении C++Builder не уничтожил обработчик
    }

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

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

    //В обpаботчике FormCloseQuery:
    if(Tag)
    {
    CanClose=false;
    Tag=0;
    }

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

    // Напишите следующий обработчик события 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);
     }
    }

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

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

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

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

    //Прямоугольный кусок
    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);

     
 
« Предыдущая статья