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

📄 isomap1.pas

📁 N年前有个法国小组用Delphi写了一个2D网游(AD&D类型)
💻 PAS
📖 第 1 页 / 共 2 页
字号:
 Selected:=nil;
 fMapName:=OpenFileName(acFileOpen.Dialog);
 MapFrame1.LoadFromFile(fMapName);
 lbBack.Count:=MapFrame1.EditMap.ImageCount+MapFrame1.EditMap.ItemCount;
 //clbSwitches.Count:=MapFrame1.EditMap.FlagNames.Count;
 with MapFrame1.EditMap do begin
  clbSwitches.Items.Assign(FlagNames);
  for i:=0 to FlagNames.Count-1 do begin
   clbSwitches.Checked[i]:=(Flags and FlagMask(i))<>0;
  end;
 end;
 MiniView.ResetMap;
 MapFrame1.Invalidate;
end;

procedure TMainForm.lbBackDblClick(Sender: TObject);
var
 i,count:integer;
begin
 i:=lbBack.ItemIndex;
 if i<0 then exit;
 count:=MapFrame1.EditMap.ImageCount;
 if i<Count then
  Selected:=MapFrame1.EditMap.Images[i]
 else
  Selected:=MapFrame1.EditMap.Items[i-Count];
 EditImage(fSelected);
end;

procedure TMainForm.acListUpExecute(Sender: TObject);
var
 i:integer;
begin
 i:=lbBack.ItemIndex;
 if i<1 then exit;
 if i>=MapFrame1.EditMap.ImageCount then exit;
 MapFrame1.Exchange(i,i-1);
 lbBack.ItemIndex:=i-1;
end;

procedure TMainForm.acListDownExecute(Sender: TObject);
var
 i:integer;
begin
 i:=lbBack.ItemIndex;
 if i<0 then exit;
 if i>=MapFrame1.EditMap.ImageCount then exit;
 if i<lbBack.Count-1 then MapFrame1.Exchange(i,i+1);
 lbBack.ItemIndex:=i+1;
end;

procedure TMainForm.lbBackDragOver(Sender, Source: TObject; X, Y: Integer;
  State: TDragState; var Accept: Boolean);
var
 i:integer;
begin
 Accept:=(Source=lbBack);
 if Accept then begin
  i:=lbBack.ItemAtPos(Point(x,y),False);
  Accept:=(i>=0)and(i<>lbBack.ItemIndex);
 end;
end;

procedure TMainForm.lbBackDragDrop(Sender, Source: TObject; X, Y: Integer);
var
 i:integer;
begin
 i:=lbBack.ItemAtPos(Point(x,y),False);
 MapFrame1.Move(lbBack.ItemIndex,i);
 lbBack.Invalidate;
end;

procedure TMainForm.lbBackClick(Sender: TObject);
var
 i,count:integer;
 img:TEditImage;
begin
 count:=MapFrame1.EditMap.ImageCount;
 for i:=0 to count-1 do begin
  if lbBack.Selected[i] then
   MapFrame1.EditMap.Images[i].Mask:=$ff0000
  else
   MapFrame1.EditMap.Images[i].Mask:=0;
 end;
 for i:=0 to MapFrame1.EditMap.ItemCount-1 do begin
  if lbBack.Selected[i+count] then
   MapFrame1.EditMap.Items[i].Mask:=$ff0000
  else
   MapFrame1.EditMap.Items[i].Mask:=0;
 end;
 i:=lbBack.ItemIndex;
 if i<0 then begin
  Selected:=nil;
 end else begin
  count:=MapFrame1.EditMap.ImageCount;
  if i<count then
   img:=MapFrame1.EditMap.Images[i]
  else
   img:=MapFrame1.EditMap.Items[i-count];
  ImageTree1.Select(img.Data.Index);
  MapFrame1.ShowImage(img);
  if MapFrame1.Mode<>mmGrid then Selected:=img;
 end;
 MapFrame1.Invalidate;
 EXIT; //---------------------------
 i:=lbBack.ItemIndex;
 if i<0 then begin
  Selected:=nil;
  exit;
 end;
 count:=MapFrame1.EditMap.ImageCount;
 if i<count then
  img:=MapFrame1.EditMap.Images[i]
 else
  img:=MapFrame1.EditMap.Items[i-count];
(*
 if (lbBack.SelCount>0)and(img.Mask<>0) then begin
  img.Mask:=0;
  lbBack.Selected[i]:=False;
  if img=fSelected then Selected:=nil;
  MapFrame1.Invalidate;
  exit;
 end;
*)
// if lbBack.SelCount=1 then ClearSelection;
 ImageTree1.Select(img.Data.Index);
 MapFrame1.ShowImage(img);
 if MapFrame1.Mode<>mmGrid then Selected:=img;
 MapFrame1.Invalidate;
end;

procedure TMainForm.acListDelExecute(Sender: TObject);
var
 i:integer;
