📄 imageproperties.pas
字号:
unit ImageProperties;
{
projet ADK-ISO (c)2002-2003 Paul TOTH <tothpaul@free.fr>
http://www.web-synergy.net/naug-land/
}
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Spin, EditMaps, ComCtrls, Buttons, ExtCtrls,ImageTrees;
type
TImageEditor = class(TForm)
Label1: TLabel;
TabWidth: TSpinEdit;
TabHeight: TSpinEdit;
seStepX: TSpinEdit;
seStepY: TSpinEdit;
Label5: TLabel;
Label6: TLabel;
PageControl1: TPageControl;
TabSheet1: TTabSheet;
TabSheet2: TTabSheet;
PosX: TSpinEdit;
PosY: TSpinEdit;
Label3: TLabel;
Label4: TLabel;
cbForeground: TCheckBox;
SpeedButton1: TSpeedButton;
SpeedButton2: TSpeedButton;
SpeedButton3: TSpeedButton;
SpeedButton4: TSpeedButton;
Label7: TLabel;
PosZ: TSpinEdit;
Image1: TImage;
Image2: TImage;
SpeedButton5: TSpeedButton;
SpeedButton6: TSpeedButton;
SpeedButton7: TSpeedButton;
SpeedButton8: TSpeedButton;
cbDouble: TCheckBox;
Effets: TTabSheet;
cbSwap: TCheckBox;
cbFlip: TCheckBox;
Label2: TLabel;
cbShow: TComboBox;
TabSheet3: TTabSheet;
Label8: TLabel;
Label9: TLabel;
OrgY: TSpinEdit;
OrgX: TSpinEdit;
Image3: TImage;
Button1: TButton;
TabSheet4: TTabSheet;
edText: TEdit;
cbStaticText: TCheckBox;
cbServerRequest: TCheckBox;
Label10: TLabel;
cbVisible: TComboBox;
Label11: TLabel;
Label12: TLabel;
cbAutoFlip: TCheckBox;
procedure SpeedButton1Click(Sender: TObject);
procedure PosXChange(Sender: TObject);
procedure cbForegroundClick(Sender: TObject);
procedure seStepYChange(Sender: TObject);
procedure SpeedButton5Click(Sender: TObject);
procedure cbDoubleClick(Sender: TObject);
procedure SpeedButton6Click(Sender: TObject);
procedure Image1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure Image1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
procedure Image2MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
procedure cbSwapClick(Sender: TObject);
procedure cbFlipClick(Sender: TObject);
procedure Image3MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
procedure OrgXChange(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure cbVisibleChange(Sender: TObject);
procedure cbShowChange(Sender: TObject);
procedure cbStaticTextClick(Sender: TObject);
procedure cbServerRequestClick(Sender: TObject);
procedure edTextChange(Sender: TObject);
procedure cbAutoFlipClick(Sender: TObject);
private
{ Private declarations }
fImage:TEditImage;
fDef:PImageDef;
Freeze:boolean;
MouseX,MouseY,MouseB:integer;
procedure SetImage(Value:TEditImage);
public
{ Public declarations }
procedure ResetSwitches;
property Image:TEditImage read fImage write SetImage;
end;
var
ImageEditor: TImageEditor;
procedure EditImage(Image:TEditImage);
implementation
uses IsoMap1,ADKMaps;
{$R *.dfm}
procedure EditImage(Image:TEditImage);
begin
if ImageEditor=nil then ImageEditor:=TImageEditor.Create(Application);
ImageEditor.Image:=Image;
ImageEditor.Show;
end;
procedure TImageEditor.SetImage(Value:TEditImage);
var
i:integer;
k:boolean;
begin
if Value=nil then begin
PageControl1.Hide;
exit;
end;
PageControl1.Show;
Freeze:=True;
fImage:=Value;
fDef:=MainForm.ImageTree1.ImageDef(fImage);
PosX.Value:=fImage.Data.Position.x;
PosY.Value:=fImage.Data.Position.y;
PosZ.Value:=fImage.Data.BaseLine;
OrgX.Value:=fDef.Origin.x;
OrgY.Value:=fDef.Origin.y;
cbForeground.Checked:=ifForeground in fImage.Data.Flags;
PosZ.Enabled:=cbForeground.Checked;
if ifArray in fImage.Data.Flags then begin
with fImage.GetArray do begin
TabWidth.Value:=Width;
TabHeight.Value:=Height;
seStepX.Value:=StepX;
seStepY.Value:=StepY;
end;
end else begin
TabWidth.Value:=1;
TabHeight.Value:=1;
end;
cbSwap.Checked:=ifSwap in fImage.Data.Flags;
cbFlip.Checked:=ifFlip in fImage.Data.Flags;
ResetSwitches;
i:=fImage.Data.Hidden;
cbShow.ItemIndex:=fImage.Map.FlagIndex(i);
if i<>0 then if ifNotFlag in fImage.Data.Flags then i:=2 else i:=1;
cbVisible.ItemIndex:=i;
cbShow.Enabled:=i<>0;
k:=ifTextPanel in fImage.Data.Flags;
cbStaticText.Checked:=k;
cbServerRequest.Checked:=ifRequestText in fImage.Data.Flags;
cbServerRequest.Enabled:=k;
edText.Enabled:=k;
cbAutoFlip.Enabled:=k;
cbAutoFlip.Checked:=ifAutoFlip in fImage.Data.Flags;
if k then edText.Text:=fImage.Text else edText.Text:='';
Freeze:=False;
end;
procedure TImageEditor.SpeedButton1Click(Sender: TObject);
var
tag,dx,dy:integer;
begin
tag:=TComponent(Sender).Tag;
dx:=48*((tag and 3)-2);
dy:=24*((tag div 100)-2);
Freeze:=True;
PosX.Value:=PosX.Value+dx;
Freeze:=False;
PosY.Value:=PosY.Value+dy;
end;
procedure TImageEditor.PosXChange(Sender: TObject);
begin
if Freeze then exit;
fImage.Data.Position.x:=PosX.Value;
fImage.Data.Position.y:=PosY.Value;
fImage.Data.BaseLine:=PosZ.Value;
MainForm.MapFrame1.Invalidate;
end;
procedure TImageEditor.cbForegroundClick(Sender: TObject);
begin
if Freeze then exit;
PosZ.Enabled:=cbForeground.Checked;
fImage.SetForeground(cbForeground.Checked);
MainForm.MapFrame1.Invalidate;
end;
procedure TImageEditor.seStepYChange(Sender: TObject);
begin
if not Freeze then begin
if cbDouble.Checked then begin
Freeze:=True;
seStepX.value:=2*seStepY.Value;
Freeze:=False;
end;
fImage.SetArray(TabWidth.Value,TabHeight.Value,seStepX.Value,seStepY.Value);
MainForm.MapFrame1.Invalidate;
end;
end;
procedure TImageEditor.SpeedButton5Click(Sender: TObject);
begin
seStepX.Value:=seStepX.Value+48*(TComponent(Sender).Tag-1);
end;
procedure TImageEditor.cbDoubleClick(Sender: TObject);
begin
if cbDouble.Checked then begin
seStepX.Enabled:=False;
seStepX.Value:=2*seStepY.Value;
end else begin
seStepX.Enabled:=True;
end;
end;
procedure TImageEditor.SpeedButton6Click(Sender: TObject);
begin
seStepY.Value:=seStepY.Value+24*(TComponent(Sender).Tag-1);
end;
procedure TImageEditor.Image1MouseDown(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
MouseY:=y;
MouseX:=x;
MouseB:=Ord(Button)+1;
SetCaptureControl(TControl(Sender));
end;
procedure TImageEditor.Image1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
SetCaptureControl(nil);
MouseB:=0;
end;
procedure TImageEditor.Image1MouseMove(Sender: TObject; Shift: TShiftState;
X, Y: Integer);
begin
if MouseB=1 then begin
PosX.Value:=PosX.Value+(x-MouseX);
PosY.Value:=PosY.Value+(y-MouseY);
MouseX:=x;
MouseY:=y;
end;
end;
procedure TImageEditor.Image2MouseMove(Sender: TObject; Shift: TShiftState;
X, Y: Integer);
begin
if cbForeGround.Checked and (MouseB=1) then begin
PosZ.Value:=PosZ.Value+(y-MouseY);
MouseX:=x;
MouseY:=y;
end;
end;
procedure TImageEditor.cbSwapClick(Sender: TObject);
begin
if Freeze then exit;
if cbSwap.checked then
include(fImage.Data.Flags,ifSwap)
else
exclude(fImage.data.Flags,ifSwap);
MainForm.MapFrame1.Invalidate;
end;
procedure TImageEditor.cbFlipClick(Sender: TObject);
begin
if Freeze then exit;
if cbFlip.checked then
include(fImage.Data.Flags,ifFlip)
else
exclude(fImage.data.Flags,ifFlip);
MainForm.MapFrame1.Invalidate;
end;
procedure TImageEditor.ResetSwitches;
var
i:integer;
begin
i:=cbShow.ItemIndex;
cbShow.Clear;
cbShow.Items.AddStrings(MainForm.clbSwitches.Items);
if i<0 then i:=0;
if i<cbShow.Items.Count then cbShow.ItemIndex:=i;
end;
procedure TImageEditor.Image3MouseMove(Sender: TObject; Shift: TShiftState;
X, Y: Integer);
begin
if MouseB=1 then begin
OrgX.Value:=OrgX.Value+(x-MouseX);
OrgY.Value:=OrgY.Value+(y-MouseY);
MouseX:=x;
MouseY:=y;
end;
end;
procedure TImageEditor.OrgXChange(Sender: TObject);
begin
if Freeze then exit;
fDef.Origin.x:=OrgX.Value;
fDef.Origin.y:=OrgY.Value;
MainForm.MapFrame1.Invalidate;
MainForm.ImageTree1.acSaveTree.Enabled:=True;
end;
procedure TImageEditor.Button1Click(Sender: TObject);
var
x,y,u,v:integer;
o,p:TPoint;
begin
o:=MainForm.ImageTree1.ImageOrg(fImage);
p:=fImage.Map.Origin;
x:=PosX.Value+o.x-p.x;
y:=PosY.Value+o.y-p.y;
u:=(2*y+x) div 96;
v:=(2*y-x) div 96;
x:=48*(u-v)-o.x+p.x;
y:=24*(u+v)-o.y+p.y+24;
Freeze:=True;
PosX.Value:=x;
Freeze:=False;
PosY.Value:=y;
end;
procedure TImageEditor.cbVisibleChange(Sender: TObject);
begin
case cbVisible.ItemIndex of
0: begin fImage.Data.Hidden:=0; cbShow.Enabled:=False; end;
1: begin Exclude(fImage.Data.Flags,ifNotFlag); cbShow.Enabled:=True; end;
2: begin Include(fImage.Data.Flags,ifNotFlag); cbShow.Enabled:=True; end;
end;
end;
procedure TImageEditor.cbShowChange(Sender: TObject);
begin
if cbShow.Enabled then fImage.Data.Hidden:=fImage.Map.FlagMask(cbShow.ItemIndex);
end;
procedure TImageEditor.cbStaticTextClick(Sender: TObject);
var
ck:boolean;
begin
if Freeze then exit;
ck:=cbStaticText.Checked;
if ck then begin
Include(fImage.Data.Flags,ifTextPanel);
end else begin
Exclude(fImage.Data.Flags,ifTextPanel);
end;
cbServerRequest.Enabled:=ck;
edText.Enabled:=ck;
if ck then fImage.Text:=edText.Text;
end;
procedure TImageEditor.cbServerRequestClick(Sender: TObject);
begin
if cbServerRequest.Checked then
Include(fImage.Data.Flags,ifRequestText)
else
Exclude(fImage.Data.Flags,ifRequestText);
end;
procedure TImageEditor.edTextChange(Sender: TObject);
begin
if Freeze then exit;
fImage.Text:=edText.Text;
end;
procedure TImageEditor.cbAutoFlipClick(Sender: TObject);
begin
if Freeze then exit;
if cbAutoFlip.Checked then begin
Include(fImage.Data.Flags,ifAutoFlip)
end else begin
Exclude(fImage.Data.Flags,ifAutoFlip);
end;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -