Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Из региона формы вычитается регион надписи

Delphi , Программа и Интерфейс , Формы

Из региона формы вычитается регион надписи

Оформил: DeeCo
Автор: http://www.swissdelphicenter.ch

{ 

 When youu need a form like a tree or something else what do you do? Windows 
 provides the CreateRoundRectRegion() function that just cuts the edges of your 
 form. If you want to do something else, you need to completely draw your 
 region in a HDC (TCanvas) while Windows looks on your hand to learn it. 
 After this, you can set the new region to your form using the 'SetWindowRgn()' function. 

 And how to do this? Here you will find a simple example that just gives some text 
 and sets the region like it. Expand it by your mind! 

}

 var
   Form1: TForm1;
   HRgn: THandle;

 implementation

 {$R *.DFM}

 procedure TForm1.Button1Click(Sender: TObject);
 var
   s: string;
 begin
   DeleteObject(HRgn);
   s := InputBox('Region Text', 'Please enter some text to set to the region', 'CoolRgn');

   BeginPath(Canvas.Handle);
   with Canvas do
   begin
     Font.Name  := 'Comic Sans MS';
      Font.Size  := 64;
      Font.Style := [fsBold];
     TextOut(0, 0, s);
   end;

   EndPath(Canvas.Handle);
   HRgn := PathToRegion(Canvas.Handle);
   SetWindowRgn(Handle, HRgn, True);

   button1.Visible := False;
   Color           := clRed;
 end;

 procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
 begin
   DeleteObject(HRgn);
 end;

 procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
   Shift: TShiftState; X, Y: Integer);
 begin
   if Button = mbLeft then
   begin
     ReleaseCapture;
     SendMessage(Handle, WM_NCLBUTTONDOWN, HTCAPTION, 0);
   end;
 end;

Программа на Delphi, которая создает форму с кнопкой. Когда кнопка кликается, она устанавливает регион формы в custom-шапу с помощью функций PathToRegion и SetWindowRgn. Регион создается путем рисования текста на канвасе с помощью функции TextOut.

Вот разбивка кода:

  • Программа начинается с объявления двух переменных: Form1, которая является экземпляром формы, и HRgn, который является handle к региону.
  • В процедуре Button1Click, когда кнопка кликается, она:
    • Удаляет любые существующие регионы с помощью DeleteObject.
    • Спрашивает пользователя ввести текст в поле ввода.
    • Устанавливает шрифт канваса на Comic Sans MS размером 64 и стиль bold.
    • Рисует текст на канвасе в позиции (0,0) с помощью TextOut.
    • Создает путь от канваса с помощью BeginPath и EndPath, который необходим для создания региона.
    • Преобразовывает путь в регион с помощью PathToRegion.
    • Устанавливает регион формы в новый регион с помощью SetWindowRgn.
    • Скрывает кнопку и устанавливает цвет формы на красный.
  • В процедуре FormClose, когда форма закрывается, она удаляет любые существующие регионы с помощью DeleteObject.
  • В процедуре FormMouseDown, когда пользователь кликнет на форму, она проверяет, был ли нажат левый кнопка мыши, и освобождает захват если так.
  • Код может иметь некоторые потенциальные проблемы:
    • Регион создается с помощью TextOut, что может не всегда давать желаемый результат, особенно для сложных форм.
    • Регион не сохраняется при изменении размера или перемещении формы. Это означает, что если вы уменьшите форму и затем восстановите ее, custom-шапа будет потеряна.

Чтобы улучшить этот код, можно рассмотреть использование более robust метод для создания региона, например, с помощью библиотеки GDI+ или OpenGL. Также можно добавить дополнительную логику для сохранения региона при изменении размера или перемещении формы.

Из региона формы вычитается регион надписи.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Формы ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-08-19 13:29:56
2024-11-21 11:29:41/0.0081379413604736/1