begin
 i:=lbBack.ItemIndex;
 if i<0 then exit;
 Selected:=nil;
 MapFrame1.Remove(i);
 lbBack.Count:=lbBack.Count-1;
 lbBack.ItemIndex:=-1;//i;
 //lbBackClick(Self);
end;

procedure TMainForm.FileSaveExecute(Sender: TObject);
begin
 if fMapName='' then
  FileSaveAs1.Execute
 else
  MapFrame1.EditMap.SaveToFile(fMapName);
 FileSave.Enabled:=False;
end;

procedure TMainForm.MapFrame1PaintBox1DragOver(Sender, Source: TObject; X,
  Y: Integer; State: TDragState; var Accept: Boolean);
begin
 Accept:=(Source=ImageTree1.TreeView)and(ImageTree1.TreeView.Selected.Data<>nil);
end;

procedure TMainForm.MapFrame1PaintBox1DragDrop(Sender, Source: TObject; X,
  Y: Integer);
var
 img:PImageDef;
 ox,oy,u,v:integer;
 o:TPoint;
 ei:TEditImage;
begin
 FileSave.Enabled:=True;
 img:=ImageTree1.TreeView.Selected.Data;

 o:=MapFrame1.EditMap.Origin;
 ox:=x-MapFrame1.ScrollX-o.x;
 oy:=y-MapFrame1.ScrollY-o.y;
 u:=(2*oy+ox) div 96;
 v:=(2*oy-ox) div 96;
 ox:=48*(u-v)-img.Origin.X+o.x;
 oy:=24*(u+v)-img.Origin.Y+o.y+24;

 ei:=MapFrame1.EditMap.AddImage(ox,oy,img.Index,img.Origin.y,[]);
 if cbForeGroundSelect.Down then ei.SetForeground(True);
 ClearSelection;
 Selected:=ei;

 lbBack.Count:=lbBack.Count+1;
 MapFrame1.Invalidate;
end;

procedure TMainForm.lbBackData(Control: TWinControl; Index: Integer;
  var Data: String);
var
 img:TEditImage;
begin
 if Index<MapFrame1.EditMap.ImageCount then begin
  img:=MapFrame1.EditMap.Images[Index];
  Data:=ImageTree1.ImageName(img);
 end else begin
  dec(Index,MapFrame1.EditMap.ImageCount);
  if Index>=MapFrame1.EditMap.ItemCount then begin
   Data:='';
  end else begin
   img:=MapFrame1.EditMap.Items[Index];
   Data:='['+ImageTree1.ImageName(img)+']';
  end;
 end;
end;

procedure TMainForm.acShowMiniMapExecute(Sender: TObject);
var
 b:boolean;
begin
 MiniView.ResetMap;
 b:=not acShowMiniMap.Checked;
 acShowMiniMap.Checked:=b;
 MiniView.Visible:=b;
end;

procedure TMainForm.acModesExecute(Sender: TObject);
begin
 MapFrame1.Mode:=TMapMode(TComponent(Sender).Tag);
 Selected:=nil;
 MapFrame1.Invalidate;
end;

procedure TMainForm.miMapPropsClick(Sender: TObject);
begin
 EditMapProps(MapFrame1.Handle, MapFrame1.EditMap);
 FileSave.Enabled:=True;
end;

procedure TMainForm.acShowBackExecute(Sender: TObject);
begin
 with TAction(Sender) do begin
  Checked:=not Checked;
  if Checked then
   MapFrame1.Options:=MapFrame1.Options+TShowOptions(byte(tag))
  else
   MapFrame1.Options:=MapFrame1.Options-TShowOptions(byte(tag));
 end;
 MapFrame1.Invalidate;
end;

procedure TMainForm.Dslectionner1Click(Sender: TObject);
begin
 MapFrame1.UnSelectAll;
end;

procedure TMainForm.TabControl1Change(Sender: TObject);
begin
 MapFrame1.Mode:=TMapMode(TabControl1.TabIndex);
// if fSelected<>nil then fSelected.Mask:=0;
 MapFrame1.Invalidate;
end;

procedure TMainForm.Inverserslection1Click(Sender: TObject);
begin
 MapFrame1.InvertSelection;
end;

procedure TMainForm.outslectionner1Click(Sender: TObject);
begin
 MapFrame1.SelectAll;
end;

procedure TMainForm.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
(*
 case key of
  VK_CONTROL: TabControl1.TabIndex:=0;
  VK_SHIFT  : TabControl1.TabIndex:=1;
  else exit;
 end;
 TabControl1Change(nil);
*) 
end;

procedure TMainForm.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
 if ImageTree1.acSaveTree.Enabled then begin
  case MessageDlg('Voulez-vous enregistrer les modifications dans l''arborescence d''images ?',mtConfirmation,[mbYes,mbNo,mbCancel],0) of
   mrYes    : CanClose:=ImageTree1.acSaveTree.Execute;
   mrCancel : CanClose:=False;
  end;
 end;
 if FileSave.Enabled then begin
  case MessageDlg('Voulez-vous enregistrer les modifications de cette carte ?',mtConfirmation,[mbYes,mbNo,mbCancel],0) of
   mrYes    : CanClose:=FileSave.Execute;
   mrCancel : CanClose:=False;
  end;
 end;
