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

📄 imageproperties.pas

📁 N年前有个法国小组用Delphi写了一个2D网游(AD&D类型)
💻 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 + -