Probleme mit dem Resource Refactoring Tool

Ich nutze bei der Entwicklung ein sehr hilfreiches Tool namens Resource Refactoring Tool. Normalerweise taucht dieses im Menü Refactor als Extract to Resource auf. Bei mir ist es allerdings einfach verschwunden. Hier hilft es das Addin zu resetten. Dazu geht man in den Ordner C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE und öffnet dort eine Kommandozeile. In diese gibt man dann

devenv.exe /resetaddin Microsoft.VSPowerToys.ResourceRefactor.Connect 

ein und schon ist das Problem gelöst :)

Vertimas – Einfache Übersetzung von Resx Dateien

Die Übersetzung von .NET Programmen gestaltet sich doch recht schwierig. Wobei schwierig in diesem Fall das falsche Wort ist. Umständlich trifft es in diesem Fall besser. Vor allem wenn als Entwickler das Qt Übersetzungssystem mit Qt Linguist kennenlernen dürfte. Ein Problem bei der Übersetzung ist, dass man zu jedem Programm mehrere Ressourcen (resx) Dateien in den unterschiedlichsten Sprachen hat z.B. translate.resx, translate.de.resx und translate.nl.resx.

An dieser Stelle ist ein Tool wünschenswert welches diese ganzen Dateien nebeneinander darstellt und einigen Komfort bei der Bearbeitung bietet. Basierend auf dem Resx Resource Translator (http://resxtranslator.codeplex.com) von Hakan Lindestaf habe ich dabei ein Tool namens Vertimas (litauisch für Übersetzung) geschaffen welches einem diesem Arbeit leichter von der Hand gehen lässt.

Vertimas ist dabei ein Open Source Projekt welches unter der GPL steht. Die offizielle Projektseite ist dabei unter https://github.com/seeseekey/Vertimas zu finden. Über Feedback, Verbesserungen und Kritik freue ich mich :)

Interessantes Problem beim Bitmap locken in Verbindung mit Mono und .NET

Manchmal sucht man den Fehler an der falschen Stelle, wie ich gestern bei einem Quelltext feststellen dürfte welcher auf .NET und Mono laufen sollte. Man nehme folgenden C# Code:

Bitmap bmp=new Bitmap((int)width, (int)height, PixelFormat.Format32bppArgb);
BitmapData data=bmp.LockBits(new Rectangle(0, 0, (int)width, (int)height), ImageLockMode.ReadOnly, PixelFormat.Format32bppArgb);

Marshal.Copy(intern.imageData, 0, data.Scan0, (int)(width*height*4));

bmp.UnlockBits(data);
data=null;
return bmp;

Dieser Code kopiert Daten in ein Bitmap. Unter .NET funktioniert dies tadellos. Also lag der Gedanke nah das dies ein Mono Problem ist. Nach etlichen Tests ergab sich dann aber das es genau umgekehrt ist. Es liegt an der Zeile:

BitmapData data=bmp.LockBits(new Rectangle(0, 0, (int)width, (int)height), ImageLockMode.ReadOnly, PixelFormat.Format32bppArgb);

und zwar speziell an dem ImageLockMode.ReadOnly. Dort könnte z.B. ImageLockMode.ReadWrite stehen und schon würde es unter .NET und Mono funktionieren. Doch warum geht es nun bei .NET trotzdem mit der falschen Variante? Die .NET API reicht die Parameter korrekt an die GDI+ weiter, diese ignoriert sie aber. Aus diesem Grund funktionierte es unter .NET. Sprich Mono hat alles richtig gemacht :)

Vala

Erstaunt stellte ich gestern fest das der neue Standardfotomanager unter Ubuntu (Shotwell) in Vala geschrieben ist. Bei Vala handelt es sich um eine Programmiersprache welche stark an C# und Java angelehnt ist. Dabei benötigt sie aber keine Laufzeitumgebung. Man hat dann also eine Sprache welche eine moderne Syntax bietet und keine Laufzeitumgebung benötigt sondern nativ auf dem System läuft. Im Gegensatz zu .NET/Mono hat die Sprache keinen Garbage Collector sondern implementiert automatische Referenzzählung zur Speicherverwaltung.

Beim durchschauen der Syntax (verglichen mit C#) sind mir einige Unschönheiten aufgefallen welche einige Konstrukte nicht sehr elegant aussehen lassen, aber das muss man sich wahrscheinlich mal in einem kleinen Projekt anschauen. Es ist möglich mit Vala plattformunabhängige Anwendungen zu schreiben. Als Standardbibliothek steht einem die glibc sowie die Geelib zur Verfügung. Der Vala Compiler wandelt den Quellcode in C Code um und kompiliert diesen dann anschließend. Definitiv eine Sprache die man sich mal anschauen sollte :) Die offizielle Seite von Vala ist unter http://live.gnome.org/Vala zu finden.

Weitere Informationen gibt es unter:
http://de.wikipedia.org/wiki/Vala_%28Programmiersprache%29

DockPanel Suite

Im Visual Studio gibt es eine wunderbare Funktionalität zum docken von Fenstern. Möchte man so etwas nachbauen kann man natürlich sein Geld in eine Komponentensammlung investieren. Die andere Variante ist es die DockPanel Suite zu benutzen welche unter der MIT Lizenz steht. Sie bietet dabei eine sehr große Flexibilität was das Fenstermanagement angeht und ist erstaunlich robust gebaut. Zu finden ist die Suite unter http://sourceforge.net/projects/dockpanelsuite/.

Das Ding hat auch ein kleines Problem mit dem Rahmen im Fullscreenmodus. Dazu kommentiert man einfach ein paar Zeilen in der DockWindow.cs aus:

		public virtual Rectangle DisplayingRectangle
		{
			get
			{
				Rectangle rect = ClientRectangle;
				// if DockWindow is document, exclude the border
				if (DockState == DockState.Document)
				{
					//rect.X += 1;
					//rect.Y += 1;
					//rect.Width -= 2;
					//rect.Height -= 2;
				}

                                ...

Danach ist das Problem Geschichte und das Control angenehm rahmenlos :)

Weitere Informationen gibt es unter:
https://sourceforge.net/projects/dockpanelsuite/forums/forum/402316/topic/2011982/index/page/1