Beiträge von bernd670
-
-
Hallo,
die Mauskoordinaten noch auf die TreeView-Koordinaten umgerechnet werden und der Aufruf von _GUICtrlTreeView_GetText ist falsch.
AutoIt
Alles anzeigen#include <GUIConstantsEx.au3> #include <GuiImageList.au3> #include <GuiTreeView.au3> #include <MsgBoxConstants.au3> #include <WindowsConstants.au3> #include <ButtonConstants.au3> Global $g_hImage, $g_hStateImage Example() Func Example() Local $ahItem[10], $aidChildItem[30], $iYRandItem = 0, $iYRand, $iXRand, $idTreeView Local $iStyle = BitOR($TVS_EDITLABELS, $TVS_HASBUTTONS, $TVS_HASLINES, $TVS_LINESATROOT, $TVS_DISABLEDRAGDROP, $TVS_SHOWSELALWAYS) Local $Gui = GUICreate("TreeView Hit Test Item", 400, 300) $idTreeView = GUICtrlCreateTreeView(80, 40, 200, 200, $iStyle, $WS_EX_CLIENTEDGE) GUISetState(@SW_SHOW) _CreateNormalImageList() _GUICtrlTreeView_SetNormalImageList($idTreeView, $g_hImage) _CreateStateImageList() _GUICtrlTreeView_SetStateImageList($idTreeView, $g_hStateImage) _GUICtrlTreeView_BeginUpdate($idTreeView) For $x = 0 To 9 $ahItem[$x] = _GUICtrlTreeView_Add($idTreeView, 0, StringFormat("[%02d] New Item", $x), 4, 5) _GUICtrlTreeView_SetStateImageIndex($idTreeView, $ahItem[$x], 1) For $y = 1 To 3 $aidChildItem[$iYRandItem] = _GUICtrlTreeView_AddChild($idTreeView, $ahItem[$x], StringFormat("[%02d] New Child", $y), 0, 3) _GUICtrlTreeView_SetStateImageIndex($idTreeView, $aidChildItem[$iYRandItem], 1) $iYRandItem += 1 Next Next _GUICtrlTreeView_EndUpdate($idTreeView) _GUICtrlTreeView_SelectItem($idTreeView, $ahItem[0]) _GUICtrlTreeView_SetStateImageIndex($idTreeView, $ahItem[0], 2) Local $idButton = GUICtrlCreateButton("show", 140, 272, 85, 25, $BS_DEFPUSHBUTTON) ; Loop until the user exits. Local $action While(1) $action = GUIGetMsg() If $action = $idButton Then $iXRand = _WinAPI_GetMousePosX(true, $Gui) - 80 ; Startposition TreeView (links) $iYRand = _WinAPI_GetMousePosY(true, $Gui) - 40 ; Startposition Treeview (oben) Local $handle = _GUICtrlTreeView_HitTestItem($idTreeView, $iXRand, $iYRand) Local $text = _GUICtrlTreeView_GetText($idTreeView, $handle) MsgBox($MB_SYSTEMMODAL, "Information", StringFormat("Hit Test Item (%d, %d): Handle: %s / Text: %s", $iXRand, $iYRand, $handle, $text)) EndIf If $action = $GUI_EVENT_CLOSE Then Exit EndIf WEnd EndFunc ;==>Example Func _GetHitString($iResult) If $iResult = 0 Then Return "No Item in Hit area" Else Return "Item Handle: " & $iResult EndIf EndFunc ;==>_GetHitString Func _CreateNormalImageList() $g_hImage = _GUIImageList_Create(16, 16, 5, 3) _GUIImageList_AddIcon($g_hImage, "shell32.dll", 110) _GUIImageList_AddIcon($g_hImage, "shell32.dll", 131) _GUIImageList_AddIcon($g_hImage, "shell32.dll", 165) _GUIImageList_AddIcon($g_hImage, "shell32.dll", 168) _GUIImageList_AddIcon($g_hImage, "shell32.dll", 137) _GUIImageList_AddIcon($g_hImage, "shell32.dll", 146) EndFunc ;==>_CreateNormalImageList Func _CreateStateImageList() $g_hStateImage = _GUIImageList_Create(16, 16, 5, 3) _GUIImageList_AddIcon($g_hStateImage, "shell32.dll", 3) _GUIImageList_AddIcon($g_hStateImage, "shell32.dll", 4) EndFunc ;==>_CreateStateImageList
-
-
Hallo,
nur noch mal für @alpines , der Datentyp in dem alles gespeichert wird der heißt Variant. Der heißt so, weil er unterschiedliche Datentypen aufnehmen kann, wie das folgende Beipiel zeigt.
AutoItLocal $array[] = [ "String", 0xFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 12.45, Binary("test"), Ptr(0x12341234) ] For $i = 0 to UBound($array) -1 ConsoleWrite("Type of $array[" & $i & "] = " & VarGetType($array[$i]) & @CRLF) Next
Das macht es auf der einen Seite einfach, da man sich keine Gedanken darüber machen muss welche Daten in den Variablen gespeichert werden. Auf der anderen Seite ist man aber auch selbst verantwortlich die richtigen Operationen mit den Daten durchzuführen.
-
Hallo,
poste uns deinen Beispielcode und wir schauen was falsch ist!
-
Hier mal ein Beipiel!
AutoIt
Alles anzeigen#include <GUIConstantsEx.au3> #include <MsgBoxConstants.au3> #include <WindowsConstants.au3> Global $datum, $name, $Neuername, $Dateiname $hGUI = GUICreate(" My GUI input acceptfile", 320, 120, @DesktopWidth / 2 - 160, @DesktopHeight / 2 - 45, -1, $WS_EX_ACCEPTFILES) Local $idFile = GUICtrlCreateInput("", 10, 5, 300, 20) Local $idBtn = GUICtrlCreateButton("Ok", 40, 75, 60, 20) GUISetState(@SW_SHOW) ; Loop until the user exits. While 1 Switch GUIGetMsg() Case $GUI_EVENT_CLOSE ExitLoop Case $idBtn If $Dateiname = "" Then MsgBox(262144,"Fehler", "Bitte Dateiname eingeben") ControlFocus($hGUI, "", $idFile) ContinueLoop EndIf ExitLoop Case $idFile $Dateiname = GUICtrlRead($idFile) If FileExists("I:\AIS_" & $datum & $Dateiname) Or FileExists("I:\AIS_" & $Dateiname) Then MsgBox(262144, "Namenskonflikt!", "Dieser Dateiname existiert bereits!") GUICtrlSetData($idFile, "") $Dateiname = "" ControlFocus($hGUI, "", $idFile) EndIf EndSwitch WEnd
-
Wenn der Dateiname in der GUI in einem Inputfeld steht kann auch direkt nach der Eingabe prüfen ob der Dateiname schon existiert.
-
Das mit Do ... Until üben wir aber nochmal!!!
AutoIt
Alles anzeigenGlobal $datum, $name, $Neuername, $Dateiname Do $name = -1 If FileExists("I:\AIS_" & $datum & $Dateiname) Or FileExists("I:\AIS_" & $Dateiname) Then $name = MsgBox(262144, "Namenskonflikt!", "Dieser Dateiname existiert bereits!") EndIf If $name = 1 Then $Neuername = InputBox("Name", "Bitte korrigieren Sie den Namen:", $Dateiname) $Dateiname = $Neuername EndIf Until $name = -1
@Spike_2015, prüfen ob eine Datei vorhanden ist geht mit FileExists
-
Hallo,
3 Fehler sind mir aufgefallen.
- $Importance = "Hight" gibt es nicht, sondern $Importance = "High"
-
der Port für mail.gmx.net ist 587Edit: geht doch mit Port 465 - Bei dem Aufruf von _INetSmtpMailCom fehlen 3 Parameter, muss so aufgerufen werden
_INetSmtpMailCom($SmtpServer, $FromName, $FromAddress, $ToAddress, $Subject, $Body, $AttachFiles, $CcAddress, $BccAddress, $Importance, $Username, $Password, $IPPort, $ssl)
Noch ein paar Tipps!
Ich würde mich nie auf ein einzelnen Ping verlassen. Es kann nämlich passieren das der erste Ping fehlschlägt, das hängt mit dem ARP Cache zusammen!
Besser ist ein Ping in einer Schleife mit Timeout z.B. soAutoItConst $TimeOut = 250 $TimeoutTimer = TimerInit() Do $PingDc = Ping($IPDC, 50) Until TimerDiff($TimeoutTimer >= $TimeOut) Or $PingDc > 0
Für einen ersten Check ist Ping in Ordnung, aber wenn der Rechner per Ping erreichbar ist heißt das noch lange nicht das die Dienste auch laufen.
Man sollte evtl. zusätzlich noch eine Überprüfung der Dienste z. B. via WMI-Abfrage einbauen. -
-
Hier mal meine Ergebnis, man muss aber dazu sagen das das Flag 2 bei StringReplace in v. 3.3.8.1 nicht korrekt funktioniert!
Brainfuck
Alles anzeigenStringlänge StringInstr StringRegExp Stringreplace Flag Version 52428651 7099.82039 392.227718 7231.45757 0 3.3.8.1 52428651 257.615768 381.800361 348.708896 1 3.3.8.1 52428651 4040.75187 431.941479 356.893755 2 3.3.8.1 (bei StringReplace fehlerhaft) 52428651 7105.72067 131.085533 7292.08044 0 3.3.12.0 52428651 250.236052 103.219036 414.398682 1 3.3.12.0 52428651 3993.45621 134.123424 4167.97025 2 3.3.12.0
Edit: Flag 2 bringt in der v. 3.3.8.1, bei StringReplace, die gleichen Ergebnisse wie Flag 1. Arbeitet also case sensitive.
-
welchen befehl nehme ich her dass wenn auf no gedrückt wird einfach die aktion abgebrochen wird und nicht das ganze skript endet?
wohl eher so!
AutoItif MsgBox(262196,"Sicher?","Wollen Sie diese Datei wirklich löschen?") = 6 then MsgBox(0, "ok", "datei wird gelöscht...") endif
Bei Ja wird die Msg ausgegeben ansonsten einfach weitergemachtDen code habe ich schon geschrieben jedoch weiß ich nicht an welche stelle ich ihn schreiben muss.
Der Code kommt in die While-Schleife. Aber der Button muss auch wieder aktivert werden wenn ein Dateiname in der Zeile steht!
Hier schematisch dargestellt!
-
Ein paar Tipps!
zum Code:
- vor FileDelete solltest du noch eine Sicherheitsabfrage à la "Sind sie sicher?" einbauen
-
FileDelete und FileRead sollten nur aufgerufen werden, wenn auch eine Datei ausgewählt wurde
und nicht wenn man z. B. auf Abbrechen drückt.
zum Style:
- schwarze Schrift auf dunkelrotem Hintergrund kann man nur schwer lesen
- die Controls sollten so groß sein das der Text auch hineinpasst
- Label zu den Controls, damit man auch weiss was das Control beinhaltet
-
Hallo,
hast schon mal die SuFu hier im Forum benutzt, bei den vielen Beispielen ist bestimmt was für dich dabei!
Noch eine Empfehlung von mir -> http://www.tty1.net/smart-questions_de.html#before
-
Ich habe mal dein Code etwas bereinigt!
Die Funktion FormatEuro schreibt die Zahl Formatiert in die Controls.
AutoIt
Alles anzeigen#include <Array.au3> #include <ButtonConstants.au3> #include <GUIConstants.au3> #include <GUIConstantsEx.au3> #include <Misc.au3> ; Summe 1, Summe 2 und Anzahl der Tage vorgeben. Anschließend Leistung61berechnen oder Leistung62berechnen anklicken; oder einfach ENTER $hGUI = GUICreate(@ScriptName, 400, 250, 150, 150) $Arbeitsentgelt = GUICtrlCreateInput("Summe1", 20, 20, 100, 20, $SS_CENTER) $Entgeltersatz = GUICtrlCreateInput("Summe2", 150, 20, 100, 20, $SS_CENTER) $diffausgabe = GUICtrlCreateInput("Tage", 280, 20, 100, 20, $SS_CENTER) $LeistungNach6 = GUICtrlCreateLabel("", 95, 150, 100, 20, $SS_CENTER) GUICtrlCreateLabel("Ergebnis:", 95, 130, 100, 20, $SS_CENTER) $hoechstsatzinput = GUICtrlCreateLabel("", 200, 150, 100, 20, $SS_CENTER) GUICtrlCreateLabel("Höchstsatz:", 200, 130, 100, 20, $SS_CENTER) $Leistung61berechnen = GUICtrlCreateButton("Leistung61berechnen", 20, 200, 180, 20, $SS_CENTER) $Leistung62berechnen = GUICtrlCreateButton("Leistung62berechnen", 200, 200, 180, 20, $SS_CENTER) $hoechsttext11 = GUICtrlCreateLabel("", 10, 80, 380, 20, $SS_CENTER) GUISetState(@SW_SHOW) Dim $multi[3] = [0, 215, 258] Func _Leistung6($iSatz) $Summe6 = Number(GUICtrlRead($Arbeitsentgelt)) + Number(GUICtrlRead($Entgeltersatz)) $days = Int(GUICtrlRead($diffausgabe)) $hoechstsatzoutput = $days * $multi[$iSatz] ConsoleWrite($Summe6 & ", " & $days & ", " & $hoechstsatzoutput & @CRLF) GUICtrlSetData($hoechstsatzinput, $hoechstsatzoutput) FormatEuro($hoechstsatzinput) If $Summe6 > $hoechstsatzoutput Then GUICtrlSetData($LeistungNach6, $hoechstsatzoutput) Else GUICtrlSetData($LeistungNach6, $Summe6) EndIf FormatEuro($LeistungNach6) GUICtrlSetData($hoechsttext11, "Höchsttagessatz " & $multi[$iSatz] & " € multiplitziert mit den Tagen") TrayTip("###-####", "Leistung nach § 6 ###, Höchstsatz " & $multi[$iSatz] & " €", 5) EndFunc ;==>_Leistung6 While 1 $msg = GUIGetMsg(1) Switch $msg[0] Case $Arbeitsentgelt FormatEuro($Arbeitsentgelt) Case $Entgeltersatz FormatEuro($Entgeltersatz) Case $Leistung61berechnen _Leistung6(1) Case $Leistung62berechnen _Leistung6(2) Case $GUI_EVENT_CLOSE Exit EndSwitch WEnd Func FormatEuro($hHandle) $szValue = StringReplace(GUICtrlRead($hHandle), ",", ".") GUICtrlSetData($hHandle, StringFormat("%.2f €", Number($szValue))) ; mit € ;~ GUICtrlSetData($hHandle, StringFormat("%.2f", Number($szValue))) ; ohne € EndFunc ;==>FormatEuro
-
Bitte nicht immer den kompletten vorherigen Beitrag zitieren, wir wissen auch so um was es geht. Zitiern ist nur für einzelne Textpassagen gedacht!
So sollte es gehen:
AutoIt
Alles anzeigen#include <Array.au3> #include <ButtonConstants.au3> #include <GUIConstants.au3> #include <GUIConstantsEx.au3> #include <Misc.au3> ; Summe 1, Summe 2 und Anzahl der Tage vorgeben. Anschließend Leistung61berechnen oder Leistung62berechnen anklicken; oder einfach ENTER $hGUI = GUICreate(@ScriptName, 400, 250, 150, 150) $Arbeitsentgelt = GUICtrlCreateInput("Summe1", 20, 20, 100, 20, $SS_CENTER) $Entgeltersatz = GUICtrlCreateInput("Summe2", 150, 20, 100, 20, $SS_CENTER) $diffausgabe = GUICtrlCreateInput("Tage", 280, 20, 100, 20, $SS_CENTER) $LeistungNach6 = GUICtrlCreateLabel("", 95, 150, 100, 20, $SS_CENTER) GUICtrlCreateLabel("Ergebnis:", 95, 130, 100, 20, $SS_CENTER) $hoechstsatzinput = GUICtrlCreateLabel("", 200, 150, 100, 20, $SS_CENTER) GUICtrlCreateLabel("Höchstsatz:", 200, 130, 100, 20, $SS_CENTER) $Leistung61berechnen = GUICtrlCreateButton("Leistung61berechnen", 20, 200, 180, 20, $SS_CENTER) $Leistung62berechnen = GUICtrlCreateButton("Leistung62berechnen", 200, 200, 180, 20, $SS_CENTER) $hoechsttext11 = GUICtrlCreateLabel("", 10, 80, 380, 20, $SS_CENTER) GUISetState(@SW_SHOW) Dim $multi[3] = [0, 215, 258] Func _Leistung61() Opt("GUIOnEventMode", 1) $Summe6 = Number(GUICtrlRead($Arbeitsentgelt)) + Number(GUICtrlRead($Entgeltersatz)) $days = Int(GUICtrlRead($diffausgabe)) $hoechstsatzoutput = $days * $multi[1] ConsoleWrite($Summe6 & ", " & $days & ", " & $hoechstsatzoutput & @CRLF) GUICtrlSetData($hoechstsatzinput, $hoechstsatzoutput) If $Summe6 > $hoechstsatzoutput Then GUICtrlSetData($LeistungNach6, $hoechstsatzoutput) Else GUICtrlSetData($LeistungNach6, $Summe6) EndIf GUICtrlSetData($hoechsttext11, "Höchsttagessatz 215 € multiplitziert mit den Tagen") TrayTip("###-####", "Leistung nach § 6 ###, Höchstsatz 215 €", 5) Opt("GUIOnEventMode", 0) EndFunc ;==>_Leistung61 Func _Leistung62() Opt("GUIOnEventMode", 1) $Summe6 = Number(GUICtrlRead($Arbeitsentgelt)) + Number(GUICtrlRead($Entgeltersatz)) $days = Int(GUICtrlRead($diffausgabe)) $hoechstsatzoutput = $days * $multi[2] ConsoleWrite($Summe6 & ", " & $days & ", " & $hoechstsatzoutput & @CRLF) GUICtrlSetData($hoechstsatzinput, $hoechstsatzoutput) If $Summe6 > $hoechstsatzoutput Then GUICtrlSetData($LeistungNach6, $hoechstsatzoutput) Else GUICtrlSetData($LeistungNach6, $Summe6) EndIf GUICtrlSetData($hoechsttext11, "Höchsttagessatz 258 € multiplitziert mit den Tagen") TrayTip("###-####", "Leistung nach § 6 ###, Höchstsatz 258 €", 5) Opt("GUIOnEventMode", 0) EndFunc ;==>_Leistung62 Func _convert6() GUICtrlSetData($Arbeitsentgelt, StringReplace(GUICtrlRead($Arbeitsentgelt), ",", ".")) GUICtrlSetData($Entgeltersatz, StringReplace(GUICtrlRead($Entgeltersatz), ",", ".")) EndFunc ;==>_convert6 While 1 $msg = GUIGetMsg(1) Switch $msg[0] Case $Leistung61berechnen _convert6() _Leistung61() Case $Leistung62berechnen _convert6() _Leistung62() Case $GUI_EVENT_CLOSE Exit EndSwitch WEnd
-
GUICtrlRead gibt einen String zurück, wenn man Strings vergleicht ist "30" größer als "200". Der Grund ist das Strings zeichenweise verglichen werden und die 3 ja größer ist als die 2. Um die Werte korrekt zu vergleichen musst du sie in eine Zahl umwandeln also einfach Int(GUICtrlRead(...)) benutzen dann sollte es gehen.
Sollte das nicht die Lösung sein dann bitte einen lauffähigen BeispielCode posten damit man es auch nachvollziehen kann.
PS: Bitte Doppelposts vermeiden. Einfach den letzten Beitrag editieren, wenn es noch keinen neuen gibt.
-
Alle Beiträge sind doppelt vorhanden (einmal mit Text und den Antworten und einmal ohne Text)!
Einige Beiträge habe ich gelöscht, weil ich dachte, dass es sich um fehlerhafte Beiträge handelt, aber das ist bei allen Beiträgen so.Die doppelten Themen ohne Beiträge sind jetzt wieder weg!
-
Hallo,
lass $WS_CHILD weg und schon gehts!
-
Hallo,
du weißt aber schon das du so nur eine Zeitangabe speichern kannst?
AutoIt
Alles anzeigen$tRet1 = _SomeFunc() Sleep(5000) $tRet2 = _SomeFunc() $tRetTime1 = DllStructCreate($tRet1.tagTime, $tRet1.Time) $tRetTime2 = DllStructCreate($tRet2.tagTime, $tRet2.Time) For $i = 1 To 6 ConsoleWrite('Return1 ' & $i & ': ' & DllStructGetData($tRetTime1, $i) & @CRLF) ConsoleWrite('Return2 ' & $i & ': ' & DllStructGetData($tRetTime2, $i) & @CRLF) Next Func _SomeFunc() Local $tagTime = 'char Year[4];char Month[2];char Day[2];char Hour[2];char Min[2];char Sec[2]' Local Static $tTime = DllStructCreate($tagTime) DllStructSetData($tTime, 'Year', @YEAR) DllStructSetData($tTime, 'Month', @MON) DllStructSetData($tTime, 'Day', @MDAY) DllStructSetData($tTime, 'Hour', @HOUR) DllStructSetData($tTime, 'Min', @MIN) DllStructSetData($tTime, 'Sec', @SEC) Local $t = DllStructCreate('struct;ptr Time;char tagTime[75];endstruct') DllStructSetData($t, 'Time', DllStructGetPtr($tTime)) DllStructSetData($t, 'tagTime', $tagTime) ; prüfen ob Struktur gefüllt und auslesbar Local $tCheck = DllStructCreate($t.tagTime, $t.Time) For $i = 1 To 6 ConsoleWrite('Check Feld ' & $i & ': ' & DllStructGetData($tCheck, $i) & @CRLF) Next Return $t EndFunc
Im obigen Beispiel sollte ja die Differenz zwischen Ret1 und Ret2 5 Sekunden betragen. Wie du aber in der Ausgabe siehst wird immer nur der letzte Zeitwert ausgeben, das liegt daran das du ja immer in den gleichen Speicherbereich schreibst.