end;

procedure TMainForm.FileSaveAs1Accept(Sender: TObject);
begin
 fMapName:=OpenFileName(FileSaveAs1.Dialog);
 MapFrame1.EditMap.SaveToFile(fMapName);
end;

procedure TMainForm.acImgPropertiesExecute(Sender: TObject);
begin
 if (fSelected<>nil) then EditImage(fSelected);
end;

procedure TMainForm.acAddSwitchExecute(Sender: TObject);
var
 s:string;
begin
 FileSave.Enabled:=True;
 s:=InputBox('Ajouter','Commutateur','');
 if s<>'' then begin//clbSwitches.Items.Add(s);
  MapFrame1.EditMap.AddFlag(s);
  clbSwitches.Items.Add(s);
 end;
end;

procedure TMainForm.clbSwitchesDblClick(Sender: TObject);
var
 i:integer;
 s:string;
begin
 FileSave.Enabled:=True;
 i:=clbSwitches.ItemIndex;
 if i<0 then exit;
 s:=MapFrame1.EditMap.FlagNames[i];
 s:=InputBox('Modifier','Commutateur',s);
 if s<>'' then begin
  MapFrame1.EditMap.FlagNames[i]:=s;
  clbSwitches.Items[i]:=s;
 end;
end;

procedure TMainForm.lbBackMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
 if Shift * [ssShift,ssCtrl]=[] then ClearSelection;
end;

procedure TMainForm.ColorSelect1Accept(Sender: TObject);
begin
 fBackGround:=ColorSelect1.Dialog.Color;
 fBackGround:=fBackGround and $00ff00
             +fBackGround shr 16
             +fBackGround shl 16;
 MapFrame1.Invalidate;
end;

procedure TMainForm.Copier1Click(Sender: TObject);
var
 i,count:integer;
begin
 count:=lbBack.SelCount;
 if count=0 then exit;

 ClearObjectList(fClipboard);
 fCopyX:=MapFrame1.ScrollX;
 fCopyY:=MapFrame1.ScrollY;

 count:=MapFrame1.EditMap.ImageCount;
 for i:=0 to Count-1 do
  if lbBack.Selected[i] then fClipBoard.Add(MapFrame1.EditMap.Images[i].Copy);
 for i:=0 to MapFrame1.EditMap.ItemCount-1 do
  if lbBack.Selected[count+i] then fClipBoard.Add(MapFrame1.EditMap.Items[i].Copy);
end;

procedure TMainForm.Coller1Click(Sender: TObject);
var
 dx,dy,i:integer;
begin
 with MapFrame1.EditMap do begin
  for i:=0 to ImageCount-1 do Images[i].Mask:=0;
  for i:=0 to ItemCount-1 do Items[i].Mask:=0;
 end;
 dx:=fCopyX-MapFrame1.ScrollX;
 dy:=fCopyY-MapFrame1.ScrollY;
{
 fCopyX:=MapFrame1.ScrollX;
 fCopyY:=MapFrame1.ScrollY;
 if (dx=0)and(dy=0) then begin
  dx:=10;
  dy:=10;
  MapFrame1.ScrollX:=fCopyX+10;
  MapFrame1.ScrollY:=fCopyY+10;
 end;
} 
 for i:=0 to fClipBoard.Count-1 do begin
  TEditImage(fClipBoard[i]).Copy.Past(MapFrame1.EditMap,dx,dy);
 end;
 lbBack.Count:=lbBack.Count+fClipBoard.Count;
 MapFrame1.Invalidate;
end;

procedure TMainForm.acNewExecute(Sender: TObject);
begin
 if MessageDlg('Voulez-vous effacer la carte en cours ?',mtConfirmation,[mbYes,mbNo],0)=mrYes then begin
  MapFrame1.EditMap.Clear;
  MapFrame1.Invalidate;
  clbSwitches.Clear;
 end;
end;

procedure TMainForm.clbSwitchesData(Control: TWinControl; Index: Integer;
  var Data: String);
begin
 Data:=MapFrame1.EditMap.FlagNames[Index];
end;

procedure TMainForm.clbSwitchesClick(Sender: TObject);
var
 i,m,f:integer;
begin
 i:=clbSwitches.ItemIndex;
 if i<0 then exit;
 m:=MapFrame1.EditMap.FlagMask(i);
 f:=MapFrame1.EditMap.Flags;
 if clbSwitches.Checked[i] then f:=f or m else f:=f and (not m);
 MapFrame1.EditMap.Flags:=f;
 MapFrame1.Invalidate;
end;

end.

⌨️ 快捷键说明

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