📄 overview.pas
字号:
unit overview;
{****************************************************************************
The contents of this file are subject to the Mozilla Public License
Version 1.1 (the "License"); you may not use this file except in
compliance with the License. You may obtain a copy of the License at
http://www.mozilla.org/MPL/
Software distributed under the License is distributed on an "AS IS"
basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
License for the specific language governing rights and limitations
under the License.
The Original Code is IsoEditMdi.
The Initial Developer of the Original Code is Crystal Software (Canada) Inc.
and Chris Bruner. Portions created by Chris Bruner are Copyright
(C) Crystal Software (Canada) Inc. All Rights Reserved.
Contributor(s): Chris Bruner of Crystal Software (Canada) Inc.
(sign your name here)
******************************************************************************}
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ExtCtrls,dxisoengine,inifiles, ComCtrls, ToolWin,util, DIB;
type
T_OverView = class(TForm)
OverView: TPanel;
ScrollBox1: TScrollBox;
Image1: TDXPaintBox;
ToolBar1: TToolBar;
Zoom: TToolButton;
ToolButton1: TToolButton;
procedure OverViewMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure FormCreate(Sender: TObject);
procedure Image1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
procedure Image1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure FormDestroy(Sender: TObject);
procedure ZoomClick(Sender: TObject);
procedure ToolButton1Click(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure FormShow(Sender: TObject);
procedure FormHide(Sender: TObject);
procedure UnZoomClick(Sender: TObject);
private
{ Private declarations }
MouseDown : Boolean;
public
{ Public declarations }
Cursor : TPoint;
ZoomAmount : Integer;
procedure Paint; override;
end;
var
_OverView: T_OverView;
implementation
uses Main;
{$R *.DFM}
procedure T_OverView.OverViewMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
Cursor.x := X;
Cursor.y := Y;
end;
procedure T_OverView.Paint;
var l,w,h,x,y : integer;
c : TColor;
s : string;
Isomap : TDXIsoMap;
procedure DrawSquare(t,l,zoom : integer);
var x,y : Integer;
begin
for x := t to t + zoom do
for y := l to l + zoom do
Image1.Canvas.Pixels[x,y] := c;
end;
begin
if MainForm.ActiveChild = nil then Exit;
Image1.Canvas.Lock;
try
l := 0; { DONE : Add Layer support (currently only 1 layer) }
s := 'Overview - ' + MainForm.ActiveChild.Caption;
Isomap := MainForm.ActiveChild.IsoMap;
if (s<> Caption) then
begin
Image1.Canvas.Rectangle(0,0,Width,Height);
Caption := s;
end;
for x := 0 to IsoMap.MapWidth-1 do
for y := 0 to IsoMap.MapHeight-1 do
begin
c := IsoMap.ImageColor[IsoMap.Cell[x,y].ImageIndexes[l].ImageIndex];
DrawSquare(x*ZoomAmount,y*ZoomAmount,ZoomAmount);
// Image1.Canvas.Pixels[2*x*ZoomAmount,y*ZoomAmount] := c;
// Image1.Canvas.Pixels[1+2*x*ZoomAmount,y*ZoomAmount] := c;
end;
if (isomap.cellwidth=0) or (isomap.cellheight=0) then Exit;
// w := Isomap.Width div Isomap.CellWidth;
// h := Isomap.Height div Isomap.CellHeight;
w := (2*MainForm.ActiveChild.Width div Isomap.CellWidth) * zoomAmount;
h := (2*MainForm.ActiveChild.Height div Isomap.CellHeight) * ZoomAmount;
x := Isomap.xoffset div Isomap.CellWidth;
y := Isomap.yoffset div Isomap.CellHeight;
Image1.Canvas.Pen.Color := clblue;
Image1.Canvas.MoveTo(x,y);
Image1.Canvas.LineTo(x + w, y);
Image1.Canvas.LineTo(x + w, y + h);
Image1.Canvas.LineTo(x,y +h);
Image1.Canvas.LineTo(x,y);
finally
Image1.Canvas.Unlock;
end;
end;
procedure T_OverView.FormCreate(Sender: TObject);
var Inifile : TInifile;
begin
IniFile := GetInifile;
Top := 7;
Left := 480;
Width := 253;
Height := 263;
LoadFormPosition(Self,inifile);
ZoomAmount := IniFile.readinteger('Overview','ZoomAmount',1);
IniFile.Free; // we will be probably storing other stuff eventually but this will start us off
end;
procedure T_OverView.Image1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
MouseDown := true;
end;
procedure T_OverView.Image1MouseMove(Sender: TObject; Shift: TShiftState;
X, Y: Integer);
begin
if (MainForm.ActiveChild = nil) then Exit;
if (Mousedown) then
begin
if (X>MainForm.ActiveChild.IsoMap.Left) and
(X < (MainForm.Activechild.IsoMap.Left + MainForm.Activechild.IsoMap.Width)) and
(y>MainForm.Activechild.IsoMap.top) and
(Y < (MainForm.Activechild.IsoMap.top + MainForm.Activechild.IsoMap.height)) then
begin
MainForm.Activechild.IsoMap.XOffset := X * MainForm.Activechild.IsoMap.CellWidth;
MainForm.Activechild.IsoMap.YOffset := Y * MainForm.Activechild.IsoMap.CellHeight;
MainForm.Activechild.IsoMap.DrawIsoMap;
MainForm.ActiveChild.Invalidate;
end;
end;
end;
procedure T_OverView.Image1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
MouseDown := false;
end;
procedure T_OverView.FormDestroy(Sender: TObject);
var Inifile : TInifile;
begin
IniFile := GetInifile;
SaveFormPosition(Self,Inifile);
IniFile.WriteInteger('Overview','ZoomAmount',ZoomAmount);
IniFile.Free; // we will be probably storing other stuff eventually but this will start us off
end;
procedure T_OverView.ZoomClick(Sender: TObject);
begin
Inc(ZoomAmount)
end;
procedure T_OverView.ToolButton1Click(Sender: TObject);
begin
Dec(ZoomAmount);
end;
procedure T_OverView.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Action := caMinimize;
end;
procedure T_OverView.FormShow(Sender: TObject);
begin
mainform.OverView1.Checked := True;
end;
procedure T_OverView.FormHide(Sender: TObject);
begin
mainform.OverView1.Checked := false;
end;
procedure T_OverView.UnZoomClick(Sender: TObject);
begin
dec(zoomamount);
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -