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

Элементы управления с закругленными краями

Delphi , Компоненты и Классы , Компоненты

Элементы управления с закругленными краями

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

procedure MakeRounded(Control: TWinControl);
 var
   R: TRect;
   Rgn: HRGN;
 begin
   with Control do
   begin
     R := ClientRect;
     rgn := CreateRoundRectRgn(R.Left, R.Top, R.Right, R.Bottom, 20, 20);
     Perform(EM_GETRECT, 0, lParam(@r));
     InflateRect(r, - 5, - 5);
     Perform(EM_SETRECTNP, 0, lParam(@r));
     SetWindowRgn(Handle, rgn, True);
     Invalidate;
   end;
 end;


 procedure TForm1.Button1Click(Sender: TObject);
 begin
   // TMemo: 
  Memo1.BorderStyle := bsNone;
   MakeRounded(Memo1);
   // TEdit: 
  Edit2.BorderStyle := bsNone;
   MakeRounded(Edit2);
   // TPanel: 
  MakeRounded(Panel1);
   // TStaticText: 
  MakeRounded(StaticText1);
   // TForm 
  Form1.BorderStyle := bsNone;
   MakeRounded(Form1);
 end;

Программный код написан на языке Delphi, который является основой для языка Pascal. Он содержит процедуру MakeRounded, которая позволяет добавлять закругленные углы к различным контролам Windows, таким как TWinControl, TMemo, TEdit, TPanel и даже форме.

Вот шаг за шагом, как работает эта процедура:

  1. Процедура MakeRounded принимает один параметр Control, который является экземпляром класса TWinControl. Она создает регион закругленной прямоугольной области для контрола с помощью функции CreateRoundRectRgn из Windows API.
  2. Затем она устанавливает регион окна контрола в эту новосозданную закругленную прямоугольную область с помощью функции SetWindowRgn.
  3. Метод Invalidate вызывается для контрола, что означает, что он требует перерисовки.

В примере кода формы демонстрируется, как использовать эту процедуру для добавления закругленных углов к различным контролам:

  • Для TMemo, TEdit и TStaticText стиль рамки устанавливается в none, а затем вызывается процедура MakeRounded.
  • Для TPanel только процедура MakeRounded вызывается, потому что он уже имеет стиль без рамки по умолчанию.
  • Для формы сама собой стиль рамки устанавливается в none, а затем вызывается процедура MakeRounded.

Альтернативным решением может быть использование встроенной поддержки Delphi для закругленных углов в стилях. Это требует создания custom стиля с закругленными углами и его применения к контролам или форме. Вот пример, как это можно сделать:

procedure TForm1.Button1Click(Sender: TObject);
begin
  Memo1.StyleKind := skClient;
  Edit2.StyleKind := skEdit;
  Panel1.StyleKind := skPanel;
  StaticText1.StyleKind := skStaticText;
  Form1.StyleKind := skNormal;
  Form1.BorderStyle := bsNone;
end;

В этом примере мы устанавливаем свойство StyleKind каждого контрола в стиль, который поддерживает закругленные углы (например, skClient для memo и edit контролов). Затем мы отключаем рамку, установив свойство BorderStyle в bsNone. Таким образом, вам не нужно создавать ручной регион закругленной прямоугольной области с помощью Windows API. Однако стоит учитывать, что это может не обеспечить такой же уровень контроля, как создание custom закругленной прямоугольной области с помощью Windows API.

В статье описывается способ создания элементов управления с закругленными краями в программировании на языке Delphi, используя процедуру MakeRounded и вызывая соответствующие методы для различных типов компонентов.


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

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




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


:: Главная :: Компоненты ::


реклама


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

Время компиляции файла: 2024-12-22 20:14:06
2025-07-02 06:08:24/0.0060200691223145/0