Skript

PlaceHolderMultiAddRecord

Frank hat ein schönes Script erstellt um mehrere Wertesätze schnell anzulegen.
Das Script wird über das Kontextmenü aufgerufen.

Download on GitHub

// PlaceHolderMultiAddRecord, Version 1.1.0, vom 04.11.2014
//
// Erweitert das Kontextmenü vom Platzhalterobjekt (Reiter Werte) um den Menüpunkt "Neuer Wertesatz (Mehrfach)..."
// Erlaubt darüber das anlegen von mehreren leeren Wertesätzen.
//
// Copyright by Frank Schöneck, 2013-2014
// letzte Änderung: Frank Schöneck, 16.01.2013 V1.0.0, Projektbeginn
//					Frank Schöneck, 04.11.2014 V1.1.0, Umgestellt von SendKeys auf Action "MacrosGuiIGfWindNewRecord"
//
// für Eplan Electric P8, ab V2.2
//

using System.Drawing;

public class FrankS_PlaceHolder
{
	[DeclareMenu()]
	public void PlaceHolderMultiAddRecordContextMenu()
	{
		//Context-Menüeintrag (hier im Platzhalterobjekt)
		Eplan.EplApi.Gui.ContextMenu oContextMenu = new Eplan.EplApi.Gui.ContextMenu();
		Eplan.EplApi.Gui.ContextMenuLocation oContextMenuLocation = new Eplan.EplApi.Gui.ContextMenuLocation("PlaceHolder", "1004");
		oContextMenu.AddMenuItem(oContextMenuLocation, "Neuer Wertesatz (&Mehrfach)...", "PlaceHolderMultiAddRecord", false, false);
	}

	[DeclareAction("PlaceHolderMultiAddRecord")]
	public void PlaceHolderMultiAddRecord_Action()
	{
		string value = "2";
		if (InputBox.Show("Neuer Wertesatz (Mehrfach)", "Wieviele Wertesätze sollen angelegt werden?", ref value) == DialogResult.OK)
		{
			int iValue = Convert.ToInt32(value); // Eingabe von Typ string in ein Typ int wandeln
			for (int i = 1; i <= iValue; i++)
			{
				new CommandLineInterpreter().Execute("MacrosGuiIGfWindNewRecord");
				//SendKeys.SendWait("^+{F10}W"); //Taste Kontextmenü aufrufen und direkt Taste W
			}
		}
		return;
	}
}

public class InputBox
{
	/// <summary>
	/// Displays a dialog with a prompt and textbox where the user can enter information
	/// </summary>
	/// <param name="title">Dialog title</param>
	/// <param name="promptText">Dialog prompt</param>
	/// <param name="value">Sets the initial value and returns the result</param>
	/// <returns>Dialog result</returns>
	public static DialogResult Show(string title, string promptText, ref string value)
	{
		Form form = new Form();
		Label label = new Label();
		TextBox textBox = new TextBox();
		Button buttonOk = new Button();
		Button buttonCancel = new Button();

		form.Text = title;
		label.Text = promptText;
		textBox.Text = value;

		buttonOk.Text = "OK";
		buttonCancel.Text = "Abbrechen";
		buttonOk.DialogResult = DialogResult.OK;
		buttonCancel.DialogResult = DialogResult.Cancel;

		label.SetBounds(9, 18, 372, 13);
		textBox.SetBounds(12, 36, 372, 20);
		buttonOk.SetBounds(228, 72, 75, 23);
		buttonCancel.SetBounds(309, 72, 75, 23);

		label.AutoSize = true;
		textBox.Anchor = textBox.Anchor | AnchorStyles.Right;
		buttonOk.Anchor = AnchorStyles.Bottom | AnchorStyles.Right;
		buttonCancel.Anchor = AnchorStyles.Bottom | AnchorStyles.Right;

		form.ClientSize = new Size(396, 107);
		form.Controls.AddRange(new Control[] { label, textBox, buttonOk, buttonCancel });
		form.ClientSize = new Size(Math.Max(300, label.Right + 10), form.ClientSize.Height);
		form.FormBorderStyle = FormBorderStyle.FixedDialog;
		form.StartPosition = FormStartPosition.CenterScreen;
		form.MinimizeBox = false;
		form.MaximizeBox = false;
		form.AcceptButton = buttonOk;
		form.CancelButton = buttonCancel;

		DialogResult dialogResult = form.ShowDialog();
		value = textBox.Text;
		return dialogResult;
	}
}

 

