Blog

Contextmenu-Actions

Aufgrund des Scriptes ConnectionPointDesignationReverse habe ich mal die Actions im Kontextmenü getestet. Anbei meine gefunden Actions mit Beschreibung.

Diese Aktionen können in Textfeldern verwendet werden. Übersetzung nur in Multilanguage-Eigenschaften verfügbar.

Kopieren
GfDlgMgrActionIGfWind /function:Copy

Ausschneiden
GfDlgMgrActionIGfWind /function:Cut

Einfügen
GfDlgMgrActionIGfWind /function:Paste

Alles markieren
GfDlgMgrActionIGfWind /function:SelectAll

Zeilenumbruch einfügen
GfDlgMgrActionIGfWind /function:InsertLineFeed

Sonderzeichen Einfügen
GfDlgMgrActionIGfWind /function:SpecialCharacterDlg

Text Löschen
GfDlgMgrActionIGfWindDelete

Mehrzeilige Eingabe
GfDlgMgrActionIGfWind /function:MultiLineDlg

Mehrsprachige Eingabe
GfDlgMgrActionIGfWind /function:MultiLanguageDlg

Übersetzen
EnfTranslateEditAction

Übersetzung Entfernen
EnfDeleteEditTranslationsAction

Nicht zu übersetzenden Text kennzeichnen
EnfSetNotTranslateAction

Kennzeichnung entfernen (“Nicht übersetzen”)
EnfDeleteNotTranslateAction

Von |2017-11-09T11:22:19+01:002015-10-02|EPLAN, EPLAN-Scripts|

ConnectionPointDesignationReverse

Frank Schöneck hat wieder ein super Script geschrieben um Anschlussbezeichnungen zu drehen.
Das Script ist im Kontextmenü ausführbar. Vielen Dank!

P8_20151001_01 P8_20151001_02

Download auf GitHub

// ConnectionPointDesignationReverse.cs
//
// Erweitert das Kontextmenü von 'Anschlussbezeichnungen',
// im Dialog 'Eigenschaften (Schaltzeichen): Allgemeines Betriebsmittel',
// um den Menüpunkt 'Reihenfolge drehen'.
// Es wird die Eingabe im Feld 'Anschlussbezeichnungen' automatisch gedreht.
//
// Copyright by Frank Schöneck, 2015
// letzte Änderung:
// V1.0.0, 04.03.2015, Frank Schöneck, Projektbeginn
//
// für Eplan Electric P8, ab V2.3

using System;
using System.Windows.Forms;
using Eplan.EplApi.ApplicationFramework;
using Eplan.EplApi.Base;
using Eplan.EplApi.Scripting;

public class ConnectionPointDesignationReverse
{

	[DeclareMenu]
	public void ProjectCopyContextMenu()
	{
		//Context-Menüeintrag
		string menuText = getMenuText();
		Eplan.EplApi.Gui.ContextMenu oContextMenu = new Eplan.EplApi.Gui.ContextMenu();
		Eplan.EplApi.Gui.ContextMenuLocation oContextMenuLocation = new Eplan.EplApi.Gui.ContextMenuLocation("XDTDataDialog", "4006");
		oContextMenu.AddMenuItem(oContextMenuLocation, menuText, "ConnectionPointDesignationReverse", true, false);
	}

	[DeclareAction("ConnectionPointDesignationReverse")]
	public void Action()
	{
		try
		{
			string sSourceText = string.Empty;
			string sReturnText = string.Empty;
			string EplanCRLF = "¶";

			//Zwischenablage leeren
			System.Windows.Forms.Clipboard.Clear();

			//Zwischenablage füllen
			CommandLineInterpreter oCLI = new CommandLineInterpreter();
			oCLI.Execute("GfDlgMgrActionIGfWind /function:SelectAll"); // Alles markieren
			oCLI.Execute("GfDlgMgrActionIGfWind /function:Copy"); // Kopieren

			if (System.Windows.Forms.Clipboard.ContainsText())
			{
				sSourceText = System.Windows.Forms.Clipboard.GetText();
				if (sSourceText != string.Empty)
				{
					string[] sAnschlussbezeichnungen = sSourceText.Split(new string[] { EplanCRLF }, StringSplitOptions.None);

					if (sAnschlussbezeichnungen.Length > 2) // Mehr als 2 Anschlussbezeichnungen
					{
						Decider eDecision = new Decider();
						EnumDecisionReturn eAnswer = eDecision.Decide(EnumDecisionType.eYesNoDecision,
							"Sollen die Anschlussbezeichnungen paarweise gedreht werden?",
							"Reihenfolge drehen",
							EnumDecisionReturn.eYES,
							EnumDecisionReturn.eYES,
							"ConnectionPointDesignationReverse",
							true,
							EnumDecisionIcon.eQUESTION);

						if (eAnswer == EnumDecisionReturn.eYES)
						{
							// String neu aufbauen
							for (int i = 0; i < sAnschlussbezeichnungen.Length; i = i + 2)
							{
								sReturnText += sAnschlussbezeichnungen[i + 1] + EplanCRLF + sAnschlussbezeichnungen[i] + EplanCRLF;
							}
						}
						else
						{
							// String Array drehen
							Array.Reverse(sAnschlussbezeichnungen);

							// String neu aufbauen
							foreach (string sAnschluss in sAnschlussbezeichnungen)
							{
								sReturnText += sAnschluss + EplanCRLF;
							}
						}
					}
					else // Nur 2 Anschlussbezeichnungen
					{
						// String Array drehen
						Array.Reverse(sAnschlussbezeichnungen);

						// String neu aufbauen
						foreach (string sAnschluss in sAnschlussbezeichnungen)
						{
							sReturnText += sAnschluss + EplanCRLF;
						}
					}

					// letztes Zeichen wieder entfernen
					sReturnText = sReturnText.Substring(0, sReturnText.Length - 1);

					//Zwischenablage einfügen
					System.Windows.Forms.Clipboard.SetText(sReturnText);
					oCLI.Execute("GfDlgMgrActionIGfWind /function:SelectAll"); // Alles markieren
					oCLI.Execute("GfDlgMgrActionIGfWindDelete"); // Löschen
					oCLI.Execute("GfDlgMgrActionIGfWind /function:Paste"); // Einfügen
				}
			}
		}
		catch (System.Exception ex)
		{
			MessageBox.Show(ex.Message, "Reihenfolge drehen, Fehler", MessageBoxButtons.OK, MessageBoxIcon.Error);
		}
		return;
	}

