Hi,
nicht immer benutze ich AutoIt zum Zeitvertreib..
Nach anfänglichen Schwierigkeiten, komme ich jetzt sogar mit Koda klar.
Einige Sachen gefallen mir daran zwar nicht, aber damit kann ich leben.
(Ich habe ein von Koda erzeugtes GUI(~9k) durch manuelle Bearbeitung auf
~1.5k zusammengestaucht(Schleifen benutzt, u.ä..). Eine richtig 'ernste'
Anwendung ist folgendes Skript:
Spoiler anzeigen
;<AutoItScript>
#NoTrayIcon
;+----------------------------------------------------------------------------+
;| FontAnzeigeCheck: |Il1 sind Alt-0124, Großes i, Kleines L, Eins |
Const $Autor="Riwi.au3 ©2006 by Dipl.-Ing. Jörg Zühlke, MD"; aka ytwinky |
;| EMail: [EMAIL]PIII1kSystem-AutoIt3Forum@yahoo.de[/EMAIL] |
;| AutoIt3-Version: 3.1.1.117(beta) |
;| Editor: SciTE 1.67, feste Schriftart, mit Koda 1.4.0 |
;| Zweck : Berechnung von Richtungswinkel und Entfernung |
;| Tab auf 2 setzen wg. Lesbarkeit |
;+----------------------------------------------------------------------------+
#include <GUIConstants.au3>
Global $Pi=4*Atan(1), $WMod[3], $PrtDim[3]=[" °", " gon", " rad"]
$Form1 = GUICreate("Riwi", 437, 323, 280, 252)
;GUISetIcon("WinkelSymbol.Ico") ;hier eigenes Icon einfügen
GUICtrlCreateLabel("Status", 1, 1, 41, 13)
$Group1 = GUICtrlCreateGroup("Nachkommastellen", 3, 13, 201, 39)
MakeLabel("Winkel:", 7, 29, 41, 13)
$WNk = GUICtrlCreateCombo("4", 50, 27, 40, 21)
GUICtrlSetData(-1, "4|6|8|10|*")
GUICtrlSetTip(-1, "Nachkommastellen wählen")
MakeLabel("Strecken:", 106, 29, 54, 13)
$SNk = GUICtrlCreateCombo("3", 162, 27, 40, 21)
GUICtrlSetData(-1, "3|5|7|9|*")
GUICtrlSetTip(-1, "Nachkommastellen wählen")
GUICtrlCreateGroup("", -99, -99, 1, 1)
$Group2 = GUICtrlCreateGroup("Strecken in", 202, 13, 82, 39)
$SDim = GUICtrlCreateInput("m", 214, 27, 65, 21, $ES_CENTER, $WS_EX_CLIENTEDGE)
AddTip("Streckendimension für die Ausgabe eintragen")
GUICtrlCreateGroup("", -99, -99, 1, 1)
$Group3 = GUICtrlCreateGroup("Winkelmodus", 282, 13, 153, 39)
$WMod[0] = GUICtrlCreateRadio("Deg", 288, 29, 45, 17)
AddTip("Altgrad(Vollkreis=360°)")
$WMod[1] = GUICtrlCreateRadio("Gon", 340, 29, 45, 17)
GUICtrlSetState(-1, $GUI_CHECKED)
AddTip("Neugrad(Vollkreis=400gon)")
$WMod[2] = GUICtrlCreateRadio("rad", 392, 29, 41, 17)
AddTip("radiant(Vollkreis=2Pi) aka Bogenmaß")
GUICtrlCreateGroup("", -99, -99, 1, 1)
$Group4 = GUICtrlCreateGroup("Berechnung", 1, 56, 436, 218)
$Prt1=GUICtrlCreateLabel("Richtungswinkel und Entfernung", 74, 70, 320, 30)
GUICtrlSetFont(-1, 16, 800, 0, "MS Sans Serif")
GUICtrlSetColor(-1, 0x000080)
$Prt2=GUICtrlSetTip(-1, $Autor)
MakeLabel("Punktnummer", 8, 96, 80, 17)
MakeLabel("Rechtswert", 140, 96, 68, 17)
MakeLabel("Hochwert", 268, 96, 58, 17)
MakeLabel("Differenzen", 67, 178, 69, 17)
MakeLabel("t=", 124, 220, 15, 17)
MakeLabel("s=", 124, 252, 17, 17)
$PNrS = GUICtrlCreateInput("Standpunkt", 8, 112, 121, 21, -1, $WS_EX_CLIENTEDGE)
GUICtrlSetTip(-1, "Standpunktbezeichnung")
$rs = GUICtrlCreateInput("50", 136, 112, 121, 21, $ES_RIGHT, $WS_EX_CLIENTEDGE)
$hs = GUICtrlCreateInput("50", 264, 112, 121, 21, $ES_RIGHT, $WS_EX_CLIENTEDGE)
$PNrZ = GUICtrlCreateInput("Zielpunkt", 8, 144, 121, 21, -1, $WS_EX_CLIENTEDGE)
GUICtrlSetTip(-1, "Zielpunktbezeichnung")
$rz = GUICtrlCreateInput("60", 136, 144, 121, 21, $ES_RIGHT, $WS_EX_CLIENTEDGE)
$hz = GUICtrlCreateInput("60", 264, 144, 121, 21, $ES_RIGHT, $WS_EX_CLIENTEDGE)
$dr = GUICtrlCreateInput("", 136, 176, 121, 21, $ES_RIGHT, $WS_EX_CLIENTEDGE)
$dh = GUICtrlCreateInput("", 264, 176, 121, 21, $ES_RIGHT, $WS_EX_CLIENTEDGE)
$t = GUICtrlCreateInput("", 136, 217, 121, 21, -1, $WS_EX_CLIENTEDGE)
GUICtrlSetTip(-1, "Richtungswinkel im eingestellten Winkelmodus")
$s = GUICtrlCreateInput("", 136, 249, 121, 21, -1, $WS_EX_CLIENTEDGE)
GUICtrlSetTip(-1, "Strecke in der eingegebenen Dimension, gewöhnlich m")
MakeLabel("entn.", 396, 96, 33, 17)
GUICtrlSetTip(-1, "Entnahmehinweis eintragen")
$entS = GUICtrlCreateInput("Bsp.1", 388, 112, 45, 21, -1, $WS_EX_CLIENTEDGE)
$entZ = GUICtrlCreateInput("Bsp.2", 388, 144, 45, 21, -1, $WS_EX_CLIENTEDGE)
GUICtrlCreateGroup("", -99, -99, 1, 1)
$Group5 = GUICtrlCreateGroup("Bedienung", 1, 276, 436, 45)
$Neu = GUICtrlCreateButton("Neu", 6, 292, 75, 25)
AddTip("Alles neu..")
$Berechne = GUICtrlCreateButton("Berechnen", 120, 292, 75, 25)
AddTip("neue Berechnung der aktuellen Werte")
$Speichern = GUICtrlCreateButton("Speichern", 240, 292, 75, 25)
AddTip("Speichert die aktuelle Berechnung")
$Quit = GUICtrlCreateButton("Exit", 357, 292, 75, 25)
AddTip("Na, was wohl..")
GUICtrlCreateGroup("", -99, -99, 1, 1)
Berechne()
GUISetState(@SW_SHOW)
While 1
Switch GuiGetMsg()
Case $GUI_EVENT_CLOSE
ExitLoop
Case $Quit
ExitLoop
Case $WMod[0], $WMod[1], $WMod[2], $SNk, $WNk, $Berechne
Berechne()
Case $Neu
GUICtrlSetData($dr, "")
GUICtrlSetData($dh, "")
GUICtrlSetData($s, "")
GuiCtrlSetData($t, "")
GUICtrlSetData($rz, "")
GUICtrlSetData($hz, "")
GUICtrlSetData($hs, "")
GuiCtrlSetData($rs, "")
GUICtrlSetData($PNrS, "")
GuiCtrlSetData($PNrZ, "")
GUICtrlSetState($WMod[1], $GUI_CHECKED)
GUICtrlSetData($SNk, "3")
GUICtrlSetData($WNk, "4")
GUICtrlSetData($PrtDim, "m")
Case $Speichern
$Prt=GUICtrlRead($Prt1) &@CrLf
$Prt&=StringMid($Autor, StringInstr($Autor, " ")) &@CrLf
$Prt&="Berechnung vom " &@MDay &"." &@Mon &"." &@Year &", " &@Hour &":" &@Min &":" &@Sec
$Prt&=", ausgeführt von " &@UserName &" am " &@ComputerName &@CrLf
$Prt&=StringFormat("%22s", "Pkt-Nr.") &StringFormat("%16s", "Rechtswert")
$Prt&=StringFormat("%12s", "Hochwert") &StringFormat("%11s", "entn.") &@CrLf
$Prt&=StringFormat("%10s", "Standpunkt:") &TabForm($PNrS) &TabForm($rs) &TabForm($hs) &" "
$Prt&=GUICtrlRead($entS) &@CrLf
$Prt&=StringFormat("%11s", "Zielpunkt:") &TabForm($PNrZ) &TabForm($rz) &TabForm($hz) &" "
$Prt&=GUICtrlRead($entZ) &@CrLf
$Prt&=StringFormat("%25s", "Differenzen:") &TabForm($dr) &TabForm($dh) &@CrLf
$Prt&=StringFormat("%38s", "t=" &GUICtrlRead($t)) &$PrtDim[GetWMod()] &@CrLf
$Prt&=StringFormat("%38s", "s=" &GUICtrlRead($s)) &" " &GUICtrlRead($SDim) &@CrLf
$DateiName="Riwi" &@Year &@Mon &@MDay &@Hour &@Min &@Sec &".Txt"
$DateiName=FileSaveDialog("Dateispeichern", "", "Textdateien(*.Txt)", 16+2, $DateiName)
If @Error=0 Then
$DHnd=FileOpen($DateiName, 2)
FileWrite($DHnd, $Prt)
FileClose($DHnd)
EndIf
Case Else
;;;;;;;;;;;;;;
EndSwitch
WEnd
Exit
;<Funcs>
Func Berechne()
GUICtrlSetData($dr, CtrlFormat($hz)-CtrlFormat($hs))
GUICtrlSetData($dh, CtrlFormat($rz)-CtrlFormat($rs))
GUICtrlSetData($t, ATan2(CtrlFormat($dr), CtrlFormat($dh))*Rho())
GUICtrlSetData($t, sf($WNk, $t))
GUICtrlSetData($s, Sqrt(GUICtrlRead($dr)^2+GUICtrlRead($dh)^2))
CtrlFormat($s)
EndFunc
Func CtrlFormat($Which)
GUICtrlSetData($Which, sf($SNk, $Which))
Return GUICtrlRead($Which)
EndFunc
Func IIF($Cond, $TrueVal, $FalseVal)
Local $NoYes[2]=[$FalseVal, $TrueVal]
Return $NoYes[$Cond]
EndFunc
Func ATan2($dy, $dx, $NurPositiv=True) ;Quadrantenrichtige Arcustangens-Funktion in rad
Local $Eps=1E-10, $at2
Select
Case Abs($dy)<$Eps ;-pi(-180°) | 0(0°)
$at2=IIf(($dx<0), -$Pi, 0)
Case Abs($dx)<$Eps ;-pi/2(-90°) | +pi/2(+90°)
$at2=IIf(($dy<0), -$Pi/2, $Pi/2)
Case Else
$at2=Atan($dy/$dx)+IIf(Atan($dy/$dx)<0, IIf($dx<0, $Pi, 0), IIf($dy<0, -$Pi, 0))
EndSelect
If $NurPositiv And ($at2<0) Then $at2+=2*$Pi
Return $at2
EndFunc
Func Rho()
Dim $d[3]=[45, 50, Atan(1)]
Return $d[GetWMod()]/$d[2]
EndFunc
Func GetWMod()
If GUICtrlRead($WMod[0])=$GUI_CHECKED Then Return 0
If GUICtrlRead($WMod[1])=$GUI_CHECKED Then Return 1
Return 2
EndFunc
Func MakeLabel($s, $Links, $Oben, $Breite, $Hoehe)
GUICtrlCreateLabel($s, $Links, $Oben, $Breite, $Hoehe)
GUICtrlSetFont(-1, 8, 800, 0, "MS Sans Serif")
EndFunc
Func AddTip($s)
GUICtrlSetFont(-1, 8, 800, 0, "MS Sans Serif")
GUICtrlSetTip(-1, $s)
EndFunc
Func TabForm($Was)
Return StringFormat("%14s", GUICtrlRead($Was))
EndFunc
Func sf($Wie, $Was)
If GUICtrlRead($Wie)<>"*" Then
Return StringFormat("%7." &GUICtrlRead($Wie) &"f", GUICtrlRead($Was))
Else
Return GUICtrlRead($Was)
EndIf
EndFunc
;</AutoItScript>
Alles anzeigen
Ich habe ein paar nette Tricks eingebaut, vllt. hat ja jemand Verwendung dafür..
Ein echtes Schmankerl ist jedoch meine Funktion ATan2(..), die immer einen Winkel im
Bereich von 0..2Pi liefert(läßt sich aber abstellen).
Hauptziel war jedoch nicht die Erstellung eines ProfiTools, sondern ich wollte einfach
nur diverse Funktionen von AutoIt erproben.
Ich bitte um Beachtung, daß ich eine eigene IIF-Funktion verwende: Ist IMO eleganter..
Achso, ein Icon habe ich nicht mitgeliefert, aber die Stelle, wo es eingebaut wird
Gruß
ytwinky