Von |2018-08-17T12:30:23+02:002016-10-04|EPLAN, EPLAN-Scripts|

Projekt ermitteln bei Event OnPostOpenProject

Ich habe in einem Script verschiedene Eventhandler die was im Projektordner (DOC) machen…
Klappt auch alles wunderbar… bis auf das Event vom Projekt öffnen. Ist mehr als ein Projekt geöffnet stimmt die Pfadvariable nicht:

var docFolder = PathMap.SubstitutePath("$(DOC)");

 

Durch den (immer tollen) EPLAN API Support habe ich folgende Lösung:

[DeclareEventHandler("Eplan.EplApi.OnPostOpenProject")] // project open
public void EventProjectOpen(IEventParameter iEventParameter)
{
   EventParameterString eventParameterString = new EventParameterString(iEventParameter);
   string projectFile = eventParameterString.String;

   FileInfo fileInfo = new FileInfo(projectFile);
   string projectDirectory = projectFile.Replace(fileInfo.Extension, ".edb");
   var docFolder = Path.Combine(projectDirectory, "DOC");
}
Von |2017-11-09T11:22:14+01:002016-07-27|EPLAN, EPLAN-Scripts|

IEplAddInShadowCopy

EPLAN hat zur 2.6 das Verhalten geändert bzgl. Laden von DLLs.
Es wird eine Schattenkopie auf dem lokalen Client erstellt. Das hat verschiedene Vorteile (wie .NET Sicherheitsrichtlinien usw.) aber eben auch Nachteile.

Einer davon ist dass man per Reflection nicht an den Speicherort im Netzwerk kommt.

Dafür hat EPLAN zur Version 2.6 Beta 3 das Interface IEplAddInShadowCopy bereitgestellt. Hier wird der original Pfad übergeben und man kann diesen weiterverarbeiten.

void IEplAddInShadowCopy.OnBeforeInit(string originalAssemblyPath)
{
   // Do something with the original path
}

Finde schön zu sehen dass schnell auf die Bedürfnisse der User reagiert wird!

Von |2016-06-02T07:30:04+02:002016-06-02|EPLAN, EPLAN-API|

Slack

Ich hab mal für alle EPLAN’er ein Slack-Team eingerichtet… vielleicht wird es ja was :^)

Slack ist vergleichbar mit einem Chat-System… nur eben für Teams und ein bisschen professioneller. Für Euch kostenlos.

Es sind für alle EPLAN Themen eigene Kanäle vorhanden. Allgemeine Sachen bitte im #general Kanal besprechen :^)

Slack

Registriert euch hier:
[invitations_for_slack]

Es gibt auch für alle Desktop- & Mobilen-Betriebssysteme Apps dafür… Funktioniert aber auch nur im Browser.

Von |2016-06-01T15:03:41+02:002016-06-01|EPLAN|

EPLAN-API: Showcase 2016 Mai

Es kam die Anforderung von einem Kunden, alle Baugruppen in einem Projekt aufzulösen. Nicht bei der Beschriftungsausgabe, sonder wirklich im Projekt (Automobilistenvorgabe…).

Leider gibt es in EPLAN keinen Weg dies zu machen… Somit musste die API ran. Wichtig hier für alle EPLAN API Programmierer, achtet darauf dass Artikelplatzierungen Artikel tragen, auch wenn diese nicht in der UI sichtbar sind. Das verhinderte dass ich Artikel hinzufügen konnte. Dank des immer tollen EPLAN Supports konnte ich das Problem aber schnell lösen.

 

Von |2017-11-09T11:24:39+01:002016-06-01|EPLAN|
Nach oben