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

Компонент для отрисовки линий

Delphi , Графика и Игры , Компоненты и Графика

Компонент для отрисовки линий

Автор: William E Murto

Вот компонент, инкапсулирующий функции рисования линий. Он может рисовать горизонтальные, вертикальные и диагональные линии. Вы можете добавить необходимые вам события в секцию *published*.


unit Lines; {от Bill Murto, CIS 73730,2505}

interface

uses
  SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls, Forms;

type
  TLineOrigin = (loTopLeft, loTopRight);
  TLine = class(TGraphicControl)
  private
    { Private declarations }
    fOrigin: TLineOrigin;
    fPen: TPen;
    procedure SetOrigin(Value: TLineOrigin);
    procedure SetPen(Value: TPen);
  protected
    { Protected declarations }
    procedure Paint; override;
  public
    { Public declarations }
    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;
  published
    { Published declarations }
    property Origin: TLineOrigin read fOrigin write SetOrigin default
      loTopLeft;
    property Pen: TPen read fPen write SetPen;
    property Height default 33;
    property Width default 33;
    procedure StyleChanged(Sender: TObject);
  end;

procedure Register;

implementation

procedure Register;
begin
  RegisterComponents('Samples', [TLine]);
end;

procedure TLine.SetOrigin(Value: TLineOrigin);
begin
  if fOrigin <> Value then
  begin
    fOrigin := Value;
    Invalidate;
  end;
end;

procedure TLine.SetPen(Value: TPen);
begin
  fPen.Assign(Value);
end;

procedure TLine.StyleChanged(Sender: TObject);
begin
  Invalidate;
end;

constructor TLine.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
  Height := 33;
  Width := 33;
  fPen := TPen.Create;
  fPen.OnChange := StyleChanged;
  if csOpaque in ControlStyle then
    ControlStyle := ControlStyle - [csOpaque];
end;

procedure TLine.Paint;
begin
  with Canvas do
  begin
    Pen := fPen;
    if (Width <= Pen.Width) or (Height <= Pen.Width) then
    begin
      if Width <= Pen.Width then
      begin
        MoveTo(0, 0);
        LineTo(0, Height);
      end;
      if Height <= Pen.Width then
      begin
        MoveTo(0, 0);
        LineTo(Width, 0);
      end;
    end
    else
      case fOrigin of
        loTopLeft:
          begin
            MoveTo(0, 0);
            LineTo(Width, Height);
          end;
        loTopRight:
          begin
            MoveTo(Width, 0);
            LineTo(0, Height);
          end;
      end;
  end;
end;

destructor TLine.Destroy;
begin
  fPen.Free;
  inherited Destroy;
end;

end.

Это компонент Delphi для рисования линий, написанный Уильямом Э. Мурто. Компонент, называемый TLine, наследуется от TGraphicControl и предоставляет свойства для установки начала линии (Origin) и пера, используемого для рисования линии (Pen). Он также имеет публикуемые свойства для установки высоты и ширины контрола.

Компонент переопределяет несколько методов:

  • Create: Это вызывается при создании компонента. Он устанавливает начальную величину свойств, включая высоту, ширину и перо.
  • SetOrigin и SetPen: Эти методы используются для установки свойств начала линии и пера соответственно. Они также инвалидируют контрол, что вызывает его перерисовку.
  • StyleChanged: Этот метод вызывается при изменении стиля контрола (например, когда пользователь выбирает другой шрифт). Он инвалидирует контрол, вызывая его перерисовку.
  • Paint: Этот метод используется для рисования линии на канвасе. Он использует свойства начала линии и пера для определения, как рисовать линию.

Компонент также имеет несколько приватных переменных:

  • fOrigin: Текущее начало линии (либо loTopLeft, либо loTopRight).
  • fPen: Перо, используемое для рисования линии.
  • Width и Height: Размеры контрола.

Имплементация компонента fairly straightforward, с фокусом на обеспечении гибкости в рисовании линий. Например, он позволяет пользователю установить начало линии (т.е., где она начинается) и предоставляет методы для установки пера, используемого для рисования линии.

Один потенциальный район для улучшения - компонент не обеспечивает встроенной поддержки рисования диагональных линий. Это можно добавить, модифицируя метод Paint, чтобы проверять, если ширина и высота больше ширины пера, и если так, то рисовать диагональную линию на основе свойства начала линии.

В целом, этоsolid компонент, который предоставляет хорошую основу для рисования линий в приложениях Delphi.

Компонент для отрисовки линий, позволяющий рисовать горизонтальные, вертикальные и диагональные линии с возможностью изменения параметров рисования.


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

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




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


:: Главная :: Компоненты и Графика ::


реклама


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

Время компиляции файла: 2024-08-19 13:29:56
2024-10-24 19:57:07/0.003715991973877/0