📄 isomap1.pas
字号:
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 + -