Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!

Mobiles Hauptmenü

Umrechnung inch - mm - pt - twips einfach per Enumeration

Begonnen von Georg_, Februar 21, 2017, 22:36:37

⏪ vorheriges - nächstes ⏩

Georg_

Hallo,
in den letzten Tagen habe ich mir über die Größenanpassung von Formularen Gedanken gemacht. Die Umrechnung verschiedener Einheiten ineinander ist dabei immer wieder Thema.
Hier ist die Lösung, die ich dazu gefunden habe:
in einem Standardmodul - ob es Sinn macht, es in eine Klasse zu packen, habe ich nicht erwogen - wird eine Enumeration und eine Funktion definiert.
Public Enum eUnit
            einch = 10
            emm = 254
            ept = 720
            etwips = 14400
       End Enum

Function UnitConv(sngVal As Single, eFrom As eUnit, eTo As eUnit) As Single
    UnitConv = sngVal * CSng(eTo) / CSng(eFrom)
End Function


Die Konstanten der Enumeration habe ich auf die größte Einheit, das Inch, normiert, d.h. Inch ist 1, zumindest theoretisch. Da aber Enumerationskonstanten grundsätzlich als Long dimensioniert sind und 1 Inch 25,4 mm entsprechen, habe ich die Werte mit 10 multiplizieren müssen, woraus die etwas merkwürdig anmutende Numerierung (10, 254, 720, 14400 statt 1 Inch = 25,4 mm = 72 pt = 1440 twips) innerhalb der Definition resultiert.

Als Parameter der Funktion finden Eingang:
  • der zu konvertierende Zahlenwert,
  • die Einheit aus der und
  • die Einheit in die konvertiert werden soll.
    Die Einheiten sind mit dem Datentyp eUnit der Enumeration dimensioniert. Das hat den großen Vorteil, dass die möglichen Parameter der Enumeration bei der Eingabe von der IntelliSense angezeigt werden, was die Eingabe natürlich wesentlich vereinfacht.
    Der eigentliche Clou steckt aber in der Umrechnung innerhalb der Funktion, die nur aus einer einzigen Zeile besteht: UnitConv = sngVal * CSng(eTo) / CSng(eFrom)
    Da die den Enumerationsparametern zugeordneten Zahlenwerte auf Inch normiert sind, ist der Konvertierungsfaktor einfach dadurch zu bestimmen, das man den Enumerationsparameter der Ausgangseinheit durch den der Eingangseinheit dividiert.
    Ja, viel Spaß damit. Vielleicht kann es außer mir ja noch jemand brauchen oder das Prinzip nutzen.

    Georg