⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 unitnavigation.pas

📁 此代码是关于mapgis的在
💻 PAS
字号:
unit UnitNavigation;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Buttons, ExtCtrls;

type
  TNavegateEvent=procedure (Sender:TObject; Direction:Integer) of object;
  TFrmNavigation = class(TForm)
    SBtnUp: TSpeedButton;
    SBtnLeft: TSpeedButton;
    SBtnWholeMap: TSpeedButton;
    SBtnRight: TSpeedButton;
    SBtnDown: TSpeedButton;
    TimerMoveMap: TTimer;
    procedure FormCreate(Sender: TObject);
    procedure TimerMoveMapTimer(Sender: TObject);
    procedure SBtnWholeMapClick(Sender: TObject);
    procedure SBtnUpMouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure SBtnUpMouseUp(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure SBtnLeftMouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure SBtnDownMouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure SBtnRightMouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure FormMouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    procedure FormMouseUp(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
  private
    MouseDown : Boolean;
    MouseX, MouseY: Integer;
    FOnNavigate: TNavegateEvent;
    { Private declarations }
  public
    { Public declarations }
    property OnNavigate:TNavegateEvent read FOnNavigate write FOnNavigate;
  end;
  
const
// Move_Direction
  DIRECTION_STOP   = 0;
  DIRECTION_UP     = 1;
  DIRECTION_DOWN   = 2;
  DIRECTION_LEFT   = 3;
  DIRECTION_RIGHT  = 4;
  DIRECTION_WHOLE  = 5;

var
  FrmNavigation: TFrmNavigation;
// 方向盘方向
  Move_Direction : Integer;   // Record Moveing Direction

implementation

{$R *.dfm}


procedure TFrmNavigation.FormCreate(Sender: TObject);
var
  l: longint;
  R : HRgn;
begin
// 半透明窗体
  l:=getWindowLong(Handle, GWL_EXSTYLE);
  l := l Or WS_EX_LAYERED;
  SetWindowLong (handle, GWL_EXSTYLE, l);
  SetLayeredWindowAttributes (handle, 0, 180, LWA_ALPHA);
// 圆形窗体
  Width := Height;
  R := CreateEllipticRgn(1, 1, Width, Height);
  SetWindowRgn(Handle,R,True);
//
  MouseDown:=False;
end;

procedure TFrmNavigation.TimerMoveMapTimer(Sender: TObject);
begin
//  direction control
  Case Move_Direction of
    DIRECTION_STOP : begin
      TimerMoveMap.Enabled := False;
    end;
    DIRECTION_UP,
    DIRECTION_DOWN,
    DIRECTION_LEFT,
    DIRECTION_RIGHT: begin
      if Assigned(FOnNavigate) then
        FOnNavigate(Self, Move_Direction);  
    end;
  end;
end;

procedure TFrmNavigation.SBtnWholeMapClick(Sender: TObject);
begin
  if Assigned(FOnNavigate) then
    FOnNavigate(Self, DIRECTION_WHOLE);  
end;

procedure TFrmNavigation.SBtnUpMouseDown(Sender: TObject;
  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
  Move_Direction := DIRECTION_UP;
  TimerMoveMap.Enabled := True;
end;

procedure TFrmNavigation.SBtnUpMouseUp(Sender: TObject;
  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
  Move_Direction := DIRECTION_STOP;
end;

procedure TFrmNavigation.SBtnLeftMouseDown(Sender: TObject;
  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
  Move_Direction := DIRECTION_LEFT;
  TimerMoveMap.Enabled := True;
end;

procedure TFrmNavigation.SBtnDownMouseDown(Sender: TObject;
  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
  Move_Direction := DIRECTION_DOWN;
  TimerMoveMap.Enabled := True;
end;

procedure TFrmNavigation.SBtnRightMouseDown(Sender: TObject;
  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
  Move_Direction := DIRECTION_RIGHT;
  TimerMoveMap.Enabled := True;
end;

procedure TFrmNavigation.FormMouseDown(Sender: TObject;
  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
  if Button=mbLeft then
    begin
      MouseX := X;
      MouseY := Y;
      MouseDown := True;
    end;
end;

procedure TFrmNavigation.FormMouseMove(Sender: TObject; Shift: TShiftState;
  X, Y: Integer);
begin
  if MouseDown then
    begin
      Left := Left+X-MouseX;
      Top := Top+Y-MouseY;
    end;
end;

procedure TFrmNavigation.FormMouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  if Button=mbLeft then
    MouseDown := False;
end;

end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -