PdfExportAssistent
Frank Schöneck hat schon viele Scripte der EPLAN-Community bereitgestellt. Nun hat er ein schönes GUI-Script erstellt um den automatischen PDF-Export noch besser zu automatisieren.
Vielen Dank für die tolle Umsetzung!
Frank Schöneck hat schon viele Scripte der EPLAN-Community bereitgestellt. Nun hat er ein schönes GUI-Script erstellt um den automatischen PDF-Export noch besser zu automatisieren.
Vielen Dank für die tolle Umsetzung!
Das kleine Script erlaubt es, die unterdrückten Meldungen wieder einzeln zu aktivieren.
Vielen Dank an FrankS für die Umsetzung!
// DeciderDisplayEnable, Version 1.0.0, vom 25.09.2013
//
// Zeigt alle Unterdrückten Meldungen in einer Liste an
// und ermöglicht durch entfernen der jeweiligen Checkbox
// das wiederanzeigen der unterdrückten Meldung.
//
// Copyright by Frank Schöneck, 2013
// letzte Änderung: Frank Schöneck, 25.09.2013 V1.0.0, -Projektbeginn
//
// für Eplan Electric P8, V2.2 / V2.3
//
using System.Windows.Forms;
using Eplan.EplApi.Scripting;
using Eplan.EplApi.Base;
public partial class frmDeciderDisplayEnable : System.Windows.Forms.Form
{
[Start]
public void Function()
{
//Form anzeigen
frmDeciderDisplayEnable frm = new frmDeciderDisplayEnable();
frm.ShowDialog();
return;
}
private void frmDeciderDisplayEnable_Load(object sender, System.EventArgs e)
{
Settings oSettings = new Settings();
string sDeciderNotDisplay = string.Empty;
int iCountDeciderNotDisplay = 0;
ListViewItem objListViewItem = new ListViewItem();
if (oSettings.ExistSetting("USER.Decider.NotDisplay"))
{
//Anzahl Settings ermitteln
iCountDeciderNotDisplay = oSettings.GetCountOfValues("USER.Decider.NotDisplay");
//in ListView einlesen
for (int n = 0; n < iCountDeciderNotDisplay; n++)
{
sDeciderNotDisplay = oSettings.GetStringSetting("USER.Decider.NotDisplay", n);
objListViewItem = new ListViewItem();
objListViewItem.Text = sDeciderNotDisplay;
objListViewItem.Checked = true;
objListViewItem.SubItems.Add(n.ToString());
listView1.Items.Add(objListViewItem);
}
}
}
//Button OK
private void btnOK_Click(object sender, System.EventArgs e)
{
Settings oSettings = new Settings();
//Setting löschen!
oSettings.DeleteSetting("USER.Decider.NotDisplay");
//Setting nach löschen wieder neu anlegen
oSettings.AddStringSetting("USER.Decider.NotDisplay",
new string[] { },
new string[] { }, "DeciderDisplayEnable",
new string[] { "Default value of DeciderDisplayEnable" },
ISettings.CreationFlag.Insert);
int n = 0; //Zähler starten
//Listview abarbeiten
foreach (ListViewItem itemRow in listView1.Items)
{
if (itemRow.Checked) //wenn Ausgewählt Setting schreiben
{
//Setting schreiben
oSettings.SetStringSetting("USER.Decider.NotDisplay", itemRow.Text, n);
n++; //Zähler für VAL erhöhen
}
}
//Beenden
Close();
}
//Button Abbrechen
private void btnAbbrechen_Click(object sender, System.EventArgs e)
{
Close();
}
}
Ich habe mir die Arbeit gemacht und alle Scripte von Suplanus.de in ein Visual Studio Projekt gepackt. Das ganze findet ihr auf GitHub und soll dazu dienen Versionen + Änderungen besser zu dokumentieren. Denke es fehlen noch ein paar. Falls euch noch was auffällt einfach melden.
Um die Modi des Kopierens schnell und einfach zu wechseln, hat Luc Morin ein Script geschrieben. Vielen Dank an dieser Stelle nach Kanada!
/*
Copyright (c) 2013 STLM Inc.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
using Eplan.EplApi.Scripting;
public class STLMCopy
{
//Add the two actions as menu points under Utilities
[DeclareMenu]
public void CopyNormalMenu()
{
Eplan.EplApi.Gui.Menu oMenu = new Eplan.EplApi.Gui.Menu();
oMenu.AddMenuItem("Copy (Normal Mode)", "NormalCopyAction");
oMenu.AddMenuItem("Copy (Design Mode)", "DesignCopyAction");
}
//Declare the action to force copy in normal mode
[DeclareAction("NormalCopyAction")]
public void NormalCopyAction()
{
bool toggled = false;
if (DesignModeState)
{
ToggleDesignMode();
toggled = true;
}
Copy();
if (toggled)
ToggleDesignMode();
}
//Declare the action to force copy in design mode
[DeclareAction("DesignCopyAction")]
public void DesignCopyAction()
{
bool toggled = false;
if (!DesignModeState)
{
ToggleDesignMode();
toggled = true;
}
Copy();
if (toggled)
ToggleDesignMode();
}
//Helper functions and properties
private bool DesignModeState
{
get
{
return new Eplan.EplApi.Base.Settings().GetBoolSetting("USER.GedViewer.ConstructionMode", 0);
}
}
private void ToggleDesignMode()
{
Eplan.EplApi.ApplicationFramework.ActionManager mgr = new Eplan.EplApi.ApplicationFramework.ActionManager();
Eplan.EplApi.ApplicationFramework.Action act = mgr.FindAction("XGedActionToggleConstructionMode");
if (act != null)
{
Eplan.EplApi.ApplicationFramework.ActionCallingContext ictx = new Eplan.EplApi.ApplicationFramework.ActionCallingContext();
act.Execute(ictx);
}
}
private void Copy()
{
Eplan.EplApi.ApplicationFramework.ActionManager mgr = new Eplan.EplApi.ApplicationFramework.ActionManager();
Eplan.EplApi.ApplicationFramework.Action act = mgr.FindAction("XGedStartInteractionAction");
if (act != null)
{
Eplan.EplApi.ApplicationFramework.ActionCallingContext CopyCtx = new Eplan.EplApi.ApplicationFramework.ActionCallingContext();
CopyCtx.AddParameter("Name", "XMIaClipboardCopy");
act.Execute(CopyCtx);
}
}
}
Heute gibts mal wieder ein Schmankerl. Gleich am Anfang vielen Dank an Birdo für die Bereitstellung.
Die versteckte Action RegisterCustomPropertyEditorAction welche nicht dokumentiert ist, kann uns das Leben leichter machen. Mit Hilfe dieser Action könnt ihr eigene Auswahldialoge für Projekteigenschaften erstellen.
Birdo hat das ganze auch offen gehalten, um dynamisch über eine INI-Datei, diese für einzelne Property-Ids zu setzen.
Einfach die INI-Dateien mit dem Schema PropertyId.Index.Schreibgeschütz.txt erstellen. Der Inhalt ist Tab-getrennt Value[TAB]Description.
using System.IO;
using System.Linq;
using System.Windows.Forms;
using Eplan.EplApi.ApplicationFramework;
using Eplan.EplApi.Base;
using Eplan.EplApi.Scripting;
public class CustomPropertyEditor : System.Windows.Forms.Form
{
public string PathIni = @"C:\Test\CustomPropertyEditor\";
public static CustomPropertyEditor frm = new CustomPropertyEditor();
public static string ValueNew = string.Empty;
// Setup on startup EPLAN
[DeclareEventHandler("onMainStart")]
public void Startup()
{
RegisterCustomPropertyEditor();
}
[DeclareRegister]
public void RegisterCustomPropertyEditor()
{
LoadScript("true");
}
[DeclareUnregister]
public void UnregisterCustomPropertyEditor()
{
LoadScript("false");
}
private void LoadScript(string register)
{
foreach (string FullFilename in Directory.GetFiles(PathIni))
{
try
{
string Filename = Path.GetFileNameWithoutExtension(FullFilename);
if (Filename != null)
{
string[] parameters = Filename.Split('.');
Eplan.EplApi.ApplicationFramework.ActionCallingContext acc =
new Eplan.EplApi.ApplicationFramework.ActionCallingContext();
acc.AddParameter("Register", register);
acc.AddParameter("Action", "CustomPropertyEditor");
acc.AddParameter("PropertyId", parameters[0]);
acc.AddParameter("PropertyIndex", parameters[1]);
acc.AddParameter("Editable", parameters[2]);
new CommandLineInterpreter().Execute("RegisterCustomPropertyEditorAction", acc);
BaseExceptionMessage("RegisterCustomPropertyEditorAction: " +
"PropertyId:" + parameters[0] +
" PropertyIndex:" + parameters[1] +
" Editable:" + parameters[2]);
}
}
catch (System.Exception ex)
{
BaseExceptionError("RegisterCustomPropertyEditorAction: " + ex.Message);
}
}
}
[DeclareAction("CustomPropertyEditor")]
public void Function(int PropertyId, int PropertyIndex, int DbObjectId, ref string Value, out int DialogModalResult, out string DialogModified)
{
// form
frm.lblPropertyId.Text = PropertyId.ToString();
frm.lblPropertyIndex.Text = PropertyIndex.ToString();
frm.lblDbObjectId.Text = DbObjectId.ToString();
frm.lblCurrentValue.Text = Value;
frm.ShowDialog();
// values
DialogModified = "1";
if (frm.DialogResult == DialogResult.OK)
{
DialogModalResult = 1;
Value = ValueNew;
}
else
{
DialogModalResult = 0;
}
}
private static void BaseExceptionMessage(string message)
{
Eplan.EplApi.Base.BaseException bexMessage = new BaseException(message, MessageLevel.Message);
bexMessage.FixMessage();
}
private static void BaseExceptionError(string error)
{
Eplan.EplApi.Base.BaseException bexMessage = new BaseException(error, MessageLevel.Error);
bexMessage.FixMessage();
}
private void CustomPropertyEditor_Load(object sender, System.EventArgs e)
{
// Search for INI-File
string FileIni = string.Empty;
foreach (string file in Directory.GetFiles(PathIni).Where(file => file.StartsWith(PathIni + lblPropertyId.Text + "." + lblPropertyIndex.Text)))
{
FileIni = file;
break;
}
// Listview
if (File.Exists(FileIni))
{
livi.Items.Clear();
string[] lines = File.ReadAllLines(FileIni, Encoding.UTF8);
foreach (string line in lines)
{
string[] items = line.Split('\t');
ListViewItem item = new ListViewItem(items[0]);
item.SubItems.Add(items[1]);
livi.Items.Add(item);
}
livi.Sorting = SortOrder.Ascending;
livi.Sort();
livi.AutoResizeColumns(ColumnHeaderAutoResizeStyle.ColumnContent);
}
else
{
MessageBox.Show("INI-File not found:\n" + FileIni, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
private void btnCancel_Click(object sender, System.EventArgs e)
{
this.Close();
}
private void btnOk_Click(object sender, System.EventArgs e)
{
Ok();
}
private void Ok()
{
try
{
ValueNew = livi.SelectedItems[0].SubItems[0].Text;
this.DialogResult = DialogResult.OK;
this.Close();
}
catch (System.Exception)
{
MessageBox.Show("No value selected", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning);
}
}
private void livi_DoubleClick(object sender, System.EventArgs e)
{
Ok();
}
}