Логин: Пароль:    Регистрация Всеми возможностями сайта можно пользоваться
только после авторизации.
   Забыли пароль?

Поиск
L



Статистика
u
Пользователи онлайн: нет
Гостей онлайн: 5
Всего онлайн: 5
Зарегистрировано юзеров: 6362
Комментариев на сайте: 645
Новый юзер: Pseulairrerve



Последние комментарии
c
Aqel прокомментировал "Урок 71 - Работа с сжатыми файлами":
GZip псевдоархив, на мой вопрос тоже не отвечают, как распаковать отдельные файлы/папки...
Pingitrus прокомментировал "Урок 71 - Работа с сжатыми файлами":
Есть еще кто нибудь живой на этом сайте, кто сможет помочь? Так то все работает, zip и rar распаковывает, но у меня есть файл dat который сжат GZip, почему то его не удается распаковать или так не получится так как этот файл не является архивом или является?)) пишет ошибку что неверная функция



Мы в соцсетях
c
Delphi
Управление мышью

Каждый элемент управления обладает набором свойств и методов, обеспечивающих управление мышью. Понятно, что это важный и нужный механизм. Рассмотрим кратко его устройство. Воздействие мышью на интерфейсные элементы приложения разработчик может отслеживать при помощи целой группы методов-обработчиков. На нажатие кнопки мыши реагирует метод:

type 
  TMouseEvent = procedure (Sender: TObject; 
  Button: TMouseButton; 
  Shift: TShiftState; X, Y: Integer) of object; 
  property OnMouseDown: TMouseEvent;
  
В параметре Button передается признак нажатой кнопки:
type TMouseButton = (mbLeft, mbRight, mbMiddle);
Параметр Shift определяет нажатие дополнительной клавиши на клавиатуре:
type TShiftState = set of (ssShift, ssAlt, ssCtrl, ssLeft, ssRight, ssMiddle, ssDouble);
Параметры X и Y возвращают координаты курсора.

На отпускание кнопки мыши реагирует метод:
type 
  TMouseEvent = procedure (Sender: TObject; 
  Button: TMouseButton; 
  Shift: TShiftState; X, Y: Integer) of object; 
  property OnMouseUp: TMouseEvent;
  
Его параметры описаны выше.

При перемещении мыши можно вызывать метод-обработчик:
type 
  TMouseMoveEvent = procedure (Sender: TObject; 
  Shift: TShiftState; X, Y: Integer) of object; 
  property OnMouseMove: TMouseMoveEvent;
  
Если у разработчика нет необходимости так подробно отслеживать состояние мыши, можно воспользоваться двумя другими методами:
property OnClick: TNotifyEvent; 
property OnDblClick: TNotifyEvent;
Первый реагирует на щелчок кнопкой, второй - на двойной щелчок.

Каждый элемент управления может изменять внешний вид указателя мыши, перемещающейся над ним. Для этого используется свойство:
property Cursor: TCursor;
Для управления дополнительными возможностями мыши для работы в Internet (ScrollMouse) предназначены три метода обработчика, реагирующие на прокрутку:
property OnMouseWheel: TMouseWheelEvent; 
property OnMouseWheelUp: TMouseWheelUpDownEvent; 
property OnMouseWheelDown: TMouseWheelUpDownEvent;
OnMouseWheel вызывается при прокрутке вообще, OnMouseWheelUp - при прокрутке вперёд, OnMouseWheelDown - при прокрутке назад.

В VCL имеется класс TMouse, содержащий свойства мыши, установленной на компьютере. Обращаться к экземпляру класса, который создается автоматически, можно при помощи глобальной переменной Mouse. Свойства класса представлены в таблице:

Объявление Описание
property Capture: HWND; Дескриптор элемента управления, над которым находится мышь
property CursorPos: TPoint; Содержит координаты указателя мыши
property Draglmmediate: Boolean; При значении True реакция на нажатие выполняется немедленно
property DragThreshold: Integer; Задержка реакции на нажатие
property MousePresent: Boolean; Определяет наличие мыши
type UINT = LongWord; property RegWheelMessage: UINT; Задает сообщение, посылаемое при прокрутке в ScrollMouse
property WheelPresent: Boolean; Определяет наличие ScrollMouse
property WheelScrollLines: Integer; Задает число прокручиваемых линий
unit uDemo;
 
interface
 
uses
   Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
   ExtCtrls, ComCtrls;
 
type
  TMainForm = class(TForm)
    ColorDlg: TColorDialog;
    StatusBar: TStatusBar; Timer: TTimer;
    procedure FormMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
    procedure FormMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
    procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
    procedure TimerTimer(Sender: TObject);
  private
    MouseRect: TRect;
    IsDown: Boolean;
    RectColor: TColor;
  public
    { public declarations }
  end;
 
var
   MainForm: TMainForm;
 
implementation
 
{$R *.DFM}
 
procedure TMainForm.FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
  if Button = mbLeft then with MouseRect do
  begin
    IsDown := True; Left := X; Top := Y; Right := X; Bottom := Y;
    Canvas.Pen.Color := RectColor;
  end;
  if (Button = mbRight) and ColorDlg.Execute then RectColor := ColorDlg.Color;
end;
 
procedure TMainForm.FormMouseUp(Sender: TObject;
Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
  IsDown := False;
  Canvas.Pen.Color := Color;
  with MouseRect do
    Canvas.Polyline([Point(Left, Top), Point(Right, Top), Point(Right, Bottom), Point(Left, Bottom), Point(Left, Top)]);
  with StatusBar do
  begin
    Panels[4].Text := '';
    Panels[5].Text := '';
  end;
end;
 
procedure TMainForm.FonnMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
  with StatusBar do
  begin
    Panels[2].Text := 'X: ' + IntToStr(X);
    Panels[3].Text := 'Y: ' + IntToStr(Y);
  end;
  if not IsDown then Exit; Canvas.Pen.Color := Color; with mouserect do
  begin
    Canvas.Polyline([Point(Left, Top), Point(Right, Top),
    Point(Right, Bottom), Point(Left, Bottom), Point(Left, Top)]);
    Right := X;
    Bottom := Y;
    Canvas.Pen.Color := RectColor;
    Canvas.Polyline([Point(Left, Top), Point(Right, Top),
    Point(Right, Bottom), Point(Left, Bottom), Point(Left, Top)]);
  end;
  with StatusBar do begin
    Panels[4].Text := 'Ширина: ' + IntToStr(Abs(MouseRect.Right - MouseRect.Left));
    Panels[5].Text := 'Высота: ' + IntToStr(Abs(MouseRect.Bottom - MouseRect.Top));
  end;
end;
 
procedure TMainForm.TimerTimer(Sender: TObject);
begin
  with StatusBar do
  begin
    Panels[0].Text := 'Дата: ' + DateToStr(Now);
    Panels[1].Text := 'Время: ' + TimeToStr(Now);
  end;
end;
 
end.
При нажатии левой кнопки мыши в методе-обработчике FormMouseDown включается режим рисования прямоугольника (isDown := True) и задаются его начальные координаты.

При перемещении мыши по форме проекта вызывается метод-обработчик FormMouseMove, в котором координаты курсора и размеры прямоугольника передаются на панель состояния. Если левая кнопка мыши нажата (isDown = True), то осуществляется перерисовка прямоугольника.

При отпускании кнопки мыши в методе FormMouseUp рисование прямоугольника прекращается (isDown := False).

Если была нажата правая кнопка мыши, то метод-обработчик FormMouseDown обеспечивает отображение диалога выбора цвета, который позволяет сменить цвет линий прямоугольника.

Метод-обработчик TimerTimer обеспечивает отображение на панели состояния текущей даты и времени.

Вот и всё, Удачи!

Источник: www.thedelphi.ru
Автор: Савельев Александр
Опубликовано: 29 Октября 2014
Просмотров: 3668


Зарегистрируйтесь или авторизуйтесь, чтобы добавлять комментарии.