📄 eerplacemodel.pas
字号:
unit EERPlaceModel;
interface
uses
SysUtils, Types, Classes, Variants, QTypes, QGraphics, QControls, QForms,
QDialogs, QStdCtrls, QCheckLst, QExtCtrls, QButtons, EERModel, QMenus,
QComCtrls, QImgList;
type
TEERPlaceModelForm = class(TForm)
PlaceMainMenu: TMainMenu;
PlaceOptions1: TMenuItem;
LoadModelfromFileMI: TMenuItem;
LoadModelfromDatabase1: TMenuItem;
Selection1: TMenuItem;
SelectAllMI: TMenuItem;
N3: TMenuItem;
RegionsMI: TMenuItem;
DeselectAllMI: TMenuItem;
PlaceMI: TMenuItem;
N2: TMenuItem;
AbortMI: TMenuItem;
AddModelMI: TMenuItem;
LinkModelMI: TMenuItem;
LMPnl: TPanel;
PageControlTitleShape: TShape;
PageControlTitlePnl: TPanel;
PageControlTitleLbl: TLabel;
LMTreeView: TTreeView;
SettingsGroupBox: TGroupBox;
FNameLbl: TLabel;
FilenameEd: TEdit;
LMImgList: TImageList;
LinkedFromFileRBtn: TRadioButton;
LinkedFromDBRBtn: TRadioButton;
Bevel1: TBevel;
DBConnLbl: TLabel;
DBConnEd: TEdit;
DriverLbl: TLabel;
DriverNameCBox: TComboBox;
HostLbl: TLabel;
HostEd: TEdit;
IPEd: TEdit;
IPLbl: TLabel;
DBLbl: TLabel;
DBEd: TEdit;
Label1: TLabel;
ModelIDEd: TEdit;
UserLbl: TLabel;
UserEd: TEdit;
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure FormShow(Sender: TObject);
function SetData(EERModel: TEERModel; P: TPoint; PlaceFrom: integer): Boolean;
function GetFileNameByOpenDialog: string;
function LoadModelfromFile: Boolean;
procedure LoadModelfromFileMIClick(Sender: TObject);
function LoadModelfromDB: Boolean;
function LoadModelfromLibrary: Boolean;
procedure RefreshModel;
procedure RegionsMIShow(Sender: TObject);
procedure SelectAllMIClick(Sender: TObject);
procedure SelectAllMIShow(Sender: TObject);
procedure AbortMIClick(Sender: TObject);
procedure AddModelMIClick(Sender: TObject);
procedure LinkModelMIClick(Sender: TObject);
procedure AddLinkModel(Link: Boolean);
procedure DisplayLinkedModels(EERModel: TEERModel);
procedure RefreshLinkedModelSettings;
procedure ApplyLinkedModelSettings;
procedure LMTreeViewChange(Sender: TObject; Node: TTreeNode);
procedure LinkedFromFileRBtnClick(Sender: TObject);
procedure LMTreeViewChanging(Sender: TObject; Node: TTreeNode;
var AllowChange: Boolean);
procedure RefreshLinkedModel(EERModel: TEERModel; IDLinkedModel: integer = -1);
procedure RefreshLinkedModelByID(IDLinkedModel: integer);
private
{ Private declarations }
EERModel, Model2Place: TEERModel;
PlacePos: TPoint;
IsStoredInDB: Boolean;
public
{ Public declarations }
end;
const
PlaceFromFile=1;
PlaceFromDB=1;
PlaceFromLibrary=1;
var
EERPlaceModelForm: TEERPlaceModelForm;
implementation
uses MainDM, GUIDM, DBDM, EERStoreInDatabase;
{$R *.xfm}
procedure TEERPlaceModelForm.FormCreate(Sender: TObject);
begin
DMMain.InitForm(self);
Model2Place:=nil;
IsStoredInDB:=False;
Width:=700;
Height:=550;
end;
procedure TEERPlaceModelForm.FormDestroy(Sender: TObject);
begin
{if(Model2Place<>nil)then
Model2Place.Free;}
end;
procedure TEERPlaceModelForm.FormClose(Sender: TObject;
var Action: TCloseAction);
begin
//Action:=caFree;
ApplyLinkedModelSettings;
end;
procedure TEERPlaceModelForm.FormShow(Sender: TObject);
begin
//Because of CLX Bug
AutoScroll:=True;
end;
function TEERPlaceModelForm.SetData(EERModel: TEERModel; P: TPoint; PlaceFrom: integer): Boolean;
begin
SetData:=True;
self.EERModel:=EERModel;
self.PlacePos:=P;
if(PlaceFrom=PlaceFromFile)then
begin
if(Not(LoadModelfromFile))then
SetData:=False;
end
else if(PlaceFrom=PlaceFromDB)then
begin
if(Not(LoadModelfromDB))then
SetData:=False;
end
else if(PlaceFrom=PlaceFromLibrary)then
begin
if(Not(LoadModelfromLibrary))then
SetData:=False;
end;
end;
function TEERPlaceModelForm.GetFileNameByOpenDialog: string;
var theOpenDialog: TOpenDialog;
begin
theOpenDialog:=TOpenDialog.Create(nil);
try
{$IFDEF MSWINDOWS}
//On Windows use native Win32 Open Dlg
theOpenDialog.UseNativeDialog:=True;
theOpenDialog.OnShow:=DMMain.OnOpenSaveDlgShow;
{$ENDIF}
theOpenDialog.Title:=DMMain.GetTranslatedMessage('Open a Model ...', 9);
theOpenDialog.DefaultExt:='xml';
theOpenDialog.Filter:=DMMain.GetTranslatedMessage('DB-Model files (*.xml)|*.xml', 10);
theOpenDialog.Width:=600;
theOpenDialog.Height:=450;
if(DirectoryExists(DMGUI.RecentOpenFileDir))then
theOpenDialog.InitialDir:=DMGUI.RecentOpenFileDir
else
theOpenDialog.InitialDir:='';
if(theOpenDialog.Execute)then
GetFileNameByOpenDialog:=theOpenDialog.FileName
else
GetFileNameByOpenDialog:='';
finally
theOpenDialog.Free;
end;
end;
function TEERPlaceModelForm.LoadModelfromFile: Boolean;
var fname: string;
begin
LoadModelfromFile:=False;
fname:=GetFileNameByOpenDialog;
if(fname<>'')then
begin
if(Model2Place<>nil)then
Model2Place.Free;
Model2Place:=TEERModel.Create(self);
Model2Place.LoadFromFile2(fname);
Model2Place.ReadOnly:=True;
//One must not add a model to itself
if(Model2Place.ModelFilename=EERModel.ModelFilename)then
begin
MessageDlg('You must not place a Model on itself.',
mtError, [mbOK], 0);
Model2Place.Free;
Model2Place:=nil;
end
else
begin
IsStoredInDB:=False;
RefreshModel;
DMGUI.RecentOpenFileDir:=ExtractFilePath(fname);
end;
if(Visible)then
SetFocus;
LoadModelfromFile:=True;
end;
end;
function TEERPlaceModelForm.LoadModelfromDB: Boolean;
var EERStoreInDatabaseForm: TEERStoreInDatabaseForm;
begin
LoadModelfromDB:=False;
EERStoreInDatabaseForm:=TEERStoreInDatabaseForm.Create(self);
try
if(Model2Place<>nil)then
Model2Place.Free;
Model2Place:=TEERModel.Create(self);
if(EERStoreInDatabaseForm.SetData(Model2Place, False))then
if(EERStoreInDatabaseForm.ShowModal=mrOk)then
begin
IsStoredInDB:=True;
RefreshModel;
if(Visible)then
SetFocus;
LoadModelfromDB:=True;
end;
finally
EERStoreInDatabaseForm.Free;
end;
end;
function TEERPlaceModelForm.LoadModelfromLibrary: Boolean;
begin
LoadModelfromLibrary:=False;
DMMain.LoadValueFromSettingsIniFile('OnlineLibrary', 'HostName', 'onlinelib.fabforce.com');
DMMain.LoadValueFromSettingsIniFile('OnlineLibrary', 'Database', 'onlinelib');
DMMain.LoadValueFromSettingsIniFile('OnlineLibrary', 'User_Name', 'onlinelib');
DMMain.LoadValueFromSettingsIniFile('OnlineLibrary', 'Password', 'ol32!pw');
end;
procedure TEERPlaceModelForm.LoadModelfromFileMIClick(Sender: TObject);
begin
LoadModelfromFile;
end;
procedure TEERPlaceModelForm.RefreshModel;
var theList: TList;
i: integer;
theMenuItem: TMenuItem;
begin
if(Model2Place=nil)then
Exit;
theList:=TList.Create;
try
Model2Place.GetEERObjectList([EERRegion], theList, False);
for i:=0 to RegionsMI.Count-1 do
begin
theMenuItem:=RegionsMI[i];
RegionsMI.Delete(i);
theMenuItem.Free;
end;
for i:=0 to theList.Count-1 do
begin
theMenuItem:=TMenuItem.Create(self);
theMenuItem.Name:='RegionMI'+IntToStr(i);
theMenuItem.Caption:=TEERRegion(theList[i]).ObjName;
theMenuItem.OnClick:=RegionsMIShow;
theMenuItem.Tag:=TEERRegion(theList[i]).Obj_id;
RegionsMI.Add(theMenuItem);
end;
finally
theList.Free;
end;
end;
procedure TEERPlaceModelForm.RegionsMIShow(Sender: TObject);
var theEERRegion: TEERRegion;
theList: TList;
i: integer;
begin
theList:=TList.Create;
try
theEERRegion:=Model2Place.GetEERObjectByID(TMenuItem(Sender).Tag);
theEERRegion.GetEERObjsInRegion([EERNote, EERRegion, EERRelation, EERTable, EERImage], theList);
for i:=0 to theList.Count-1 do
TEERObj(theList[i]).SetSelected(True);
theEERRegion.SetSelected(True);
Model2Place.Refresh;
finally
theList.Free;
end;
end;
procedure TEERPlaceModelForm.SelectAllMIClick(Sender: TObject);
var i: integer;
begin
if(Model2Place<>nil)then
begin
for i:=0 to Model2Place.ComponentCount-1 do
if(Model2Place.Components[i].ClassParent=TEERObj)then
TEERObj(Model2Place.Components[i]).SetSelected(TMenuItem(Sender).Tag=1);
Model2Place.Refresh;
end;
end;
procedure TEERPlaceModelForm.SelectAllMIShow(Sender: TObject);
begin
TMenuItem(Sender).Enabled:=(Model2Place<>nil);
end;
procedure TEERPlaceModelForm.AbortMIClick(Sender: TObject);
begin
ModalResult:=mrAbort;
end;
procedure TEERPlaceModelForm.AddModelMIClick(Sender: TObject);
begin
AddLinkModel(False);
ModalResult:=mrOK;
end;
procedure TEERPlaceModelForm.LinkModelMIClick(Sender: TObject);
begin
AddLinkModel(True);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -