Menüstruktur
Anbei ein PDF mit allen Menüpunkten in EPLAN.
Vielen Dank an Luc Morin (STLM) & Sergio Brinckhause (EPLAN Canada).
Anbei ein PDF mit allen Menüpunkten in EPLAN.
Vielen Dank an Luc Morin (STLM) & Sergio Brinckhause (EPLAN Canada).
Das Script fügt einen Menüpunkt im Seitennavigator hinzu. Mit dieser Action könnt ihr ein PDF von einer oder mehrer Seiten erstellen. Alle einzelnen PDFs werden im Zielordner gespeichert. Es werden auch Ordner für Strukturkennzeichen erzeugt.
using System.Diagnostics;
using System.Windows.Forms;
using Eplan.EplApi.ApplicationFramework;
using Eplan.EplApi.Base;
using Eplan.EplApi.Scripting;
public class PagePdf
{
[DeclareMenu]
public void MenuFunction()
{
Eplan.EplApi.Gui.ContextMenu oMenu =
new Eplan.EplApi.Gui.ContextMenu();
Eplan.EplApi.Gui.ContextMenuLocation oLocation =
new Eplan.EplApi.Gui.ContextMenuLocation(
"PmPageObjectTreeDialog",
"1007"
);
oMenu.AddMenuItem(
oLocation,
"PDF erstellen",
"PagePdf",
true,
false
);
}
[DeclareAction("PagePdf")]
public void PagePdfVoid()
{
FolderBrowserDialog fbd = new FolderBrowserDialog();
CommandLineInterpreter oCLI = new CommandLineInterpreter();
ActionCallingContext acc = new ActionCallingContext();
if (fbd.ShowDialog() != DialogResult.OK)
{
return;
}
Progress oProgress = new Progress("SimpleProgress");
oProgress.SetAllowCancel(true);
oProgress.SetAskOnCancel(true);
oProgress.BeginPart(100, "");
oProgress.ShowImmediately();
try
{
string strPages = string.Empty;
acc.AddParameter("TYPE", "PAGES");
oCLI.Execute("selectionset", acc);
acc.GetParameter("PAGES", ref strPages);
foreach (string CurrentPage in strPages.Split(';'))
{
if (!oProgress.Canceled())
{
acc.AddParameter("TYPE", "PDFPAGESSCHEME");
acc.AddParameter("PAGENAME", CurrentPage);
acc.AddParameter("EXPORTFILE", fbd.SelectedPath + @"\" + CurrentPage);
acc.AddParameter("EXPORTSCHEME", "EPLAN_default_value");
oCLI.Execute("export", acc);
}
else
{
oProgress.EndPart(true);
return;
}
}
Process.Start(fbd.SelectedPath);
oProgress.EndPart(true);
}
catch (System.Exception ex)
{
oProgress.EndPart(true);
MessageBox.Show("Error", ex.Message, MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
}
Frank Schöneck, 01.06.2012 V2.0.0
- Eplan eigene Action für CompressDataBase verwendet.
- Script kann geladen oder ausgeführt werden.
Danke nochmal an Frank!
Anbei ein kleines Script, welches unter Dienstprogramme/Artikel einen Menüpunkt “Artikeldatenbank komprimieren” hinzufügt. Das ganze funktioniert nur in Verbindung einer Access-Artikeldatenbank (Eplan-Standard) funktioniert.
Wenn die Komprimierung durchgeführt wird darf kein anderer Anwender auf die Datenbank zugreifen.
Durch die Kompression verringert sich die Größe enorm und die Geschwindigkeit nimmt zu :w00t:
Vielen Dank an FrankS!
' CompressPartsDatabase, Version 2.0.0, vom 01.06.2012
'
' Führt eine Komprimierung der aktuell eingestellten Artikeldatenbank durch.
' Es wird eine Sicherheitskopie mit der Dateiendung '.Backup' angelegt.
'
' Copyright by Frank Schöneck, 2009
' letzte Änderung: Frank Schöneck, 31.08.2009 V1.0.0
' Frank Schöneck, 01.06.2012 V2.0.0, -Eplan eigene Action für CompressDataBase verwendet.
' -Script kann geladen oder ausgeführt werden.
'
' für Eplan Electric P8, ab V2.1.6
'
Imports System.IO
Public Class CompressPartsDatabase
_
Public Sub MyFunction()
CompressPartsDatabase()
End Sub
_
Public Sub CompressPartsDatabase_Menu()
Dim oMenu As New Eplan.EplApi.GUI.Menu()
oMenu.AddMenuItem("Artikeldatenbank komprimieren...", "CompressPartsDatabase", "Es wird die aktuell eingestellte Artikeldatenbank komprimiert", 35177, 1, True, False)
End Sub
_
Public Sub CompressPartsDatabase()
Dim oSettings As New Eplan.EplApi.Base.Settings()
Dim DatabaseName As String
Dim DatabaseNameBackup As String
Dim Result As DialogResult
Dim boReturn As Boolean
Dim NewLine As String = Environment.NewLine
Dim Meldung As String
'Einstellung 'Artikeldatenbank' auslesen
DatabaseName = oSettings.getStringSetting("USER.PartsManagementGui.Database", 0)
'Variablen auslesen und ersetzen
DatabaseName = PathMap.SubstitutePath(DatabaseName)
'Namen der Backup-Datei festlegen
DatabaseNameBackup = DatabaseName & ".Backup"
'Sicherheitsabfrage
Meldung = "Soll die folgende Artikeldatenbank komprimiert werden?" & NewLine
Meldung &= NewLine
Meldung &= "'" & DatabaseName & "'" & NewLine
Meldung &= NewLine
Meldung &= "(Es wird im gleichen Ordner eine Sicherheitskopie mit der Dateiendung 'Backup' angelegt.)" & NewLine
Result = MessageBox.Show(Meldung, "CompressPartsDatabase", MessageBoxButtons.YesNo, MessageBoxIcon.Question)
If Result = System.Windows.Forms.DialogResult.Yes Then
'Cursur Warten anzeigen
System.Windows.Forms.Cursor.Current = System.Windows.Forms.Cursors.WaitCursor
'Artikeldatenbank komprimieren
boReturn = CompressParts(DatabaseName, DatabaseNameBackup)
'Cursor wieder Standard
System.Windows.Forms.Cursor.Current = System.Windows.Forms.Cursors.Default
'Ergebnismeldung anzeigen
If boReturn = True Then
Meldung = "Das komprimieren der Artikeldatenbank wurde erfolgreich durchgeführt." & NewLine
Meldung &= NewLine
Meldung &= "Dateigröße vorher: " & GetFileSize(DatabaseNameBackup) & NewLine
Meldung &= "Dateigröße nachher: " & GetFileSize(DatabaseName) & NewLine
MessageBox.Show(Meldung, "CompressPartsDatabase, Information", MessageBoxButtons.OK, MessageBoxIcon.Information)
ElseIf boReturn = False Then
MessageBox.Show("Das komprimieren der Artikeldatenbank konnte nicht erfolgreich durchgeführt werden!", "CompressPartsDatabase, Fehler", MessageBoxButtons.OK, MessageBoxIcon.Error)
End If
End If
End Sub
'Artikeldatenbank komprimieren
Private Function CompressParts(ByVal DatabaseFilename As String, ByVal DatabaseFilenameBackup As String) As Boolean
Try
Dim cmdLineItp As New CommandLineInterpreter()
Dim ACC As New ActionCallingContext
Dim overwrite As Boolean = True
'Backup anlegen
File.Copy(DatabaseFilename, DatabaseFilenameBackup, overwrite)
'PartsDatabase komprimieren
ACC.AddParameter("Database", DatabaseFilename)
cmdLineItp.Execute("XPamCompactDatabase", ACC)
Return True
Catch ex As Exception
MessageBox.Show(ex.InnerException.ToString(), "CompressParts, Fehler", MessageBoxButtons.OK, MessageBoxIcon.Error)
Return False
End Try
Return False
End Function
'Anzeige der Dateigröße formatieren
Private Function GetFileSize(ByVal path As String) As String
Dim myFile As FileInfo
Dim mySize As Single
Try
myFile = New FileInfo(path)
If Not myFile.Exists Then
mySize = 0
Else
mySize = myFile.Length
End If
Select Case mySize
Case 0 To 1023
Return Microsoft.VisualBasic.Format(mySize, "#,###") & " Bytes"
Case 1024 To 1048575
Return Microsoft.VisualBasic.Format(mySize / 1024, "#,###0.00") & " KB (" & Microsoft.VisualBasic.Format(mySize, "#,###") & " Bytes)"
Case 1048576 To 1043741823
Return Microsoft.VisualBasic.Format(mySize / 1024 ^ 2, "#,###0.00") & " MB (" & Microsoft.VisualBasic.Format(mySize, "#,###") & " Bytes)"
Case Is > 1043741824
Return Microsoft.VisualBasic.Format(mySize / 1024 ^ 3, "#,###0.00") & " GB (" & Microsoft.VisualBasic.Format(mySize, "#,###") & " Bytes)"
End Select
Return "0 bytes"
Catch ex As Exception
Return "0 bytes"
End Try
End Function
End Class
Mit diesem Script könnt ihr in EPLAN Bookmarks (Lesezeichen) für Projekte anlegen, welche ihr des öfteren benötigt.
Vielen Dank an FrankS für die Umsetzung!
Changelog:
04.06.2012, V1.1.0
- Eplan Versionsnummer als Unterscheidung mit aufgenommen, Danke an Marco für den Hinweis.
05.06.2012, V1.1.1
- Eplan Versionsnummer wird nun aus EPLAN.exe (ab V2.1) oder W3U.exe (bis V2.0) ermittelt.
21.08.2012, V2.0.0
- Lesezeichen Tooltip zeigt nun den kompletten Pfad des Projektes an.
- Es wird nun das vorhanden sein der Projekte getestet und ggf. das Lesezeichen grau dargestellt, das Lesezeichen bleibt aber weiter aktiv (geht im ListView nicht anders)
- Neuer Menüpunkt ‘Akualisieren (F5)’ ins Kontextmenü eingebaut (Taste F5 geht nicht im Scripting)
- Menüpunkt “Lesezeichen” ist nun unter “Schließen” im Projekt-Menü gewandert. (Wegen Select-Versionen)
08.10.2012, V2.1.0
- Lesezeichen können nun nach oben/unten verschoben werden.
Noch ein Beispiel um mit Settings zu arbeiten.
Hier wird die Location (Position) des Fensters gespeichert.
Ich habe hier bewusst mit stillen Exceptions gearbeitet um sicherzustellen, dass der Form auch geschlossen werden kann.
Leider konnte ich nicht mit numerischen Settings arbeiten, denke das diese zwar als INT in der Dokumentation beschrieben werden, aber EPLAN sie als UINT verarbeitet. Negative Werte sind nicht möglich sind (z.B. zweiter Bildschirm links: X < 0)
private void SettingsGet()
{
if (!oSettings.ExistSetting(SettingPathWindowLocation)) // Create setting
{
oSettings.AddStringSetting(
SettingPathWindowLocation,
new string[] {},
new string[] {},
"Location of the form",
new string[] {},
ISettings.CreationFlag.Insert
);
}
else // Get setting
{
try
{
this.Location = new Point(
Convert.ToInt32(oSettings.GetStringSetting(SettingPathWindowLocation, 0)),
Convert.ToInt32(oSettings.GetStringSetting(SettingPathWindowLocation, 1))
);
Refresh();
}
catch (System.Exception ex)
{
//MessageBox.Show(ex.Message);
}
}
}
private void SettingsSet()
{
try
{
oSettings.SetStringSetting(SettingPathWindowLocation, this.Location.X.ToString(), 0);
oSettings.SetStringSetting(SettingPathWindowLocation, this.Location.Y.ToString(), 1);
}
catch (System.Exception ex)
{
//MessageBox.Show(ex.Message);
}
}