"Wurzelbehandlungen" gehen mit Sqrt()
Gleichungssysteme bin ich überfragt.
Beiträge von Oscar
-
-
Eine Exe-Datei von einem Neuen?
Sorry, aber nicht auf meinem Rechner... :pinch: -
Mir gefällt die Syntax von AutoIt auch besser, gerade in Bezug auf die "fehlenden" Klammern. Die Klammern haben mich an anderen Sprachen schon immer genervt.
[OT]
ZitatProgrammieren ist Kust, und AutoIt ein Pinsel.
Ich kaufe ein "n"!
[/OT] -
Ist ganz einfach. Mit Execute kannst Du einen String ausrechnen lassen:
[autoit]
[/autoit]
$sProblem = InputBox('Rechner', 'Bitte Aufgabe eingeben', '(2*sin(20))/(120-cos(20))')
MsgBox(0, 'Rechner', Execute($sProblem))Fehlt bloß noch die Fehlerbehandlung.

-
Avira AntiVir macht keine Probleme mehr seit dem heutigen Update!
Update also einfach nur Dein AntiVir. -
Warum löschst Du alle Deine Beiträge hier?
Zum Script...was soll diese Konstruktion bewirken:
[autoit]
[/autoit]
If FileExists("") Then
Else
DirCreate("C:\Programme\Adressbuch\")
FileInstall("Timer.exe","C:\Programme\Adressbuch\Timer.exe")
EndIf
If...Then...Else...EndIf sind völlig überflüssig, weil sowieso immer der Else-Zweig ausgeführt wird.
-
Macht ein Update!
Es gibt eine neue Suchengine (V8.02.00.85, 19.02.2009), mit der die compilierten Programme nicht mehr als Trojaner erkannt werden.
-
Ich habe eben eine Antwort auf meine EMail bekommen:
ZitatDieses Problem wird mit dem nächsten Engine Update behoben sein.
Mit dieser Version werden die AutoIt-Programme noch immer als Trojaner erkannt:
V8.02.00.83, 17.02.2009
V7.01.02.48, 19.02.2009 -
So gesehen hast Du recht, aber ein echtes Try-Catch muss nicht alle Cases durchtesten, wenn der Versuch bereits fehlschlägt (Zeitvorteil).
Deshalb dürfte BugFix' Variante schneller sein, wenn es viele Case-Anweisungen gibt. -
Dazu brauchst Du doch nur die Koordinaten verändern (die "-204" weglöschen).
-
Dann ist es aber "nur" ein simples Switch (was in diesem Fall ausreichen würde).
BugFix wollte aber zeigen, dass man auch ein Try-Catch nachbauen kann. -
Das Script hatte ich hier bereits rumliegen.

-
Meinst Du so:
Spoiler anzeigen
[autoit]
[/autoit] [autoit][/autoit] [autoit]
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
$hGui = GUICreate('Test', 640, 480)
GUISetBkColor(0xffff00)
GUISetState()
$aPos = WinGetPos($hGui)
$hChild = GUICreate('Child', 200, 100, $aPos[0]+$aPos[2]-204, $aPos[1]+30, $WS_POPUP, Default, $hGui)
GUISetBkColor(0xff0000)
GUISetState()GUIRegisterMsg($WM_MOVE, 'MY_WM_Move')
[/autoit] [autoit][/autoit] [autoit]Do
[/autoit] [autoit][/autoit] [autoit]
Until GUIGetMsg() = -3Func MY_WM_Move()
[/autoit]
Local $aPos = WinGetPos($hGui)
WinMove($hChild, '', $aPos[0]+$aPos[2]-204, $aPos[1]+30)
Return $GUI_RUNDEFMSG
EndFunc -
Ich habe mal eine Version erstellt, die überprüft, ob es den Zieldateinamen bereits gibt und die eine formartierte Ausgabe des Zählers ermöglicht (4stellig mit führenden Nullen):
Spoiler anzeigen
[autoit]
[/autoit] [autoit][/autoit] [autoit]
$sSourcePath = FileSelectFolder('Quellverzeichnis auswählen', '')
If @error Then Exit
If StringRight($sSourcePath, 1) <> '\' Then $sSourcePath &= '\'$sTargetPath = FileSelectFolder('Zielverzeichnis auswählen', '')
[/autoit] [autoit][/autoit] [autoit]
If @error Then Exit
If StringRight($sTargetPath, 1) <> '\' Then $sTargetPath &= '\'$sInput = InputBox('JPG-Mover', 'Neuen Dateinamen eingeben')
[/autoit] [autoit][/autoit] [autoit]
If @error Then Exit$hSearch = FileFindFirstFile($sSourcePath & '*.jpg') ; Search-Handle für JPG-Dateien
[/autoit] [autoit][/autoit] [autoit]
If $hSearch = -1 Then Exit MsgBox(0, 'Fehler', 'Keine JPG-Dateien gefunden')$iNr = 0 ; Zähler für den Ziel-Dateinamen
[/autoit]
While 1
$sFile = FileFindNextFile($hSearch) ; finde nächste Datei mit dem Suchmuster
If @error Then ExitLoop ; keine weitere gefunden, dann While-Schleife verlassen
If Not StringInStr(FileGetAttrib($sSourcePath & $sFile), 'D') Then ; Wenn der gefundene String kein Verzeichnis ist, dann...
$iNr += 1 ; Zähler um eins erhöhen
While FileExists($sTargetPath & $sInput & StringFormat('%04s', $iNr) & '.jpg') ; falls es eine Zieldatei mit diesem Namen bereits gibt, dann...
$iNr += 1 ; Zähler nochmal um eins erhöhen und
WEnd ; Schleife erneut durchlaufen
ConsoleWrite($sSourcePath & $sFile & ' -> ' & $sTargetPath & $sInput & StringFormat('%04s', $iNr) & '.jpg' & @CRLF) ; Ausgabe in die Console
FileMove($sSourcePath & $sFile, $sTargetPath & $sInput & StringFormat('%04s', $iNr) & '.jpg') ; Datei verschieben
EndIf
WEnd
ToolTip('')
FileClose($hSearch) -
Aua! Stimmt! Beim Kompilieren kommt immer noch die Falschmeldung. So schlimm war's ja noch nie.

-
Jo! Mit der Virendefinitionsdatei 7.01.02.44 18.02.2009 ist alles wieder ok. Bis zur 43 war die "AutoIt3.exe" angeblich ein Trojaner.
-
Und das ist doch ein klassischer Fall für Switch:
Spoiler anzeigen
[autoit]
[/autoit]
guictrlcreatecombo("PLUS", 10, 30, 60, 20)
guictrlsetdata( -1,"MINUS|MAL|DIVIDIERT|WURZEL|SINUS|COSINUS|TANGENS")
Switch $3
case "MINUS"
_Arrayadd( $5, "-")
Case "PLUS"
_Arrayadd( $5, "+")
case "MAL"
_Arrayadd( $5, "*")
case "DIVIDIERT"
_Arrayadd($5, "/")
case "WURZEL"
_ArrayAdd( $5, "Sqrt")
case "SINUS"
_arrayadd( $5, "sin")
case "COSINUS"
_arrayadd( $5, "cos")
case "TANGENS"
_arrayadd( $5, "tan")
EndSwitch -
Ach was?! So herum funktioniert das?
Ist das jetzt echt so vorgesehen oder ist das ein Bug?
Die MY_WM_PAINT-Funktion sieht so auf jeden Fall kürzer und "richtiger" aus.
Aber egal, vielen Dank, progandy!
Ich habe so viel probiert und mich gewundert, warum das nicht funktioniert. Jetzt weiß ich wenigstens, wie es geht. -
Schonmal was von Arrays gehört?

-
Danke, für's testen.
Das heißt, theoretisch sollte mein Beispiel oben funktionieren?
Ich habe noch nicht viel mit GDI+ gemacht, deshalb war ich am zweifeln, ob das so überhaupt richtig ist.Naja, jetzt habe ich das so ähnlich wie von Dir vorgeschlagen (mit _ScreenCapture) gemacht:
Spoiler anzeigen
[autoit]
[/autoit] [autoit][/autoit] [autoit]
#include <ScreenCapture.au3>
#include <WindowsConstants.au3>
#include <GDIPlus.au3>
#include <GUIConstantsEx.au3>
$hGui1 = GUICreate('test', 540, 540, -1, 0, $WS_POPUP)
_GDIPlus_Startup ()
$hGraphic1 = _GDIPlus_GraphicsCreateFromHWND(WinGetHandle($hGui1))
_GDIPlus_GraphicsSetSmoothingMode($hGraphic1, 2)
$hPen = _GDIPlus_PenCreate(0xcc000000, 2)
Global $ahBrush[4]
$ahBrush[0] = _GDIPlus_BrushCreateSolid(0xffffffff)
$ahBrush[1] = _GDIPlus_BrushCreateSolid(0xff42b8c8)
$ahBrush[2] = _GDIPlus_BrushCreateSolid(0xffff1a10)
$ahBrush[3] = _GDIPlus_BrushCreateSolid(0xfffef433)GUIRegisterMsg($WM_PAINT, 'MY_WM_PAINT')
[/autoit] [autoit][/autoit] [autoit]
GUISetState()$sFile = @ScriptDir & '\pic.jpg'
[/autoit] [autoit][/autoit] [autoit]
If FileExists($sFile) Then FileDelete($sFile)_ScreenCapture_CaptureWnd($sFile, $hGui1)
[/autoit] [autoit][/autoit] [autoit]Do
[/autoit] [autoit][/autoit] [autoit]
Until GUIGetMsg() = -3_GDIPlus_PenDispose($hPen)
[/autoit] [autoit][/autoit] [autoit]
For $i = 0 To UBound($ahBrush) -1
_GDIPlus_BrushDispose($ahBrush[$i])
Next
_GDIPlus_GraphicsDispose($hGraphic1)
_GDIPlus_Shutdown()Func MY_WM_PAINT($hWnd, $Msg, $wParam, $lParam)
[/autoit]
If $hWnd = WinGetHandle($hGui1) Then
_GDIPlus_GraphicsClear($hGraphic1, 0xffffffff)
_GDIPlus_GraphicsDrawEllipse($hGraphic1, 30, 30, 480, 480, $hPen)
_GDIPlus_GraphicsFillEllipse($hGraphic1, 31, 31, 478, 478, $ahBrush[0])
_GDIPlus_GraphicsDrawEllipse($hGraphic1, 54, 54, 432, 432, $hPen)
_GDIPlus_GraphicsFillEllipse($hGraphic1, 55, 55, 430, 430, $ahBrush[0])
_GDIPlus_GraphicsFillEllipse($hGraphic1, 78, 78, 384, 384)
_GDIPlus_PenSetColor($hPen, 0xddffffff)
_GDIPlus_GraphicsDrawEllipse($hGraphic1, 102, 102, 336, 336, $hPen)
_GDIPlus_GraphicsFillEllipse($hGraphic1, 103, 103, 334, 334)
_GDIPlus_PenSetColor($hPen, 0xcc000000)
_GDIPlus_GraphicsDrawEllipse($hGraphic1, 126, 126, 288, 288, $hPen)
_GDIPlus_GraphicsFillEllipse($hGraphic1, 127, 127, 286, 286, $ahBrush[1])
_GDIPlus_GraphicsDrawEllipse($hGraphic1, 150, 150, 240, 240, $hPen)
_GDIPlus_GraphicsFillEllipse($hGraphic1, 151, 151, 238, 238, $ahBrush[1])
_GDIPlus_GraphicsDrawEllipse($hGraphic1, 174, 174, 192, 192, $hPen)
_GDIPlus_GraphicsFillEllipse($hGraphic1, 175, 175, 190, 190, $ahBrush[2])
_GDIPlus_GraphicsDrawEllipse($hGraphic1, 198, 198, 144, 144, $hPen)
_GDIPlus_GraphicsFillEllipse($hGraphic1, 199, 199, 142, 142, $ahBrush[2])
_GDIPlus_GraphicsDrawEllipse($hGraphic1, 222, 222, 96, 96, $hPen)
_GDIPlus_GraphicsFillEllipse($hGraphic1, 223, 223, 94, 94, $ahBrush[3])
_GDIPlus_GraphicsDrawEllipse($hGraphic1, 246, 246, 48, 48, $hPen)
_GDIPlus_GraphicsFillEllipse($hGraphic1, 247, 247, 46, 46, $ahBrush[3])
_GDIPlus_PenSetColor($hPen, 0xcc000000)
_GDIPlus_GraphicsDrawEllipse($hGraphic1, 258, 258, 24, 24, $hPen)
_GDIPlus_GraphicsFillEllipse($hGraphic1, 259, 259, 22, 22, $ahBrush[3])
_GDIPlus_GraphicsDrawLine($hGraphic1, 266, 270, 274, 270, $hPen)
_GDIPlus_GraphicsDrawLine($hGraphic1, 270, 266, 270, 274, $hPen)
EndIf
Return $GUI_RUNDEFMSG
EndFuncSo funktioniert's. Danke, BugFix!
Ich lasse es mal auf "offen". Vielleicht weiß ja einer, ob das auch mit den GDI+ Funktionen klappt...