📄 main.pas
字号:
var f : TFileStream;
IniFile : TIniFile;
begin
if (ActiveChild <> nil) and (Activechild.IsoMap<>NIL) then
begin
if (Activechild.IsoMap.ImageCount=0) then
begin
ShowIsoHint(1); // no image list
// ShowMessage('This file has no Image list. Load Image First');
Exit;
end;
IniFile := GetIniFile;
openDialog.filename := IniFile.ReadString('Defaults','MapPath',OpenDialog.filename);
IniFile.Free;
if (OpenDialog.Execute) then
begin
// LoadTiles(opendxg.filename,Sender);
IniFile := GetInifile;
IniFile.WriteString('Defaults','MapPath',OpenDialog.filename);
IniFile.Free; // we will be probably storing other stuff eventually but this will start us off
f := TFileStream.Create(Opendialog.FileName,fmOpenRead);
try
Activechild.IsoMap.LoadMapFromStream(f);
Activechild.IsoMap.DrawIsoMap;
FileSaveAs1.Enabled := true;
finally
f.free;
end
end;
end;
end;
procedure TMainForm.Images1Click(Sender: TObject);
begin
if (ActiveChild = nil) or (Activechild.IsoMap = nil) then
begin
Images1.Checked := False;
Images1.Enabled := False;
end
else
Images1.Checked := not Images1.Checked;
if (Images1.Checked) then Images.Show
else Images.Hide;
end;
procedure TMainForm.FileSaveItemClick(Sender: TObject);
var IniFile : TInifile;
begin
if (ActiveChild <> nil) and (Activechild.IsoMap<>nil) then
begin
if (ActiveChild.Named) then
begin
SaveDialog1.FileName := ActiveChild.Caption;
Activechild.IsoMap.SaveToFile(SaveDialog1.filename);
IniFile := GetInifile;
try
IniFile.WriteString('Defaults','Project',saveDialog1.filename);
finally
inifile.Free;
end;
end
else
FileSaveAsItemClick(sender);
end;
end;
procedure TMainForm.FileSaveAsItemClick(Sender: TObject);
var s : string;
begin
if (ActiveChild = nil) or (Activechild.IsoMap= nil) then exit;
if (Activechild.IsoMap.Ext = '.DXM') then
SaveDialog1.Filter := 'DirectX Isomap files|*.DXM';
if (Activechild.IsoMap.Ext = '.GLM') then
SaveDialog1.Filter := 'OpenGL Isomap Files|*.GLM';
SaveDialog1.FileName := ActiveChild.Caption;
if (Pos( Activechild.IsoMap.Ext,SaveDialog1.FileName)=0) then
SaveDialog1.FileName := SaveDialog1.FileName + Activechild.IsoMap.Ext;
if (SaveDialog1.Execute) then
begin
SaveDialog1.FileName := ChangeFileExt(SaveDialog1.FileName,Activechild.IsoMap.Ext);
ActiveChild.MapName := ExtractFileName(SaveDialog1.filename);
Activechild.IsoMap.SaveToFile(SaveDialog1.filename);
ReviseHistory(SaveDialog1.FileName);
ActiveChild.Named := True;
s := ChangeFileExt(SaveDialog1.FileName,'');
ActiveChild.Caption := s;
end;
end;
procedure TMainForm.GridOnOffClick(Sender: TObject);
begin
Activechild.IsoMap.FIsoMap.ShowGrid := GridOnOff.Down;
end;
procedure TMainForm.FormDestroy(Sender: TObject);
var IniFile : TInifile;
begin
Inifile := GetInifile;
SaveFormPosition(Self,inifile);
inifile.Free;
end;
procedure TMainForm.FormShow(Sender: TObject);
var Inifile : TIniFile;
s : string;
i : Integer;
begin
if (not Loaded) then
begin
Loaded := true;
if (ParamCount > 1) then
begin
for i := 1 to ParamCount do
begin
s:= ParamStr(i);
CreateMDIChild(s);
end;
Exit;
end;
IniFile := GetInifile;
try
LoadformPosition(Self,IniFile);
LoadProjectOnStartup1.Checked := IniFile.ReadBool('Defaults','Load Last Project',LoadProjectOnStartup1.Checked);
BlockUndoRedo1.Checked := IniFile.ReadBool('Defaults','Block UnDo Redo',BlockUndoRedo1.Checked);
if not LoadProjectOnStartup1.Checked then exit;
if IniFile.ReadString('Defaults','LastLoaded','') = 'ImagePath' then
begin
FileNew1Execute(Sender);
s := IniFile.ReadString('Defaults','ImagePath','');
if (s<>'') then
Loadtiles(s);
end
else
begin
s := IniFile.ReadString('Defaults','Project','');
if (s<>'') then
CreateMDIChild(s);
end;
finally
IniFile.Free;
end;
end;
end;
procedure TMainForm.SetCoord(const Value: string);
begin
StatusBar.Panels[1].Text := value;
end;
procedure TMainForm.SetModified(const Value: Boolean);
begin
if (Value) then
StatusBar.Panels[0].Text := 'Modified'
else
StatusBar.Panels[0].Text := ' '
end;
procedure TMainForm.SetTilesLoaded(const Value: Boolean);
begin
OverView1.Enabled := Value;
Images1.Enabled := Value;
layers1.enabled := value;
if (not Overview1.Checked) then OverView1Click(self);
if (not Images1.checked) then Images1Click(self);
if (not Layers1.Checked) then Layers1click(self);
end;
procedure TMainForm.ToolButton16Click(Sender: TObject);
begin
if (ActiveChild <> nil) and (Activechild.IsoMap<>nil) then
FActiveChild.SelectAll; // doing it this way allows undo
// Activechild.IsoMap.FIsoMap.AddAllState([tsSelected]);
end;
procedure TMainForm.SetOverViewOK(const Value: Boolean);
begin
OverView1.Enabled := (MDIChildCount>0);
Images1.Enabled := (MDIChildCount>0);
Layers1.Enabled := (MDIChildCount>0);
end;
procedure TMainForm.SetActiveChild(const Value: TMDIChild);
begin
if (Value<>nil) and (Value.IsoMap.ImageCount>0) then
begin
FActiveChild := Value;
if (FActivechild.IsoMap.ImageCount<>0) then
begin
SetTilesLoaded(True);
FileSaveItem.Enabled := FActiveChild.Named;
FileSaveAsItem.Enabled := True;
end;
end
else
begin
FActiveChild := nil;
SetTilesLoaded(False);
FileSaveItem.Enabled := False;
FileSaveAsItem.Enabled := False;
end;
end;
procedure TMainForm.Layers1Click(Sender: TObject);
begin
if (ActiveChild = nil) or (Activechild.IsoMap = nil) then
begin
layers1.Checked := False;
layers1.Enabled := False;
end
else
layers1.Checked := not layers1.Checked;
if (layers1.Checked) then Layers.Show
else Layers.Hide;
end;
procedure TMainForm.ToolButton15Click(Sender: TObject);
begin
if (ActiveChild <> nil) and (Activechild.IsoMap<>nil) then
FActiveChild.UnSelectAll;
// Activechild.IsoMap.FIsoMap.SubAllState([tsSelected]);
end;
procedure TMainForm.Diagnostics1Click(Sender: TObject);
begin
if (ActiveChild = nil) or (Activechild.IsoMap = nil) then
begin
diagnostics1.Checked := False;
diagnostics1.Enabled := False;
end
else
diagnostics1.Checked := not diagnostics1.Checked;
if (diagnostics1.Checked) then diagnostics.Show
else diagnostics.Hide;
end;
procedure TMainForm.LoadProjectOnStartup1Click(Sender: TObject);
var IniFile : tinifile;
begin
LoadProjectOnStartup1.Checked := not LoadProjectOnStartup1.Checked;
IniFile := GetIniFile;
IniFile.WriteBool('Defaults','Load Last Project',LoadProjectOnStartup1.Checked);
IniFile.Free;
end;
procedure TMainForm.BlockUndoRedo1Click(Sender: TObject);
var IniFile : tinifile;
begin
BlockUndoRedo1.Checked := not BlockUndoRedo1.Checked;
IniFile := GetIniFile;
IniFile.WriteBool('Defaults','Block UnDo Redo',BlockUndoRedo1.Checked);
IniFile.Free;
end;
procedure TMainForm.FormActivate(Sender: TObject);
var inifile : TInifile;
procedure SetMenuCaption(h : TMenuItem; i : Integer;s : string);
begin
if s<>'' then
begin
h.Caption := s;
h.Visible := True;
end
else
begin
h.Caption := '';
h.Visible := False;
end;
end;
begin
inifile := getinifile;
try
SetMenuCaption(H01,0,IniFile.ReadString('Defaults','History0',''));
SetMenuCaption(H11,1,IniFile.ReadString('Defaults','History1',''));
SetMenuCaption(H21,2,IniFile.ReadString('Defaults','History2',''));
SetMenuCaption(H31,3,IniFile.ReadString('Defaults','History3',''));
SetMenuCaption(H41,4,IniFile.ReadString('Defaults','History4',''));
SetMenuCaption(H51,5,IniFile.ReadString('Defaults','History5',''));
SetMenuCaption(H61,6,IniFile.ReadString('Defaults','History6',''));
SetMenuCaption(H71,7,IniFile.ReadString('Defaults','History7',''));
SetMenuCaption(H81,8,IniFile.ReadString('Defaults','History8',''));
SetMenuCaption(H91,9,inifile.ReadString('Defaults','History9',''));
SetMenuCaption(H101,10,IniFile.ReadString('Defaults','History10',''));
finally
inifile.free;
end;
end;
procedure TMainForm.ReviseHistory(NewestProject: string);
var IniFile : TIniFile;
i : integer;
s : string;
begin
IniFile := GetIniFile;
try
for i := 10 downto 1 do
begin
s := IniFile.ReadString('Defaults','History'+IntToStr(i-1),'');
if (s=NewestProject) then
s := '';
IniFile.WriteString('Defaults','History'+IntToStr(i),s);
end;
IniFile.WriteString('Defaults','History0',NewestProject);
IniFile.WriteString('Defaults','LastLoaded','Project');
IniFile.WriteString('Defaults','Project',NewestProject);
finally
IniFile.Free;
end;
FormActivate(self);
end;
procedure TMainForm.HistoryClick(Sender: TObject);
var s : string;
begin
if (Sender is TMenuItem) then
begin
s := TMenuItem(Sender).Caption;
if (Pos('&',s)>0) then Delete(s,Pos('&',s),1);
CreateMDIChild(s);
SaveDialog1.filename := s;
FileSaveAsItem.enabled := true;
FileSaveItem.Enabled := true;
end;
end;
procedure TMainForm.ToolButton19Click(Sender: TObject);
begin
if (ActiveChild <> nil) and (Activechild.IsoMap<>nil) then
FActiveChild.AddMetaInfo;
end;
procedure TMainForm.SetDirectXOptions(Sender: TObject);
begin
if (Sender is TMenuItem) then
TMenuItem(Sender).Checked := not TMenuItem(Sender).Checked;
if ActiveChild<>nil then
begin
ActiveChild.IsoMap.Enabled := False;
ActiveChild.IsoMap.Options := GetDXOptions;
ActiveChild.IsoMap.Enabled := True;
end;
end;
function TMainForm.GetDXOptions: TDXDrawOptions;
begin
Result := [];
if FullScreen1.Checked then Result := Result + [doFullScreen];
if NoWindowChange1.Checked then Result := Result + [doNoWindowChange];
if AllowReboot1.Checked then Result := Result + [doAllowReboot];
if WaitVBlank1.Checked then Result := Result + [doWaitVBlank];
if AllowPalett2561.checked then Result := Result + [doAllowPalette256];
if SystemMemory1.checked then Result := Result + [doSystemMemory];
if Stretch1.checked then Result := Result + [doStretch];
if Center1.checked then Result := Result + [doCenter];
if Flip1.checked then Result := Result + [doFlip];
if N3d1.checked then Result := Result + [do3d];
if DirectX7Mode1.checked then Result := Result + [doDirectX7Mode];
if RetainedMode1.checked then Result := Result + [doRetainedMode];
if Hardware1.checked then Result := Result + [doHardware];
if Select1.checked then Result := Result + [doSelectDriver];
if ZBuffer1.checked then Result := Result + [doZBuffer];
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -