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

•  DeLiKaTeS Tetris (Тетрис)  151

•  TDictionary Custom Sort  3 331

•  Fast Watermark Sources  3 081

•  3D Designer  4 840

•  Sik Screen Capture  3 334

•  Patch Maker  3 547

•  Айболит (remote control)  3 652

•  ListBox Drag & Drop  3 007

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

•  Графические эффекты  3 936

•  Рисование по маске  3 242

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

•  Canvas Drawing  2 745

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

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

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

•  Paint on Shape  1 568

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

•  Головоломка Paletto  1 767

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

•  Пазл Numbrix  1 685

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

•  Игра HIP  1 281

•  Игра Go (Го)  1 228

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

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

•  Генератор лабиринта  1 546

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

•  HEX View  1 496

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

 
скрыть


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

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



Delphi Sources

Пример компонента 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-2024 "Delphi Sources" by BrokenByte Software. Delphi World FAQ

Группа ВКонтакте