Недавно добавленные исходники

•  TDictionary Custom Sort  539

•  Fast Watermark Sources  904

•  3D Designer  1 830

•  Sik Screen Capture  1 479

•  Patch Maker  1 487

•  Айболит (remote control)  1 410

•  ListBox Drag & Drop  1 177

•  Доска для игры Реверси  21 945

•  Графические эффекты  1 358

•  Рисование по маске  1 297

•  Перетаскивание изображений  1 096

•  Canvas Drawing  972

•  Рисование Луны  814

•  Поворот изображения  771

•  Рисование стержней  816

•  Paint on Shape  493

•  Генератор кроссвордов  762

•  Головоломка Paletto  667

•  Теорема Монжа об окружностях  855

•  Пазл Numbrix  619

•  Заборы и коммивояжеры  850

•  Игра HIP  557

•  Игра Go (Го)  527

•  Симулятор лифта  549

•  Программа укладки плитки  509

•  Генератор лабиринта  565

•  Проверка числового ввода  524

•  HEX View  600

•  Физический маятник  528

•  Задача коммивояжера  560

 
скрыть


Delphi FAQ - Часто задаваемые вопросы

| Базы данных | Графика и Игры | Интернет и Сети | Компоненты и Классы | Мультимедиа |
| ОС и Железо | Программа и Интерфейс | Рабочий стол | Синтаксис | Технологии | Файловая система |



Пример компонента HotSpot



Автор: Robert Wittig

Вот пример HotSpot-компонента, основанного на TPanel (небольшая переделка). Управляя событиями MouseDown и MouseUp можно получить эффект резинового контура.


unit Newpanel;

interface
uses WinTypes, Classes, Controls, StdCtrls, ExtCtrls;

type

  tHotSpotClickEvent = procedure(Sender: tObject;
    Button: tMouseButton;
    Shift: tShiftState) of object;

  TNewPanel = class(tPanel)
  private
    fHotSpotClick: tHotSpotClickEvent;
    fHotSpot: tRect;
    fInHotSpot: Boolean;

    function GetHotSpotTop: Word;
    function GetHotSpotLeft: Word;
    function GetHotSpotWidth: Word;
    function GetHotSpotHeight: Word;

    procedure SetHotSpotTop(Value: Word);
    procedure SetHotSpotLeft(Value: Word);
    procedure SetHotSpotWidth(Value: Word);
    procedure SetHotSpotHeight(Value: Word);
  protected
    procedure Paint; override;
    procedure MouseDown(Button: tMouseButton; Shift: tShiftState; X, Y: Integer);
      override;
    procedure MouseUp(Button: tMouseButton; Shift: tShiftState; X, Y: Integer);
      override;
  public
    procedure Click; override;

    property HotSpot: tRect read fHotSpot write fHotSpot;
  published
    property hsTop: Word read GetHotSpotTop write SetHotSpotTop;
    property hsLeft: Word read GetHotSpotLeft write SetHotSpotLeft;
    property hsWidth: Word read GetHotSpotWidth write SetHotSpotWidth;
    property hsHeight: Word read GetHotSpotHeight write SetHotSpotHeight;

    property OnHotSpot: tHotSpotClickEvent read fHotSpotClick write
      fHotSpotClick;
  end;

procedure Register;

implementation
uses WinProcs, Graphics;

procedure Register;
begin

  RegisterComponents('Custom', [TNewPanel]);
end;

procedure TNewPanel.MouseDown(Button: tMouseButton;

  Shift: tShiftState;
  X, Y: Integer);
begin

  if PtInRect(fHotSpot, Point(X, Y)) and
    Assigned(fHotSpotClick) then
    fInHotSpot := True;
  inherited MouseDown(Button, Shift, X, Y);
end;

procedure TNewPanel.MouseUp(Button: tMouseButton;

  Shift: tShiftState;
  X, Y: Integer);
begin

  inherited MouseUp(Button, Shift, X, Y);

  if fInHotSpot then
  begin
    if Assigned(fHotSpotClick) then
      fHotSpotClick(Self, Button, Shift);
    fInHotSpot := False;
  end;
end;

procedure TNewPanel.Click;
begin

  if not fInHotSpot then
    inherited Click;
end;

procedure TNewPanel.Paint;
var

  OldStyle: tPenStyle;
begin

  inherited Paint;

  if csDesigning in ComponentState then
  begin
    OldStyle := Canvas.Pen.Style;
    Canvas.Pen.Style := psDash;
    Canvas.Rectangle(HotSpot.Left, HotSpot.Top, HotSpot.Right, HotSpot.Bottom);
    Canvas.Pen.Style := OldStyle;
  end;
end;

procedure TNewPanel.SetHotSpotTop(Value: Word);
begin

  fHotSpot.Bottom := fHotSpot.Bottom + Value - fHotSpot.Top;
  fHotSpot.Top := Value;
  Paint;
end;

procedure TNewPanel.SetHotSpotLeft(Value: Word);
begin

  fHotSpot.Right := fHotSpot.Right + Value - fHotSpot.Left;
  fHotSpot.Left := Value;
  Paint;
end;

procedure TNewPanel.SetHotSpotWidth(Value: Word);
begin

  fHotSpot.Right := fHotSpot.Left + Value;
  Paint;
end;

procedure TNewPanel.SetHotSpotHeight(Value: Word);
begin

  fHotSpot.Bottom := fHotSpot.Top + Value;
  Paint;
end;

function TNewPanel.GetHotSpotTop: Word;
begin

  Result := fHotSpot.Top
end;

function TNewPanel.GetHotSpotLeft: Word;
begin

  Result := fHotSpot.Left;
end;

function TNewPanel.GetHotSpotWidth: Word;
begin

  Result := fHotSpot.Right - fHotSpot.Left;
end;

function TNewPanel.GetHotSpotHeight: Word;
begin

  Result := fHotSpot.Bottom - fHotSpot.Top;
end;

end.





Похожие по теме исходники

Примеры работы с БД

Примеры оформления DBGrid

Пример использования DBGrid

Расширение компонента TEdit

 



Copyright © 2004-2022 "Delphi Sources" by BrokenByte Software. Delphi World FAQ

Группа ВКонтакте   Facebook   Ссылка на Twitter   Ссылка на Telegram