	// Returns the menueitem text in the gui langueage if available.
	private string getMenuText()
	{
		MultiLangString muLangMenuText = new MultiLangString();
		muLangMenuText.SetAsString(
			"de_DE@Reihenfolge drehen;" +
			"en_US@rotate order;"
			);

		ISOCode guiLanguage = new Languages().GuiLanguage;
		return muLangMenuText.GetString((ISOCode.Language)guiLanguage.GetNumber());
	}

}

 

Von |2015-10-01T15:22:09+02:002015-10-01|EPLAN|

.io Domain

Mit den Emailadressen das ist immer so eine Sache… Seit Jahren betreibe ich meinen eigenen Mailserver auf den unterschiedliche Domains aufgeschalten sind.

Aber dennoch musste ich meine aller erste Emailadresse bei GMX immer aktiv halten, da viele Leute noch auf diese Adresse schreiben. Die Werbung und die nicht vorhandene Kontrolle über mein Postfach zwangen mich aber dazu den Schritt zu wagen und die Emailadresse auf Eis zu legen. Sie läuft jetzt auf ein GMAIL Konto welches ich ab und zu mal abrufe.

Man fühlt sich richtig befreit und der Spam ist viel weniger… GMX spamt ja selbst die User zu, mit fast täglichen Emails.

Hatte bereits eine Email für mich privat unter der Suplanus Domain eingerichtet… aber netter wäre doch eine mit meinem Namen :)

Da Weiher.de schon weg ist und nur durch unverschämt hohen Preis zu erwerben wäre habe ich mich mir die neuen Domain angeschaut: Es hat mir aber keine so richtig zugesagt.

Aus diesem Grund habe ich mir eine .io-Domain geholt. Leider sind diese relativ teuer, zumindest bei den deutschen Hostern. Mein Domain-Hoster ist Hosteurope, Daten liegen aber auf Uberspace.

Ich bin auf die Suche gegangen und habe Preise verglichen. Mit Gandi.net hat man einen fairen Preis, vor allem wenn man wie ich gleich einen Mehrjahresplan aufstellt.

Soll keine Werbung sein, sondern eine Empfehlung wenn jemand in der Richtung was sucht.

2015-09-29_09-45-43

 

Von |2015-09-29T09:49:26+02:002015-09-29|Allgemein|

GongSolutions.WPF.DragDrop

Ist gibt immer Technologien welche man nicht mag… denke bei mir ist es Drag & Drop.
Finde es als Bedienkonzept sehr gut, da man hierdurch die User-Experience erhöhen kann.

Aber zum programmieren ist es nicht schön.

GongSolutions.WPF.DragDrop nimmt hier viel Arbeit ab und funktioniert mit primitiven Datentypen sofort.
Kostenlos, frei und auf GitHub zu finden, was will man mehr.

GongSolutions.Wpf.DragDrop.Full

Von |2015-09-25T08:14:03+02:002015-09-26|C#|

EplanCOMApplication 32/64bit

Ich habe ja schon beschrieben wie man die COM-Schnittstelle von EPLAN nutzen kann. Nun ist es aber wichtig zu wissen dass diese in 32bit und 64bit vorliegt.

2015-08-21_07-29-42

Die zuerst gestartete EPLAN Instanz startet auch den COM-Server in der jeweiligen Variante.

Somit ist zu beachten dass für 64bit EPLAN eure Applikation auch in 64bit kompiliert werden muss.
Ich habe mehrere EPLAN-Versionen im Einsatz somit habe ich auch verschiedene (eigene) Applikationen installiert.

 

Von |2017-11-09T11:22:19+01:002015-09-25|EPLAN, EPLAN-Scripts|
Nach oben