How to open multiple files in the same window tabs
Photo is "dwg trueview 2015"
Thank you very much

Moderators: SDS, support, admin
Code: Select all
uses
..., CADImage, DWG, DXF, sgDrawingNavigator, Contnrs;
type
TsgDrawingNavigatorClass = class of TsgDrawingNavigator;
TForm1 = class(TForm)
...
OpenPictureDialog1: TOpenPictureDialog;
pcDrawings: TPageControl;
tcLayouts: TTabControl;
...
MainMenu1: TMainMenu;
miFile: TMenuItem;
miOpen: TMenuItem;
miClose: TMenuItem;
...
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure FormCreate(Sender: TObject);
procedure miOpenClick(Sender: TObject);
procedure miCloseClick(Sender: TObject);
procedure pcDrawingsChange(Sender: TObject);
procedure tcLayoutsChange(Sender: TObject);
private
FDNavigator: TsgDrawingNavigator;
FCADImageList: TObjectList;
FCurrentDrawing: TsgCADImage;
procedure CreateNavigator(var ANavigator: TsgDrawingNavigator; const ANavigatorClass: TsgDrawingNavigatorClass; const AParent: TWinControl);
procedure CreateFileTab(AFileName: string);
procedure ViewDrawingLayouts(AIndex: Integer);
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
FCADImageList := TObjectList.Create(True);
tcLayouts.Visible := False;
end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
if FCADImageList.Count > 0 then
FCADImageList.Free;
end;
procedure TForm1.miOpenClick(Sender: TObject);
var
vFileExt: string;
vCADImage: TsgCADImage;
begin
if OpenPictureDialog1.Execute then
begin
vFileExt := AnsiLowerCase(ExtractFileExt(OpenPictureDialog1.FileName));
if (vFileExt = '.dxf') then
vCADImage := TsgCADdxfImage.Create;
if (vFileExt = '.dwg') then
vCADImage := TsgDWGImage.Create;
vCADImage.LoadFromFile(OpenPictureDialog1.FileName);
FCADImageList.Add(vCADImage);
CreateFileTab(ExtractFileName(OpenPictureDialog1.FileName));
end;
end;
procedure TForm1.miCloseClick(Sender: TObject);
begin
// Delete a TsgCADImage instance drawn on the active page from the list
FCADImageList.Delete(pcDrawings.ActivePageIndex);
FDNavigator.Picture.Graphic := nil;
// Close the active page
pcDrawings.ActivePage.Free;
// If there are no drawings opened, clear the layout tabs
if FCADImageList.Count = 0 then
begin
tcLayouts.Tabs.Clear;
tcLayouts.Visible := False
end
// otherwise, show layouts of the previous drawing
else
ViewDrawingLayouts(pcDrawings.ActivePageIndex);
end;
procedure TForm1.CreateFileTab(AFileName: string);
var
T: TTabSheet;
begin
T := TTabSheet.Create(pcDrawings);
with T do
begin
Visible := True;
Caption := AFileName;
PageControl := pcDrawings;
end;
PageControl1.ActivePage := T;
CreateNavigator(FDNavigator, TsgDrawingNavigator, pcDrawings.ActivePage);
ViewDrawingLayouts(pcDrawings.ActivePageIndex);
end;
procedure TForm1.CreateNavigator(var ANavigator: TsgDrawingNavigator; const ANavigatorClass: TsgDrawingNavigatorClass; const AParent: TWinControl);
begin
ANavigator := ANavigatorClass.Create(Self);
ANavigator.Parent := AParent;
ANavigator.Align := alClient;
ANavigator.AutoFocus := True;
ANavigator.SysMenuIconsVisible := False;
ANavigator.RectZooming := False;
ANavigator.DoubleBuffered := True;
ANavigator.Color := clWhite;
ANavigator.ClipRectangle := False;
end;
procedure TForm1.ViewDrawingLayouts(AIndex: Integer);
var
I: Integer;
begin
FCurrentDrawing := TsgCADImage(FCADImageList.Items[AIndex]);
tcLayouts.Tabs.Clear;
for I := 0 to TsgCADImage(FCADImageList.Items[AIndex]).LayoutsCount - 1 do
tcLayouts.Tabs.Add(TsgCADImage(FCADImageList.Items[AIndex]).Layouts[I].Name);
tcLayouts.Visible := True;
tcLayouts.TabIndex := 0;
FDNavigator.Picture.Assign(FCurrentDrawing);
end;
procedure TForm1.tcLayoutsChange(Sender: TObject);
begin
if tcLayouts.TabIndex >= 0 then
TsgCADImage(FDNavigator.Picture.Graphic).CurrentLayout := FCurrentDrawing.Layouts[tcLayouts.TabIndex];
end;
procedure TForm1.pcDrawingsChange(Sender: TObject);
begin
ViewDrawingLayouts(pcDrawings.ActivePageIndex);
end;
end.