Примеры Delphi и C# из жизни

Примеры программирования на языках Delphi, C#

 




Создание окон нестандартной формы с помощью GDI+ | Delphi

Рассмотрим создание окна приложения нестандартной формы.

Окна нестандартной формы создаются с помощью регионов. А работа с регионами в GDI+ легка и приятна.

В примере в качестве региона рассмотрена строка текста, но ничто не мешает использовать различные примитивы или даже изображения (Bitmap).

Для использования изображения в качестве региона необходимо просканировать его пиксел за пикселем, опуская выбранный в качестве прозрачного цвет, и добавляя к региону квадратные области размером в 1 пиксел:

  region.Union(MakeRect(x, y, 1, 1))


Пример:
procedure TForm1.FormCreate(Sender: TObject);
var
  region: TGPRegion;
  hRegion: HRGN;
  path: TGPGraphicsPath;
  font_family: TGPFontFamily;
  string_format: TGPStringFormat;
  text: string;
  g: TGPGraphics;
begin
  g := TGPGraphics.Create(Canvas.Handle);

  path := TGPGraphicsPath.Create(); // создаем графический путь
  font_family := TGPFontFamily.Create(\'Arial\'); // определяем шрифт
  string_format := TGPStringFormat.Create();

  text := \'Не ешьте мой\'#13#10\'моск\';
  path.AddString(text, -1, font_family, FontStyleBold, 120, MakePoint(0, 10), string_format);

  region := TGPRegion.Create(path); // определяем регион из созданного пути
  hRegion := region.GetHRGN(g);

  SetWindowRgn(Handle, hRegion, true); // устанавливаем область отсечения

  g.Free;
  path.Free;
  region.Free;
end;


это окно неправильной формы