📄 eerplacemodel.pas
字号:
ModalResult:=mrOK;
end;
procedure TEERPlaceModelForm.AddLinkModel(Link: Boolean);
var theList: TList;
i, j, Obj_id: integer;
theLinkedModel: TEERLinkedModel;
theObj: TEERObj;
xoff, yoff: integer;
theSrcTable, theDestTable: TEERTable;
begin
if(Model2Place<>nil)then
begin
theList:=TList.Create;
try
xoff:=10000;
yoff:=10000;
for i:=0 to Model2Place.ComponentCount-1 do
if(Model2Place.Components[i].ClassParent=TEERObj)then
if(TEERObj(Model2Place.Components[i]).Selected)then
begin
theList.Add(Model2Place.Components[i]);
if(xoff>TEERObj(Model2Place.Components[i]).Obj_X)then
xoff:=TEERObj(Model2Place.Components[i]).Obj_X;
if(yoff>TEERObj(Model2Place.Components[i]).Obj_Y)then
yoff:=TEERObj(Model2Place.Components[i]).Obj_Y;
end;
if(theList.Count>0)then
begin
theLinkedModel:=nil;
try
if(Link)then
begin
//--------------------------------------------------
//Create new TEERLinkedModel
theLinkedModel:=TEERLinkedModel.Create(EERModel);
theLinkedModel.ModelName:=Model2Place.GetModelName;
theLinkedModel.IDModel:=Model2Place.IDModel;
theLinkedModel.IsStoredInDB:=IsStoredInDB;
if(IsStoredInDB)then
begin
theLinkedModel.DriverName:=DMDB.CurrentDBConn.DriverName;
theLinkedModel.DBConnName:=DMDB.CurrentDBConn.Name;
theLinkedModel.HostCaption:=DMDB.CurrentDBConn.Params.Values['HostCaption'];
theLinkedModel.HostName:=DMDB.CurrentDBConn.Params.Values['HostName'];
theLinkedModel.Database:=DMDB.CurrentDBConn.Params.Values['Database'];
theLinkedModel.User:=DMDB.CurrentDBConn.Params.Values['User_Name'];
end
else
begin
theLinkedModel.ModelFilename:=
ExtractRelativePath(ExtractFilePath(Application.ExeName),
Model2Place.ModelFilename);
//To expand the RelativePath
//fname:=ExpandFileName(theLinkedModel.ModelFilename)
end;
EERModel.LinkedModels.Add(theLinkedModel);
end;
//--------------------------------------------------
//Check and add Datatypes
//--------------------------------------------------
//Add the Objects except Relations
for i:=0 to theList.Count-1 do
begin
if(TEERObj(theList[i]).ClassNameIs('TEERRegion'))then
begin
theObj:=EERModel.NewRegion(0, 0,
TEERRegion(theList[i]).Obj_W,
TEERRegion(theList[i]).Obj_H,
False);
Obj_id:=theObj.Obj_id;
TEERRegion(theObj).Assign(TEERRegion(theList[i]));
theObj.ParentEERModel:=EERModel;
theObj.Parent:=EERModel;
theObj.Obj_id:=Obj_id;
theObj.Obj_X:=TEERRegion(theList[i]).Obj_X+PlacePos.X-xoff;
theObj.Obj_Y:=TEERRegion(theList[i]).Obj_Y+PlacePos.Y-yoff;
if(Link)then
begin
theObj.IsLinkedObject:=True;
theObj.IDLinkedModel:=theLinkedModel.IDLinkedModel;
theObj.Obj_id_Linked:=TEERObj(theList[i]).Obj_id;
end;
theObj.RefreshObj;
end
else if(TEERObj(theList[i]).ClassNameIs('TEERImage'))then
begin
theObj:=EERModel.NewImage(0, 0,
TEERImage(theList[i]).Obj_W,
TEERImage(theList[i]).Obj_H,
False);
Obj_id:=theObj.Obj_id;
TEERImage(theObj).Assign(TEERImage(theList[i]));
theObj.ParentEERModel:=EERModel;
theObj.Parent:=EERModel;
theObj.Obj_id:=Obj_id;
theObj.Obj_X:=TEERImage(theList[i]).Obj_X+PlacePos.X-xoff;
theObj.Obj_Y:=TEERImage(theList[i]).Obj_Y+PlacePos.Y-yoff;
if(Link)then
begin
theObj.IsLinkedObject:=True;
theObj.IDLinkedModel:=theLinkedModel.IDLinkedModel;
theObj.Obj_id_Linked:=TEERObj(theList[i]).Obj_id;
end;
theObj.RefreshObj;
end
else if(TEERObj(theList[i]).ClassNameIs('TEERNote'))then
begin
theObj:=EERModel.NewNote(0, 0,
False);
Obj_id:=theObj.Obj_id;
TEERNote(theObj).Assign(TEERNote(theList[i]));
theObj.ParentEERModel:=EERModel;
theObj.Parent:=EERModel;
theObj.Obj_id:=Obj_id;
theObj.Obj_X:=TEERNote(theList[i]).Obj_X+PlacePos.X-xoff;
theObj.Obj_Y:=TEERNote(theList[i]).Obj_Y+PlacePos.Y-yoff;
if(Link)then
begin
theObj.IsLinkedObject:=True;
theObj.IDLinkedModel:=theLinkedModel.IDLinkedModel;
theObj.Obj_id_Linked:=TEERObj(theList[i]).Obj_id;
end;
theObj.RefreshObj;
end
else if(TEERObj(theList[i]).ClassNameIs('TEERTable'))then
begin
theObj:=EERModel.NewTable(0, 0,
False);
Obj_id:=theObj.Obj_id;
TEERTable(theObj).Assign(TEERTable(theList[i]));
theObj.ParentEERModel:=EERModel;
theObj.Parent:=EERModel;
theObj.Obj_id:=Obj_id;
theObj.Obj_X:=TEERTable(theList[i]).Obj_X+PlacePos.X-xoff;
theObj.Obj_Y:=TEERTable(theList[i]).Obj_Y+PlacePos.Y-yoff;
if(Link)then
begin
theObj.IsLinkedObject:=True;
theObj.IDLinkedModel:=theLinkedModel.IDLinkedModel;
//theObj.Obj_id_Linked:=TEERObj(theList[i]).Obj_id;
end;
// Add LinkedID either way to enable reestabling relations
theObj.Obj_id_Linked:=TEERObj(theList[i]).Obj_id;
TEERTable(theObj).RelStart.Clear;
TEERTable(theObj).RelEnd.Clear;
for j:=1 to 4 do
TEERTable(theObj).Rel[j].Clear;
theObj.RefreshObj;
end;
end;
//--------------------------------------------------
//Add Relations
for i:=0 to theList.Count-1 do
begin
if(TEERObj(theList[i]).ClassNameIs('TEERRel'))then
begin
theSrcTable:=EERModel.GetEERObjectByLinkedID(
TEERRel(theList[i]).SrcTbl.Obj_id);
theDestTable:=EERModel.GetEERObjectByLinkedID(
TEERRel(theList[i]).DestTbl.Obj_id);
//Only add Relation if source and dest table are in the model
if(theSrcTable<>nil)and(theDestTable<>nil)then
begin
theObj:=EERModel.NewRelation(TEERRel(theList[i]).RelKind,
theSrcTable, theDestTable, False);
Obj_id:=theObj.Obj_id;
TEERRel(theObj).Assign(TEERRel(theList[i]));
theObj.ParentEERModel:=EERModel;
theObj.Parent:=EERModel;
theObj.Obj_id:=Obj_id;
theObj.Obj_X:=TEERNote(theList[i]).Obj_X+PlacePos.X-xoff;
theObj.Obj_Y:=TEERNote(theList[i]).Obj_Y+PlacePos.Y-yoff;
TEERRel(theObj).SrcTbl:=theSrcTable;
TEERRel(theObj).DestTbl:=theDestTable;
if(Link)then
begin
theObj.IsLinkedObject:=True;
theObj.IDLinkedModel:=theLinkedModel.IDLinkedModel;
theObj.Obj_id_Linked:=TEERObj(theList[i]).Obj_id;
end;
theObj.RefreshObj;
end;
end;
end;
//If the model is not linked, remove temporary Obj_id_Linked from
//tables which were used while adding relations
if(Not(Link))then
for i:=0 to theList.Count-1 do
TEERObj(theList[i]).Obj_id_Linked:=0;
EERModel.ModelHasChanged;
EERModel.Refresh;
except
if(Link)then
theLinkedModel.Free;
end;
end
else
MessageDlg(DMMain.GetTranslatedMessage('You have to select at least one Object.', 243),
mtInformation, [mbOK], 0);
finally
theList.Free;
end;
end;
end;
procedure TEERPlaceModelForm.DisplayLinkedModels(EERModel: TEERModel);
var i, j: integer;
theLMNode, theTreeNode: TTreeNode;
begin
self.EERModel:=EERModel;
Caption:='Linked Models';
Menu:=nil;
LMPnl.Visible:=True;
Width:=LMPnl.Width;
Height:=LMPnl.Height;
DriverNameCBox.Items.Text:=DMDB.DatabaseTypes.Text;
for i:=0 to EERModel.LinkedModels.Count-1 do
begin
theLMNode:=LMTreeView.Items.Add(nil,
TEERLinkedModel(EERModel.LinkedModels[i]).ModelName);
theLMNode.Data:=EERModel.LinkedModels[i];
theLMNode.ImageIndex:=0;
for j:=0 to EERModel.ComponentCount-1 do
if(EERModel.Components[j].ClassParent=TEERObj)then
if(TEERObj(EERModel.Components[j]).IsLinkedObject)and
(TEERObj(EERModel.Components[j]).IDLinkedModel=
TEERLinkedModel(EERModel.LinkedModels[i]).IDLinkedModel)then
begin
theTreeNode:=LMTreeView.Items.AddChild(theLMNode,
TEERObj(EERModel.Components[j]).ObjName);
theTreeNode.Data:=EERModel.Components[j];
if(EERModel.Components[j] is TEERRegion)then
theTreeNode.ImageIndex:=1
else if(EERModel.Components[j] is TEERTable)then
theTreeNode.ImageIndex:=2
else if(EERModel.Components[j] is TEERRel)then
theTreeNode.ImageIndex:=3
else if(EERModel.Components[j] is TEERStoredProc)then
theTreeNode.ImageIndex:=4
else if(EERModel.Components[j] is TEERNote)then
theTreeNode.ImageIndex:=5
else if(EERModel.Components[j] is TEERImage)then
theTreeNode.ImageIndex:=6;
end;
end;
if(EERModel.LinkedModels.Count>0)then
LMTreeView.Selected:=LMTreeView.Items[0];
RefreshLinkedModelSettings;
end;
procedure TEERPlaceModelForm.RefreshLinkedModelSettings;
begin
if(LMTreeView.Selected<>nil)then
if(LMTreeView.Selected.Data<>nil)then
begin
if(TObject(LMTreeView.Selected.Data) is TEERLinkedModel)then
begin
if(Not(TEERLinkedModel(LMTreeView.Selected.Data).IsStoredInDB))then
begin
LinkedFromFileRBtn.Enabled:=True;
LinkedFromDBRBtn.Enabled:=True;
LinkedFromFileRBtn.Checked:=True;
FilenameEd.Enabled:=True;
FilenameEd.Text:=TEERLinkedModel(LMTreeView.Selected.Data).ModelFilename;
DBConnEd.Enabled:=False;
DBConnEd.Text:='';
DriverNameCBox.Enabled:=False;
DriverNameCBox.ItemIndex:=-1;
HostEd.Enabled:=False;
HostEd.Text:='';
IPEd.Enabled:=False;
IPEd.Text:='';
DBEd.Enabled:=False;
DBEd.Text:='';
ModelIDEd.Enabled:=False;
ModelIDEd.Text:='';
UserEd.Enabled:=False;
UserEd.Text:='';
end
else
begin
LinkedFromFileRBtn.Enabled:=True;
LinkedFromDBRBtn.Enabled:=True;
LinkedFromDBRBtn.Checked:=True;
FilenameEd.Enabled:=False;
FilenameEd.Text:='';
DBConnEd.Enabled:=True;
DBConnEd.Text:=TEERLinkedModel(LMTreeView.Selected.Data).DBConnName;
DriverNameCBox.Enabled:=True;
DriverNameCBox.ItemIndex:=DriverNameCBox.Items.IndexOf(TEERLinkedModel(LMTreeView.Selected.Data).DriverName);
HostEd.Enabled:=True;
HostEd.Text:=TEERLinkedModel(LMTreeView.Selected.Data).HostCaption;
IPEd.Enabled:=True;
IPEd.Text:=TEERLinkedModel(LMTreeView.Selected.Data).HostName;
DBEd.Enabled:=True;
DBEd.Text:=TEERLinkedModel(LMTreeView.Selected.Data).Database;
ModelIDEd.Enabled:=True;
ModelIDEd.Text:=IntToStr(TEERLinkedModel(LMTreeView.Selected.Data).IDModel);
UserEd.Enabled:=True;
UserEd.Text:=TEERLinkedModel(LMTreeView.Selected.Data).User;
end;
end
else
begin
LinkedFromFileRBtn.Enabled:=False;
LinkedFromDBRBtn.Enabled:=False;
FilenameEd.Enabled:=False;
FilenameEd.Text:='';
DBConnEd.Enabled:=False;
DBConnEd.Text:='';
DriverNameCBox.Enabled:=False;
DriverNameCBox.ItemIndex:=-1;
HostEd.Enabled:=False;
HostEd.Text:='';
IPEd.Enabled:=False;
IPEd.Text:='';
DBEd.Enabled:=False;
DBEd.Text:='';
ModelIDEd.Enabled:=False;
ModelIDEd.Text:='';
UserEd.Enabled:=False;
UserEd.Text:='';
end;
end;
end;
procedure TEERPlaceModelForm.ApplyLinkedModelSettings;
begin
if(LMTreeView.Selected<>nil)then
if(LMTreeView.Selected.Data<>nil)then
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -