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

  • Ini in 3D Array einlesen?

    • BugFix
    • 6. September 2009 um 17:02

    Guckst du:

    [autoit]

    Local $INI = @ScriptDir & '\Deine.INI'
    Local $section = 'section_name'
    Local $aSection = IniReadSection($INI, $section)
    Local $aIni[$aSection[0][0]][3]
    For $i = 1 To UBound($aSection) -1
    $aIni[$i-1][0] = $section
    $aIni[$i-1][1] = $aSection[$i][0]
    $aIni[$i-1][2] = $aSection[$i][1]
    Next
    _ArrayDisplay($aIni)

    [/autoit]
  • Ini in 3D Array einlesen?

    • BugFix
    • 6. September 2009 um 16:23

    Ich verstehe nicht den Sinn. Was soll denn da in der dritten Dimension gespeichert werden?
    Meinst du tatsächlich 3D oder eher 2D mit einem zusätzlichen Element in der zweiten Dimension, also einer weiteren Spalte?

  • BIOS mag keine Bootmediumsauswahl mehr anbieten!?

    • BugFix
    • 6. September 2009 um 16:18

    Da du nicht ins BIOS kommst, versuch mal ob evtl. in der Bootreihenfolge USB vor der HD liegt. Also 'nen Stick bootfähig machen. Linux drauf und testen. Da hast du dann villeicht die Chance über Tools Infos aus dem BIOS zu lesen und evtl. auch Werte zu setzen.
    Ansonsten mal noch etwas, was ich von Dell kenne:
    - Num on
    - Capslock on
    Und dann: Alt+E+F+B
    Steht für Emergency Flash Back und setzt das BIOS zurück auf Werkseinstellung.
    Inwiefern das bei anderen Fabrikaten funktioniert ist wohl fraglich, aber einen Versuch ist es Wert.
    Viel Glück.

  • Mathematisches Problem IParam-Speicherung

    • BugFix
    • 6. September 2009 um 10:51

    Ja Danke. Mit 'int_ptr' funktioniert es nun. :)
    Nun muß ich nur noch testen ob (bzw. wie sehr) mich das zusätzliche Auslesen aus der Struktur bremst.
    So habe ich es jetzt gelöst:

    Spoiler anzeigen
    [autoit]

    #include <Array.au3>
    #include <GuiListView.au3>
    Global $aItemParam[1]
    Local $col = ''
    For $i = 1 To 120
    $col &= $i & '|'
    Next

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

    $gui = GUICreate('')
    $lv = GUICtrlCreateListView(StringTrimRight($col,1), 10, 10, 200, 150)
    $hLV = GUICtrlGetHandle($lv)

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

    _createNewItem($hLV, 'Test', $aItemParam)

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

    _markSubItem($aItemParam, $hLV, 0, 1)
    _markSubItem($aItemParam, $hLV, 0, 119)

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

    For $i = 0 To _GUICtrlListView_GetColumnCount($hLV)-1
    ConsoleWrite($i & ' - ' & _getMarked($hLV, 0, $i) & @CRLF)
    Next

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

    Func _createNewItem($hWnd, $sText, ByRef $aIParam, $iItem=-1) ; if $iItem=-1 append
    If $iItem < -1 Then $iItem = 0
    If $iItem > UBound($aIParam)-1 Then $iItem = -1
    Local $cntCOL = _GUICtrlListView_GetColumnCount($hWnd)
    Local $tagITEMPARAM = "int_ptr;char[" & $cntCOL & "]"
    Local $tITEMPARAM = DllStructCreate($tagITEMPARAM)
    DllStructSetData($tITEMPARAM, 1, DllStructGetPtr($tITEMPARAM, 2))
    For $i = 1 To $cntCOL
    DllStructSetData($tITEMPARAM, 2, '0', $i)
    Next
    If $iItem = -1 Then
    _GUICtrlListView_AddItem($hWnd, $sText)
    If $aIParam[UBound($aIParam)-1] Then ReDim $aIParam[UBound($aIParam)+1]
    $aIParam[UBound($aIParam)-1] = $tITEMPARAM
    _GUICtrlListView_SetItemParam($hWnd, 0, DllStructGetData($tITEMPARAM, 1))
    Else
    _GUICtrlListView_InsertItem($hWnd, $sText, $iItem)
    _ArrayInsert($aIParam, $iItem, $tITEMPARAM)
    _GUICtrlListView_SetItemParam($hWnd, $iItem, DllStructGetData($tITEMPARAM, 1))
    EndIf
    EndFunc

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

    Func _markSubItem(ByRef $aIParam, $hWnd, $iItem, $iSubItem, $mark='1')
    If $mark <> '1' Then $mark = '0'
    If $iItem < 0 Or $iItem > _GUICtrlListView_GetItemCount($hWnd)-1 Then Return SetError(1,0,0)
    If $iSubItem < 0 Or $iSubItem > _GUICtrlListView_GetColumnCount($hWnd)-1 Then Return SetError(2,0,0)
    DllStructSetData($aIParam[$iItem], 2, $mark, $iSubItem+1)
    EndFunc

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

    Func _getMarked($hWnd, $iItem, $iSubItem)
    Local $ptr = _GUICtrlListView_GetItemParam($hWnd, $iItem)
    Local $struct = DllStructCreate("char[" & _GUICtrlListView_GetColumnCount($hWnd) & "]", $ptr)
    Return DllStructGetData($struct, 1, $iSubItem+1)
    EndFunc

    [/autoit]
  • etwas auf einer liste ausgeben

    • BugFix
    • 5. September 2009 um 22:22

    Bitte, bitte sag, dass das keine Brute-Force-Attacke wird. :cursing:

  • Deutsche Hilfe - was gibts zu optimieren?

    • BugFix
    • 5. September 2009 um 15:13

    Ich denke auch, dass man Begriffe, deren Bedeutung perse klar ist, nicht in die deutsche Sprache zwängen sollte.
    Computer auf deutsch: Rechenknecht :rofl:

  • DllCall und Array als Parameter

    • BugFix
    • 5. September 2009 um 11:17

    bernd670 : Danke für das Bsp.. Ich werde das gleich mal noch verallgemeinern und dem Dll-Tut hinzufügen.

  • DllCall und Array als Parameter

    • BugFix
    • 4. September 2009 um 22:06

    Schau mal hier.

  • UDF-Sammlung: Objekt Dictionary

    • BugFix
    • 4. September 2009 um 21:37
    Zitat von Raupi

    as Script kann die Datei au3.keywords.abbreviations.properties nicht finden.
    Ist die bei der Autoit v 3.3.0.0 nicht mehr enthalten ?


    Es wurden zwar einige Pfade in SciTE mal geändert, aber die Datei existiert noch:
    C:\Programme\AutoIt3\SciTE\Properties\au3.keywords.abbreviations.properties
    Falls sie nicht da ist - probier doch mal sie einfach zu erstellen.

  • Combobox-Inhalt auswählen

    • BugFix
    • 3. September 2009 um 22:29

    Wenn du alle Varianten von ControlCommand ausgetestet hast, dann mußt du wohl oder übel davon ausgehen, dass dieses Control sich nicht mit AutoIt steuern läßt. Kommt vor.

  • Wie bekomme ich mehrer Hexwerte in eine Ini, ohne für jeden einen Schlüssel erstelln zu müssen.

    • BugFix
    • 3. September 2009 um 22:26

    Ihm geht es um die Schlüsselnamen. - Richtig?
    Du kannst doch für alle Werte denselben Schlüsselnamen verwenden. Mach ich auch oft. Einlesen und Schreiben mit INIRead(Write)Section.
    Da spielt es keine Rolle, dass alle Schlüssel-Wert-Paare denselben Schlüssel verwenden.

  • Au3/Schwert Shell

    • BugFix
    • 3. September 2009 um 21:54

    Nicht so kompliziert. ;)

    [autoit]

    Run(@AutoItExe [/ErrorStdOut] '/AutoIt3ExecuteLine' "command line")

    [/autoit]
  • On Error Goto....gibt es so etwas auch in AutoIt?

    • BugFix
    • 3. September 2009 um 21:01
    Zitat von Andy

    Aber wenn in einem kompilierten Script z.B. ein unvorhergesehener Fehler auftritt


    Versteh mich nicht falsch, aber unvorhergesehene Fehler gibt es nicht wirklich. Ich habe die Erfahrung gemacht, dass in der Regel ich der Trottel war, der vergessen hat ein mögliches Fehlerszenario zu berücksichtigen. :D
    Es ist leider so, das ein Skript zu 1/3 aus Programm und zu 2/3 aus Errorhandling besteht, wenn du alle Usergemeinheiten abfangen willst. ;)

  • Drucker mit Strg+p aufrufen

    • BugFix
    • 2. September 2009 um 21:27

    Also es würde erstmal helfen, wenn du dein Problem in verständlichem deutsch darstellst.
    Ansonsten schau mal in der Hilfe unter UDF: "Word Management"

  • Mathematisches Problem IParam-Speicherung

    • BugFix
    • 2. September 2009 um 20:22
    Zitat von Greenhorn

    Das ist auch die normale Vorgehensweise ... ;)


    ...die nicht angewendet werden kann, da IParam ausschließlich ein Integerwert sein muß. Und ein Pointer ist nun mal ein Pointer und kein Integerwert. Das war übrigens mein erster Gedanke und aufgrund der Bedingungen auch entsprechend der Mißerfolg. :(

  • Probleme mit InputBox-Rückgabewerten

    • BugFix
    • 1. September 2009 um 22:52
    Zitat von heenzketchup

    also da würde 1 bzw 2 als Zahl reichen, hab ich das richtig verstanden?


    Das kannst du bei zwei Werten tun, denn wenn der eine nicht zutrift kann es nur der andere sein.

    [autoit]

    If MsgBox(1, '','...') = 1 Then
    ;....Code
    Else ; kann dann nur 2 sein
    ;....Code
    EndIf

    [/autoit]
  • Mathematisches Problem IParam-Speicherung

    • BugFix
    • 1. September 2009 um 22:11

    Danke progandy, für den Beitrag. Leider bringt die Funktion keinen Gewinn (na OK - eine Spalte mehr). Denn der Offset ist 2^32 und danach bricht die Funktion mit Overflow ab.
    OK, gibts wohl keinen Weg. Trotzdem Danke, dass ihr euch Gedanken gemacht habt.

  • Mathematisches Problem IParam-Speicherung

    • BugFix
    • 1. September 2009 um 20:50
    Zitat von Andy

    im Prinzip möchter er 60 verschiedene "Zustände" in einer Integer-Zahl speichern.


    Wenn es das wäre, wär es nicht so schwierig. Das ließe sich mit Bernds Empfehlung regeln.
    Es sind aber bei 30 Werten schon wesentlich mehr Zustände: alle Kombinationen von 0 bis 29. (Dürfte 30! sein ?). Leider läßt sich in IParam ausschließlich ein Integerwert speichern. Sonst hätte ich den Zustand einfach in einem '01'-String abgelegt.

    Mein Problem ist also, dass ich die Information des positiven Integerwertes auch brauche, wenn ich einen negativen Wert verwende. Das war ja meine Überlegung, den Zahlenbereich zu strecken.
    Grundsätzlich könnte ich mir die IParam-Geschichte sparen und gleich auf das Array mit den Format-Infos zugreifen. Aber das wollte ich vermeiden, weil bei großer Elementanzahl jeder Schreib- oder Lesezugriff sich in der Performance bemerkbar macht.

  • Mathematisches Problem IParam-Speicherung

    • BugFix
    • 1. September 2009 um 09:34

    Hi,
    irgendwie habe ich schon 'nen Knoten im Hirn - aber ich komme einfach auf keine Lösung.

    Für die Formatierung von Listview-SubItem nutze ich als Informationsträger, ob ein SubItem benutzerdefiniert formatiert wurde, den IParam des Item. IParam erlaubt mir einen Integerwert zu speichern.
    Um also Infos zu mehreren Spalten (SubItem) des Items zu hinterlegen speichere ich in IParam die Summe von 2^SpaltenIndex für jede betroffene Spalte.
    Den Wert von IParam muß ich dann allerdings noch verschieben, damit es keine Kollisionen mit niedrigen Control-ID gibt. Dazu addiere ich einfach ein Shift von 9999.
    Somit kann ich die Informationen für max. 30 Spalten (Index 0-29) hinterlegen - dann falle ich aus dem Integerbereich raus.
    Und hier setzt nun meine Überlegung an: Wie kann ich mir den negativen Zahlenbereich mit 'einverleiben'?
    Ich brauche irgendeine Möglichkeit um zu definieren:
    Wenn IParam negativ ist, berechne mit Algorithmus X den Wert der für SpaltenIndex 0-29 zuständig ist. Als zweiter Wert ergibt sich ein 'Zeiger' auf 2 hoch 30 und höher. Denn intern kann ich ja mit größeren Zahlen rechnen, nur Speichern in IParam geht nicht.
    Versucht habe ich schon einige Sachen, aber ich bekomme nichts eineindeutiges gebacken. Den Wert reinrechnen ist das Eine, ich muß ihn natürlich mit einer Umkehrmethode auch wieder zurückrechnen können.
    Ziel ist immer die Abfragevariante (nach ermitteln des tatsächlichen IParam):

    [autoit]

    If BitAND($IParam, 2^$SpaltenIndex) Then

    [/autoit]

    Hier mal noch ein kleines Skriptbsp. zum Durchspielen der Werte:

    [autoit]

    #include <GuiListView.au3>
    $gui = GUICreate('')
    $lv = GUICtrlCreateListView('a|b|c', 10, 10, 200, 150)
    $hLV = GUICtrlGetHandle($lv)
    GUICtrlCreateListViewItem(' | | ', $lv) ; Anzahl Spalten z. Test unwichtig

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

    $IParam = 0
    $shift = 9999 ; IParam muß größer 9999 sein
    For $i = 0 To 30 ; letzter gültiger Spalten-Index ist 29
    ConsoleWrite('2 hoch ' & $i & @TAB & 2^$i & @CRLF)
    $IParam += 2^$i
    ; für negativen Bereich wäre das dann
    ;~ $IParam -= 2^$i ; <== das funktioniert dann bis 30 und Shift wäre nich nötig
    ConsoleWrite('set Summe $IParam: ' & $IParam & @CRLF)
    _GUICtrlListView_SetItemParam($hLV, 0, $IParam+$shift)
    ConsoleWrite('get Summe $IParam: ' & _GUICtrlListView_GetItemParam($hLV, 0)-$shift & @CRLF & @CRLF)
    Next

    [/autoit]
  • Array2DInsert umsetzungsproblem

    • BugFix
    • 31. August 2009 um 22:36

    "_Array2DInsert($aArray, 12, "Wert|Wert2|Wert3|wert4|variable") ; 12 sollte eigentlich der Wert sein für [1][2]"

    Das geht so nicht! Schau dir die Funktionsdeklaration noch mal an:
    _Array2DInsert(ByRef $avArray, $iElement [, $sValue=''])
    $avArray - dein Array
    $iElement - 0-basierter ArrayIndex, zum Einfügen des neuem Elements
    (optional) $sValue - Wert(e) des neuen Elements, getrennt mit '|'

    Insert bedeutet, du fügst ein neues Element (Zeile) in dein Array ein. Du mußt also die Werte für alle enthaltenen Spalten angeben!
    Wenn du also an ZeilenIndex 1 ein neues Element einfügst und nur in SpaltenIndex 2 die 12 eintragen möchtest bei insgesamt 5 Spalten, wäre das folgende Syntax:

    [autoit]

    _Array2DInsert($aArray, 1, "0|0|12|0|0")

    [/autoit]

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™