воскресенье, 30 марта 2014 г.

7. Свойства и методы формы. Лабораторные Delphi, C++ (4)


Создание непрямоугольных форм в Delphi и C++Builder

Запустите на выполнение Delphi или C++Builder. Создайте новый проект, выбрав в меню File | New | VCL Forms Application - Delphi (File | New | VCL Forms Application – C++Builder). Появится форма нового проекта.

Создание овальной формы

С вкладки Additional положите на форму компонент Image. Задайте для него следующие свойства:
·        AutoSize = True.
·        Left = 0, Top = 0.
Загрузите в этот компонент рисунок, щелкнув мышью справа от свойства Picture по кнопке с многоточием. Появится окно редактирования изображения:













Рис. 1. Окно Picture Editor
Щелкните мышью по кнопке Load и в каталоге на диске выберите подходящий графический файл. В окне Picture Editor щелкните по кнопке ОК.
Установите следующие свойства формы:
·        BorderStyle = bsNone.
·        Position = poScreenCenter.
Размеры формы (Height и Width) установите в соответствии с размерами картинки.
Положите на форму кнопку, задав для нее текст Close и размер шрифта Font 7, начертание жирное, Bold.
Форма примет следующий вид:




Рис. 2. Непрямоугольная форма
В обработчике события щелчка по этой кнопке задайте оператор закрытия формы:
Close();
Изменить представление формы на экране, отличное от прямоугольного, можно только в режиме выполнения программы. Напишите следующий обработчик события создания формы (OnCreate):
Delphi
procedure TForm1.FormCreate(Sender: TObject);
begin
  SetWindowRgn(Handle, CreateEllipticRgn(
  0, // x-координата левого верхнего угла
     // ограничивающего прямоугольника
  0, // y-координата левого верхнего угла
     // ограничивающего прямоугольника
  Height, // x-координата правого нижнего
          // угла ограничивающего прямоугольника
  Width   // y-координата правого нижнего
          // угла ограничивающего прямоугольника
  ), TRUE);
end;
C++Builder
void __fastcall TForm1::FormCreate(TObject *Sender)
{
  HRGN hRgn = CreateEllipticRgn(
  0, // x-координата левого верхнего угла
     // ограничивающего прямоугольника
  0, // y-координата левого верхнего угла
     // ограничивающего прямоугольника
  Height, // x-координата правого нижнего
          // угла ограничивающего прямоугольника
  Height  // y-координата правого нижнего
          // угла ограничивающего прямоугольника
  );
  SetWindowRgn(Handle, hRgn, TRUE);
}
Событие OnCreate возникает перед созданием формы. В обработчике этого события создается объект hRgn типа HRGN. Метод CreateEllipticRgn позволяет создать эллипс с указанными характеристиками — координаты верхнего левого и правого нижнего угла (x, y). Функция SetWindowRgn позволяет изменять внешний вид формы во время выполнения программы.
Запустите программу на выполнение. Появившаяся форма будет иметь следующий вид:






Рис. 3. Выполнение программы
Переместить такую форму мышью по экрану невозможно, поскольку у нее отсутствует заголовок. Завершите работу программы, щелкнув по кнопке закрытия.




1 комментарий:

  1. >Переместить такую форму мышью по экрану невозможно, поскольку у нее отсутствует заголовок
    Отдать HTCAPTION в ответ на WM_NCHITTEST - никак? Раз уж SetWindowRgn осветили.
    А то ведь прочитает молодежь - мол, переместить невозможно, поскольку окно без заголовка. Уж больно категорично и безапелляционно.

    ОтветитьУдалить