1. Dashboard
  2. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team
    4. Mitgliedersuche
  3. Forenregeln
  4. Forum
    1. Unerledigte Themen
  • Anmelden
  • Registrieren
  • Suche
Alles
  • Alles
  • Artikel
  • Seiten
  • Forum
  • Erweiterte Suche
  1. AutoIt.de - Das deutschsprachige Forum.
  2. Mitglieder
  3. BugFix

Beiträge von BugFix

  • rekursivität :(

    • BugFix
    • 27. Oktober 2008 um 22:51

    Das hatte ich probiert, habs aber nicht lauffähig bekommen, deshalb der Umweg über die Globale Variable.
    Mach mal Pee ;)

    Edit:
    So war mein erster Gedanke

    [autoit]

    Func _Kapital($K0, $p, $n)
    If $n = 0 Then Return $K0
    $n -= 1
    _Kapital($K0 + ($K0 * $p / 100), $p, $n)
    EndFunc

    [/autoit]

    Da $K0 nach dem letzten Aufruf das Gesamtkapital darstellt (kann man in der ersten Zeile ausgeben lassen - stimmt), wäre es logisch diesen Wert mit Return zurückzugeben. Aber das verweigert AutoIt - gibt nur '0' aus. Und ich habe keinen Plan, wie ich den Wert außer über eine Globale Variable von der Funktion zurückbekomme.

  • mehrere listviews sortieren

    • BugFix
    • 27. Oktober 2008 um 22:24

    Hi,
    der Fehler liegt in der Sortiervariable ($B_DESCENDING). Diese wird nur vorab und nicht in der Funktion festgelegt.
    Wenn du 2 LV hast brauchst du zwei unterschiedlich Sortiervariablen.
    Hier mal ein Bsp.:

    Spoiler anzeigen
    [autoit]

    #include <GuiConstantsEx.au3>
    #include <GuiListView.au3>
    #include <WindowsConstants.au3>

    [/autoit] [autoit][/autoit] [autoit]

    Opt('MustDeclareVars', 1)

    [/autoit] [autoit][/autoit] [autoit]

    Global $hListView, $B_DESCENDING, $hListView1, $A_DESCENDING
    GUICreate("ListView SimpleSort", 400, 600)
    $hListView = GUICtrlCreateListView("col1|col2|col3", 2, 2, 394, 268)
    GUICtrlSendMsg($hListView, $LVM_SETEXTENDEDLISTVIEWSTYLE, $LVS_EX_GRIDLINES, $LVS_EX_GRIDLINES)
    GUICtrlSendMsg($hListView, $LVM_SETEXTENDEDLISTVIEWSTYLE, $LVS_EX_FULLROWSELECT, $LVS_EX_FULLROWSELECT)
    GUICtrlCreateListViewItem("line4|5|more_a", $hListView)
    GUICtrlCreateListViewItem("line5|4.50 |more_c", $hListView)
    GUICtrlCreateListViewItem("line5|4.0 |more_c", $hListView)
    GUICtrlCreateListViewItem("line3|23|more_e", $hListView)
    GUICtrlCreateListViewItem("line2|0.34560 |more_d", $hListView)
    GUICtrlCreateListViewItem("line1|1.0 |more_b", $hListView)
    GUICtrlCreateListViewItem("line1|0.1 |more_b", $hListView)
    GUICtrlCreateListViewItem("line1|10|more_b", $hListView)
    _GUICtrlListView_SetColumnWidth($hListView, 0, 75)
    _GUICtrlListView_SetColumnWidth($hListView, 1, 75)
    _GUICtrlListView_SetColumnWidth($hListView, 2, 75)
    $hListView1 = GUICtrlCreateListView("col1|col2|col3", 2, 300, 394, 268)
    GUICtrlSendMsg($hListView1, $LVM_SETEXTENDEDLISTVIEWSTYLE, $LVS_EX_GRIDLINES, $LVS_EX_GRIDLINES)
    GUICtrlSendMsg($hListView1, $LVM_SETEXTENDEDLISTVIEWSTYLE, $LVS_EX_FULLROWSELECT, $LVS_EX_FULLROWSELECT)
    GUICtrlCreateListViewItem("line1|X|more_T", $hListView1)
    GUICtrlCreateListViewItem("line2|Z|more_S", $hListView1)
    GUICtrlCreateListViewItem("line3|A|more_P", $hListView1)
    _GUICtrlListView_SetColumnWidth($hListView1, 0, 75)
    _GUICtrlListView_SetColumnWidth($hListView1, 1, 75)
    _GUICtrlListView_SetColumnWidth($hListView1, 2, 75)
    GUISetState()

    [/autoit] [autoit][/autoit] [autoit]

    GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY")
    Global $B_DESCENDING[_GUICtrlListView_GetColumnCount($hListView)]
    Global $A_DESCENDING[_GUICtrlListView_GetColumnCount($hListView1)]

    [/autoit] [autoit][/autoit] [autoit]

    Do
    Until GUIGetMsg() = $GUI_EVENT_CLOSE
    GUIDelete()

    [/autoit] [autoit][/autoit] [autoit]

    Func WM_NOTIFY($hWnd, $iMsg, $iwParam, $ilParam)
    #forceref $hWnd, $iMsg, $iwParam
    Local $hWndFrom, $iIDFrom, $iCode, $tNMHDR, $hWndListView, $hWndListView1, $tInfo
    $hWndListView = $hListView
    If Not IsHWnd($hListView) Then $hWndListView = GUICtrlGetHandle($hListView)
    $hWndListView1 = $hListView1
    If Not IsHWnd($hListView1) Then $hWndListView1 = GUICtrlGetHandle($hListView1)

    $tNMHDR = DllStructCreate($tagNMHDR, $ilParam)
    $hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom"))
    $iIDFrom = DllStructGetData($tNMHDR, "IDFrom")
    $iCode = DllStructGetData($tNMHDR, "Code")
    If ($hWndFrom = $hWndListView) And ($iCode = $LVN_COLUMNCLICK) Then
    $tInfo = DllStructCreate($tagNMLISTVIEW, $ilParam)
    _GUICtrlListView_SimpleSort($hWndListView, $B_DESCENDING, DllStructGetData($tInfo, "SubItem"))
    ElseIf ($hWndFrom = $hWndListView1) And ($iCode = $LVN_COLUMNCLICK) Then
    $tInfo = DllStructCreate($tagNMLISTVIEW, $ilParam)
    _GUICtrlListView_SimpleSort($hWndListView1, $A_DESCENDING, DllStructGetData($tInfo, "SubItem"))
    EndIf
    EndFunc ;==>WM_NOTIFY

    [/autoit]
  • Zeit Lösung (simple) need help

    • BugFix
    • 27. Oktober 2008 um 21:58
    Zitat von rebell

    Was soll da aber das Sleep 10000 =??

    Das Skript fragt dann nur alle 10 Sekunden die Zeit ab. Eine größere Genauigkeit wirst du wohl nicht brauchen. Ich würde es sogar auf eine Minute setzen.

  • rekursivität :(

    • BugFix
    • 27. Oktober 2008 um 21:56

    Freut mich, wenn es dir ein Lichtlein entzündet hat :rofl: - immer wieder gern.

  • Zeit Lösung (simple) need help

    • BugFix
    • 27. Oktober 2008 um 21:52

    Wenn das Skript erst nach 23 Uhr starten soll, einfach am Skriptanfang:

    [autoit]

    Do
    Sleep(10000)
    Until @HOUR = 23

    [/autoit][autoit][/autoit][autoit]

    ; dein weiterer Code

    [/autoit]

    24 Uhr kannst du nicht abfragen - gibt es nicht wirklich:
    23:59:59
    00:00:00

  • rekursivität :(

    • BugFix
    • 27. Oktober 2008 um 21:23

    OK, die Lösung ist so einfach, dass du dich in den Hintern beißen wirst ;)

    [autoit]

    Global $K0 = 1000
    Global $p = 2.5
    Global $n = 5
    Global $K

    [/autoit][autoit][/autoit][autoit]

    _Kapital($K0, $p, $n)

    [/autoit][autoit][/autoit][autoit]

    MsgBox(0, 'Gesamtkapital', Round($K, 2) & ' €')

    [/autoit][autoit][/autoit][autoit]

    Func _Kapital($K0, $p, $n)
    If $n = 0 Then
    $K = $K0
    Return
    EndIf
    $n -= 1
    _Kapital($K0 + ($K0 * $p / 100), $p, $n)
    EndFunc

    [/autoit]

    Wichtig: du kannst aus einer Rekursiven Funktion keinen Wert zurückgeben, deshalb die Globale Deklaration von $K.

  • rekursivität :(

    • BugFix
    • 27. Oktober 2008 um 20:12

    Mal als Tipp, (bischen sollst du ja auch machen ;) )
    Ein rekursives Programm ruft sich selbst auf. Also erstellst du eine Funktion, die den Zinswert für einen Basiszeitraum errechnet. Das Ergebnis wird dem Ausgangswert hinzugefügt und damit die Funktion in sich selbst aufgerufen - sooft, wie der Basiszeitraum im gewünschten Zeitraum vorhanden.

  • Assoziatives Array - pur AutoIt , Aufatmen für "Arrayverweigerer" ;-)

    • BugFix
    • 27. Oktober 2008 um 17:22

    Ich habe es jetzt erst mal für 1D-Array erstellt. 2D ist auch machbar, aber wer sich bisher vor Array "gedrückt" hat (und um diese Zielgruppe anzulocken, habe ich die UDF erstellt), wird vorerst vor 2D-Array noch zurückschrecken. :D

  • Shoutbox auslesen

    • BugFix
    • 26. Oktober 2008 um 21:37

    Schau dir doch GtaSpiders Code an.

  • Help-GUI erstellen?

    • BugFix
    • 26. Oktober 2008 um 20:06

    Super Tipp mit dem Help Maker. Der integrierte Iconmaker ist auch absolute Spitze. :thumbup::thumbup:

  • Shoutbox auslesen

    • BugFix
    • 26. Oktober 2008 um 19:37

    Hier ist die Seite, von der du den Inhalt lesen kannst: http://www.autoit.de/index.php?page=ShoutboxContent
    Das Senden geht auch - aber ich bin mir nicht sicher ob ich das publizieren möchte. Ein Spambot für die Shoutbox ist etwas, worauf wir wohl alle verzichten können (und wollen). ;)

  • lieber "Controlsend" als "Send", aber geht nicht

    • BugFix
    • 26. Oktober 2008 um 17:58

    Ja, es handelt sich hier also um ein von der Softwarefirma selbst erstelltes Control, auf das Windows mit Standardroutinen keinen Zugriff hat. Das behält sich die Software explizit vor. Ist halt Pech - oder wie die Briten sagen: Shit happens.

  • Dim , Local , Global

    • BugFix
    • 26. Oktober 2008 um 17:40

    Nö, genau das nicht, da es ziemlich schwammig definiert ist vom Namespace her.
    Nimm für Variablen, die im Skript und zusätzlich in Funktionen genutzt werden Global, sonst Local.

  • lieber "Controlsend" als "Send", aber geht nicht

    • BugFix
    • 26. Oktober 2008 um 17:36

    Mit Send kannst du einfach an ein Fenster senden, ControlSend erwartet aber als Ziel ein.. Control. ;)
    (z. B. wie im Hilfebsp. die CtrlID des Notepad-Editfeldes)

  • Dim , Local , Global

    • BugFix
    • 26. Oktober 2008 um 17:29
    Zitat von Hilfe AutoIt

    The difference between Dim, Local and Global is the scope in which they are created:
    Dim = Local scope if the variable name doesn't already exist globally (in which case it reuses the global variable!)
    Global = Forces creation of the variable in the Global scope
    Local = Forces creation of the variable in the Local/Function scope

  • Verzweiflung: Decompiling von Autoit Programmen in aktueller Version

    • BugFix
    • 26. Oktober 2008 um 15:49

    Das ist grundsätzlich nicht möglich (und das ist gewollt). Das sind halt Dinge auf die man Obacht geben sollte.
    Kann man nur sagen: Pech gehabt. :S

  • PDF´s in Reihenfolge drucken.

    • BugFix
    • 26. Oktober 2008 um 14:48

    Kommandozeilendruck mit PDF-Creator auf anderen Printer hab ich noch nicht probiert, halte ich aber für möglich.
    Vielleicht hilft dir das ja weiter: PDF Toolkit.

    Edit:
    Zur Erklärung warum ich das Toolkit vorschlage: Damit kannst du recht zügig alle deine Dokumente in der gewünschten Reihenfolge zu einem Dokument zusammenfassen, welches du dann druckst - und schon stimmt die Reihenfolge.

  • Assoziatives Array - pur AutoIt , Aufatmen für "Arrayverweigerer" ;-)

    • BugFix
    • 26. Oktober 2008 um 13:53

    Hier mal noch ( als kleiner Service :D ), die UserCallTipps für die Funktionen.
    Im Ordner '..\SciTE\api\' die Datei 'au3.user.calltips.api' öffnen, oder wenn nicht vorhanden - erstellen, und die folgenden Zeilen anfügen:

    Calltips
    Code
    _AssocArray_Create($CaseSensitive=-1)erstellt assoziatives Array, CaseSensitiv: aus(Standard)/ein (-1/1) #include <AssocArray.au3>
    _AssocArray_Pref($Handle)Gibt die Eigenschaft (CaseSensitiv) zurück. #include <AssocArray.au3>
    _AssocArray_Add($Handle, $Wert)Fügt einen Wert zum Array hinzu. #include <AssocArray.au3>
    _AssocArray_AddColl($Handle, $Kollektion, $Trennzeichen=Default, $Ignore_0=True)Fügt 1D-Array od. mit Trennzeichen von Opt("GUIDataSeparatorChar") gesplitteten String zum Array. #include <AssocArray.au3>
    _AssocArray_Insert($Handle, $Index, $Wert)Fügt einen Wert am gegebenen Index ein. #include <AssocArray.au3>
    _AssocArray_Count($Handle)Gibt die Anzahl der Elemente im Array zurück. #include <AssocArray.au3>
    _AssocArray_DelByName($Handle, $Wert, $All=False)Löscht ersten Eintrag=Wert, $All=True löscht alle Einträge=Wert. #include <AssocArray.au3>
    _AssocArray_DelByIndex($Handle, $Index)Löscht den Eintrag am Index. #include <AssocArray.au3>
    _AssocArray_Clear($Handle)Löscht alle Elemente aus dem Array. #include <AssocArray.au3>
    _AssocArray_Sort($Handle, $Richtung=0)Sortiert alle Elemente des Array auf-/absteigend (0/1). #include <AssocArray.au3>
    _AssocArray_ToString($Handle, $Trennzeichen=Default)Rückgabe String mit allen Elementen, Trennzeichen von Opt("GUIDataSeparatorChar"). #include <AssocArray.au3>
    _AssocArray_GetItem($Handle, $Index)Gibt den Wert an der Indexposition zurück. #include <AssocArray.au3>
    _AssocArray_GetRange($Handle, $Index, $Anzahl)Gibt ab Index Anzahl Elemente als Assoziatives Array zurück. #include <AssocArray.au3>
    _AssocArray_SetRange($Handle, $EinfügeArray, $Index, $Ignore_0=True)Kopiert Elemente eines Einfüge-Array über einen Bereich im Array, bei Bedarf wird Basisarray erweitert. #include <AssocArray.au3>
    _AssocArray_InsertRange($Handle, $EinfügeArray, $Index, $Ignore_0=True)Fügt an Indexposition ein Einfüge-Array ein. #include <AssocArray.au3>
    _AssocArray_Search($Handle, $Wert)Gibt TRUE zurück, wenn Wert im Array enthalten, sonst FALSE. #include <AssocArray.au3>
    _AssocArray_GetIndex($Handle, $Wert)Rückgabe Index des ersten Eintrags=Wert. #include <AssocArray.au3>
    _AssocArray_LastIndexOf($Handle, $Wert, $Von=1, $Bis=0)Rückgabe Index des letzten Eintrags=Wert in Array od. Bereich. #include <AssocArray.au3>
    _AssocArray_RemoveRange($Handle, $Index, $Anzahl=0)Löscht Anzahl Elemente ab Index, mit Anzahl=0 wird Rest ab Index gelöscht. #include <AssocArray.au3>
    _AssocArray_Reverse($Handle, $Von=1, $Bis=0)Kehrt die Reihenfolge der Elemente im Array od. Bereich um. #include <AssocArray.au3>
    Alles anzeigen
  • Erweiterte Dateiinfo (eine Datei od. alle eines Ordners)

    • BugFix
    • 26. Oktober 2008 um 10:32

    Hi,
    ich kann mich erinnern, dass mal jemand nach einer Möglichkeit zur Abfrage der erweiterten Dateiinformationen gesucht hatte.
    Hier nun die entsprechende Funktion dafür.
    Einfach mit dem Pfad der Datei / des Ordners aufrufen, die Unterscheidung erfolgt in der Funktion automatisch.
    Zurückgegeben wird ein 34-spaltiges Array mit allen Informationsfeldern. Die erste Zeile enthält den Namen der Eigenschaft (sofern von MS hinterlegt).

    Spoiler anzeigen
    [autoit]

    #include<array.au3>

    [/autoit] [autoit][/autoit] [autoit]

    $Path = @ScriptFullPath ; @ScriptDir
    $ret = _FileInfoExtended($Path)
    _ArrayDisplay($ret)

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Func _FileInfoExtended($FolderOrFile)
    If Not FileExists($FolderOrFile) Then Return SetError(1)
    Local $objShell = ObjCreate("Shell.Application")
    Local $arrHeaders[34], $Type = 'F'
    If StringInStr(FileGetAttrib($FolderOrFile), 'D') Then
    Local $objFolder = $objShell.Namespace($FolderOrFile)
    $Type = 'D'
    Else
    Local $objFSO = ObjCreate("Scripting.FileSystemObject")
    Local $objFile = $objFSO.GetFile($FolderOrFile)
    Local $FileName = $objFSO.GetFileName($objFile)
    Local $objFolder = $objShell.Namespace($objFSO.GetParentFolderName($objFile))
    EndIf
    Local $arRet[1][34]
    For $i = 0 To 33
    $arrHeaders[$i] = $objFolder.GetDetailsOf($objFolder.Items, $i)
    $arRet[0][$i] = $arrHeaders[$i]
    Next
    For $strFileName In $objFolder.Items
    If $Type = 'F' And $objFolder.GetDetailsOf($strFileName, 0) <> $FileName Then ContinueLoop
    ReDim $arRet[UBound($arRet)+1][34]
    For $i = 0 to 33
    $arRet[UBound($arRet)-1][$i] = $objFolder.GetDetailsOf($strFileName, $i)
    Next
    Next
    Return $arRet
    EndFunc

    [/autoit]
  • PDF´s in Reihenfolge drucken.

    • BugFix
    • 26. Oktober 2008 um 09:11

    Mal als alternativer Gedanke:
    Versuche doch mal, ob es mit PDF-Creator wie gewollt funktioniert. Ich kann es bei mir nicht in der Form testen, da mir die Netzwerkumgebung fehlt.
    Läßt sich prima über Commandline-Parameter steuern, als Netzwerkdrucker installierbar.

Spenden

Jeder Euro hilft uns, Euch zu helfen.

Download

AutoIt Tutorial
AutoIt Buch
Onlinehilfe
AutoIt Entwickler
  1. Datenschutzerklärung
  2. Impressum
  3. Shoutbox-Archiv
Community-Software: WoltLab Suite™