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. Blubkuh

Beiträge von Blubkuh

  • Anfängerfrage zu SQLite

    • Blubkuh
    • 4. April 2014 um 22:32
    Zitat von gofid

    Danke Dir vielmals für deine Hilfe und Erklärungen, Skerg.

    Leider hat das bei mir nicht automatisch funktioniert, erst nachdem ich manuell die SQLite.dll in den System32 Ordner kopiert habe, wurde die Datenbankdatei erstellt. Aber Hauptsache es geht jetzt und ich kann weiter machen. :thumbup:

    Gruss
    gofid

    Man muss Adminrechte haben um die sqlite3.dll in den Systemordner zu packen. das war wahrscheinlich das Problem

  • Problem mit Schleife, endet nicht

    • Blubkuh
    • 4. April 2014 um 22:26
    [autoit]


    Local $limit = 0
    While $limit = 0
    $limit=_ImageSearch("limit.png",1,$lx,$ly,0)
    If $limit=1 Then
    MsgBox(0, "Limit", "Limit")
    EndIf
    WEnd

    [/autoit]
  • ISN AutoIt Studio

    • Blubkuh
    • 2. April 2014 um 20:32
    Zitat von rynow

    Wenn du die .isf Datei mit einem Notpad öffnest, merkst du das keine Includes vorhanden sind.
    Selbstverständlich macht es Sinn, diese direkt in die .isf mit reinzupacken. Mal sehen was ISI360 dazu sagt.


    Wird wahrscheinlich in der nächsten Version dabei sein. Hab die Aufgabe über den Bugtracker hinzugefügt und ISI hat folgendes dazu gesagt:

    Zitat

    Kommentar von Christian Faderl (ISI360) - Mittwoch, 02 April 2014, 17:49 GMT+1
    Nunja theoretisch könnte man ja von dem #include-once Tag gebrauch machen. Das dürfte 10x maliges Includen zb. schon verhindern.

    Chancen stehen also nicht schlecht für die neue Version ;)

  • Mehrere While Schleifen?

    • Blubkuh
    • 1. April 2014 um 19:18
    Zitat von SelfOwn3D

    Okai :) Danke sehr :)

    Ich habe noch 'ne Frage, und zwar sind die im Local gesetzten $Reg1 unso ja für die zwei funktioninen, aber ich brauch mehr, wie mache ich das? Ich habs mit ,$reg 3 undso versucht funktioniert nur leider nicht :P

    Muss funktionieren. Poste mal deinen Code mit der Local Zeile.
    Es darf natürlich kein Leerzeichen zwischen "$reg" und "3".
    Einfach einen durchgängigen Variablennamen nehmen.( Wie z.B. "$GetToTheChoppah")

    Wenn du Fehler in deinem Code hast und hier Hilfe erwartest:
    - Immer Fehlermeldung posten
    - Original oder Beispielcode mit dem Fehler hinzufügen

  • Mehrere While Schleifen?

    • Blubkuh
    • 1. April 2014 um 18:57

    Kannste mit _IsPressed machen

    Spoiler anzeigen
    [autoit]

    #include <Misc.au3>
    HotKeySet("{ESC}", "_Exit")

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

    Local $Reg1, $Reg2

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

    While 1
    If _IsPressed("10") And _IsPressed("70") Then _AdlibReg1(); 10= Shift, 70 = F1. Nachzulesen in der Hilfe
    If _IsPressed("10") And _IsPressed("71") Then _AdlibReg2(); 10= Shift, 71 = F2. Nachzulesen in der Hilfe
    Sleep(100)
    WEnd

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

    Func _AdlibReg1()
    If $Reg1 = 0 Then
    $Reg1 = AdlibRegister("_AdlibReg1_start", 500) ; 500= Alle 500ms wird die Funktion _AdlibReg1_start() ausgeführt
    Else
    $Reg1 = AdlibUnRegister("_AdlibReg1_start")
    EndIf
    EndFunc

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

    Func _AdlibReg2()
    If $Reg2 = 0 Then
    $Reg2 = AdlibRegister("_AdlibReg2_start", 2000) ;2000= Alle 2000ms wird die Funktion _AdlibReg1_start() ausgeführt
    Else
    $Reg2 = AdlibUnRegister("_AdlibReg2_start") ;
    EndIf
    EndFunc

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

    Func _AdlibReg1_start()
    Send("Blabla",1)
    EndFunc

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

    Func _AdlibReg2_start()
    Send("1234",1)
    EndFunc

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

    Func _Exit()
    Exit
    EndFunc

    [/autoit]
  • Schon wieder grafische Spielereien ;)

    • Blubkuh
    • 1. April 2014 um 18:38

    Wow

    Super gemacht. Vor allem das 2. Script fand ich super.
    (Das erste ist auch nicht von schlechten Eltern ;))

    Ich glaub ich muss mir auch mal die GDI funktionen angucken :D

  • Mehrere While Schleifen?

    • Blubkuh
    • 1. April 2014 um 18:22

    Klar geht das. :)

    Spoiler anzeigen
    [autoit]

    HotKeySet("{F2}", "_AdlibReg1")
    HotKeySet("{F3}", "_AdlibReg2")
    HotKeySet("{ESC}", "_Exit")

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

    Local $Reg1, $Reg2

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

    While 1 ; Endlosschleife die nichts tut ausser sleepen ^^
    Sleep(100)
    WEnd

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

    Func _AdlibReg1()
    If $Reg1 = 0 Then
    $Reg1 = AdlibRegister("_AdlibReg1_start", 500) ; 500= Alle 500ms wird die Funktion _AdlibReg1_start() ausgeführt
    Else
    $Reg1 = AdlibUnRegister("_AdlibReg1_start")
    EndIf
    EndFunc

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

    Func _AdlibReg2()
    If $Reg2 = 0 Then
    $Reg2 = AdlibRegister("_AdlibReg2_start", 2000) ;2000= Alle 2000ms wird die Funktion _AdlibReg1_start() ausgeführt
    Else
    $Reg2 = AdlibUnRegister("_AdlibReg2_start") ;
    EndIf
    EndFunc

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

    Func _AdlibReg1_start()
    Send("Blabla",1)
    EndFunc

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

    Func _AdlibReg2_start()
    Send("1234",1)
    EndFunc

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

    Func _Exit()
    Exit
    EndFunc

    [/autoit]


    Edit: Beim ersten mal drücken von F2 bzw F3 wird die Funktion gestartet und bei nochmaligem drücken beendet

    Edit2: Grade gesehen das da noch ein kleiner Fehler drin ist und hab den ausgemerzt :P

  • ISN AutoIt Studio

    • Blubkuh
    • 1. April 2014 um 17:55
    Zitat von rynow

    Du musst die GUI Includes in dein Script mit rein nehmen. In deinem Fall werden die Style Variablen nicht includet und somit nicht erkannt.

    Die Frage ist wieso der include fehlt. Beim erstellen eines GUI sind in der .isf Datei doch die benötigten includes schon drin oder nicht?

    Muss ich mir immer wenn ich nen GUI erstellt habe mir den Code anzeigen lassen und die includes kopierern und in meinem Code einfügen? Das sollte doch eigentlich in den .isf Dateien schon beinhaltet sein :?


    Edit:

    Beispiel:

    Das hier ist der generierte Code meiner isf.Datei von nem GUI:

    Spoiler anzeigen
    [autoit]

    ; -- Created with ISN Form Studio 2 for ISN AutoIt Studio -- ;
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #Include <GuiButton.au3>

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

    $LoginGui = GUICreate("Login",250,281,-1,-1,$WS_POPUP+$WS_DLGFRAME+$WS_POPUPWINDOW+$DS_SETFOREGROUND,$WS_EX_TOPMOST+$WS_EX_TOOLWINDOW)
    GUICtrlCreateLabel("Benutzer",87,38,77,20,-1,-1)
    GUICtrlSetFont(-1,14,400,0,"Lucida Sans")
    GUICtrlSetBkColor(-1,"-2")
    GUICtrlCreateGroup("",19,13,212,249,-1,-1)
    GUICtrlSetBkColor(-1,"0xF0F0F0")
    GUICtrlCreateLabel("Password",85,139,82,20,-1,-1)
    GUICtrlSetState(-1,64)
    GUICtrlSetFont(-1,14,400,0,"Lucida Sans")
    GUICtrlSetBkColor(-1,"-2")
    GUICtrlCreateInput("",50,80,150,20,-1,512)
    GUICtrlCreateInput("",50,181,150,20,-1,512)
    $LoginButton = GUICtrlCreateButton("Login",76,221,100,30,-1,-1)
    GUICtrlSetFont(-1,8,700,0,"Lucida Sans")
    GUISetState(@SW_SHOW,$LoginGui)

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit

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

    EndSwitch
    WEnd

    [/autoit]


    Und in meinem Script steht dann folgendes:

    [autoit]

    #include "Forms\Main.isf"
    #include "Forms\Login.isf"

    [/autoit]

    Damit sollten die benötigten includes doch schon dabei sein?
    Und wenn das nicht so ist dann sollte man das vielleicht in die nächste Version implementieren

  • ISN AutoIt Studio

    • Blubkuh
    • 1. April 2014 um 00:52

    Folgender Fehler:

    - Gui im integrierten GUI -Creator erstellt
    - Dort kann ich diese auch ohne Probleme starten und testen
    - Wenn das ganze als Include im Hauptprogramm hinzugefügt wird und ich das Script ausführe bekomme ich folgende Fehlermeldung:

    Code
    "D:\Projekte\AutoIt\ISN Projekte\Warenwirtschaftssystem\Forms\Login.isf" (3) : ==> Variable used without being declared.:
    $LoginGui = GUICreate("Login",250,281,-1,-1,$WS_POPUP+$WS_DLGFRAME+$WS_POPUPWINDOW+$DS_SETFOREGROUND,$WS_EX_TOPMOST+$WS_EX_TOOLWINDOW)
    $LoginGui = GUICreate("Login",250,281,-1,-1,^ ERROR

    Soll heißen er "vergisst" den <WindowsConstants.au3> include.

  • Zugriff auf Fingerabdruck-Scanner per AutoIt möglich?

    • Blubkuh
    • 31. März 2014 um 22:05
    Zitat von Andy


    Allererste Anlaufstelle ist der Scanner-Hersteller, der sicherlich ein API bereitstellt.

    Von deren Website:

    Zitat

    "The Validity Support Portal is a password protected website that is only available to authorized partners and customers. It is used to provide access to drivers, solution kits, utilities, and development documentation.

    Contact your local representative for access."

    Soll heissen: Kein Zugriff auf Dokumentation etc.
    Aber ich glaub da kann ich sowieso direkt aufgeben weil ich nichts von dem verstehe was ich bisher gelesen habe.
    Wäre das erste mal dass ich mit dll's arbeite und versteh da nur Bahnhof.

    Dann wirds wohl nur nen User - Password Login geben :(

  • Hilfe bei Erstellung eines Updaters mit Gegenleistung

    • Blubkuh
    • 31. März 2014 um 19:23

    Du rufst die Update Funktion ohne jegliche Parameter auf obwohl du die in deiner Update Funktion deklariert hast.
    Außerdem rufst du die Update Funktion auf bevor du die einzelnen Variablen wie Server, User, PW usw deklariert hast
    Verstehe auch ned warum du die FTP und Array Funktionen einzeln auflistest. include doch die jeweilige Datei.

    hab jetzt den Code einfach nen bischen aufgeräumt und nicht getestet ob da jetzt irgendwas funktioniert. So gibts nur schonmal keine Fehlermeldungen mehr

    Spoiler anzeigen
    [autoit]

    #include <Array.au3>
    #include <FTPEx.au3>
    #include <GUIConstantsEx.au3>

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

    $sServerName = "ftp.lima-city.de"
    $sUserName = "Peter"
    $sPassword = "Password"
    $iCurrentVersion = "1.4"
    $sFileName = "ABC v"
    $sDir = "/Downloads"
    $fStartAfter = True
    $sDatatype = ".exe"

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

    _Update($sServerName, $sUserName, $sPassword, $iCurrentVersion, $sFileName, $sDir, $fStartAfter, $sDatatype)

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

    Func _Update($sServerName, $sUserName, $sPassword, $iCurrentVersion, $sFileName, $sDir, $fStartAfter, $sDatatype = ".exe")

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

    Local $aFileListNEW[1], $iFileNameLen = StringLen($sFileName), $hFTP_Open, $hFTP, $aFileListOLD[1], $i, $hGUI_UPDATE, $idBtnJA_UPDATE, $idBtnNEIN_UPDATE, $iNewestVersion

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

    $hFTP_Open = _FTP_Open("UPDATE")
    If @error Then Return SetError(1, 1)
    $hFTP = _FTP_Connect($hFTP_Open, $sServerName, $sUserName, $sPassword)

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

    If @error Then Return SetError(1, 2)

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

    If $sDir <> "" Then _FTP_DirSetCurrent($hFTP, $sDir)

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

    If @error Then Return SetError(1, 3)

    $aFileListOLD = _Ftp_ListToArray($hFTP)

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

    For $i = 0 To $aFileListOLD[0]
    If StringLeft($aFileListOLD[$i], $iFileNameLen) = $sFileName Then _ArrayAdd($aFileListNEW, StringTrimRight(StringTrimLeft($aFileListOLD[$i], $iFileNameLen), 4))
    Next

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

    $iNewestVersion = _ArrayMax($aFileListNEW)

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

    If @error Then Return SetError(1, 4)

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

    If $iNewestVersion <= $iCurrentVersion Then Return 1

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

    $hGUI_UPDATE = GUICreate("Neue Version verfügbar!", 300, 200)
    GUISetBkColor(0xF7F6F9, $hGUI_UPDATE)

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

    $idLbl = GUICtrlCreateLabel("Es ist eine neue Version ihrer Software verfügbar!" & @CRLF & @CRLF & "Möchten Sie sie jetzt aktualisieren?", 5, 5, 300, 300)
    GUICtrlSetFont($idLbl, 12)
    $idBtnJA_UPDATE = GUICtrlCreateButton("Ja", 50, 160, 50, 20)
    $idBtnNEIN_UPDATE = GUICtrlCreateButton("Nein", 170, 160, 50, 20)
    GUISetState(@SW_SHOW)

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

    While 1
    Switch GUIGetMsg()
    Case $idBtnJA_UPDATE
    _FTP_FileGet($hFTP, $sFileName & $iNewestVersion & $sDatatype, @ScriptDir & "" & $sFileName & $iNewestVersion & $sDatatype)
    If @error Then Return SetError(1, 5)
    _FTP_Close($hFTP)
    If $fStartAfter Then ShellExecute(@ScriptDir & "" & $sFileName & $iNewestVersion & $sDatatype)
    MsgBox(0,"",$iNewestVersion)
    Return $iNewestVersion

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

    Case $idBtnNEIN_UPDATE
    GUIDelete($hGUI_UPDATE)
    _FTP_Close($hFTP)
    MsgBox(0,"","2")
    Return 1

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

    Case $GUI_EVENT_CLOSE
    GUIDelete($hGUI_UPDATE)
    _FTP_Close($hFTP)
    MsgBox(0,"","2")
    Return 1
    EndSwitch
    WEnd
    EndFunc ;==>_Update

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


    PS:
    Das nächste mal vor dem posten mal auf die Vorschau Funktion gucken. Das mit dem AutoIt Code hat nicht so ganz geklappt ;)

  • Zugriff auf Fingerabdruck-Scanner per AutoIt möglich?

    • Blubkuh
    • 31. März 2014 um 18:41

    Hey Leute,

    ich habe momentan zwei Projekte am laufen und für beide würde es sich anbieten wenn sich der Nutzer per Fingerabdruck autorisieren ließe.
    Habe auf der Arbeit ein HP ProBook mit integriertem Scanner und wollte diesen zum testen mal benutzen.

    Allerdings habe ich keine Ahnung wie ich vorgehen soll um den mit AutoIt anzusprechen.

    Gibbet da schon fertige Funktionen die ich nicht kenne oder ist das je nach Scanner unterschiedlich?

    Habe mal nen paar Infos aus dem Gerätemanager gezogen:

    Code
    Treiberanbieter: Validity Sensors, Inc.
    Treiberdatum: 04.06.2010
    Treiberversion: 2.1.0.3
    Signaturgeber: Microsoft Windows Hardware Compatibility
    
    
    Treiberdateien:
    C:\Windows\system32\Drivers\winusb.sys
    C:\Windows\system32\WdfCoInstaller01007.dll
    C:\Windows\system32\WinUsbCoinstaller.dll
    
    
    
    
    Objektname des physikalischen Geräts:
    \Device\USBPDO-4
    Alles anzeigen


    Wäre super wenn mir jemand da Hilfe leisten könnte weil das für mich komplettes Neuland ist (ungefähr so wie Internet für die Frau Merkel).


    Danke schonmal im Voraus :)

  • Funktion zur Auswahl von Arrays

    • Blubkuh
    • 29. März 2014 um 00:08

    oder du nimmst einfach den code der ArrayDisplay-Funktion und änderst diesen ein bischen ab. dann haste schonmal 90% der Arbeit erledigt ohne was gemacht zu haben ;)

  • Kleiner Fehler in _SoundOpen

    • Blubkuh
    • 25. März 2014 um 23:58

    Kann nur bestätigen was Oscar sagt Bei mir funktioniert es mit weit längeren Pfaden

    Bsp:

    Spoiler anzeigen
    [autoit]

    #include <Sound.au3>
    #include <MsgBoxConstants.au3>

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

    Local $aSound = _SoundOpen("C:\Users\Public\Music\Sample Music\testtesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttes\Ayreon! Theory Of Everything, The - 2013 - Hard Rock _02 !Theory Of Everything Part 1, The.mp3")
    _SoundPlay($aSound)
    If @error = 2 Then
    MsgBox($MB_SYSTEMMODAL, "Error", "The file does not exist")
    Exit
    ElseIf @extended <> 0 Then
    Local $iExtended = @extended ; Assign because @extended will be set after DllCall.
    Local $tText = DllStructCreate("char[128]")
    DllCall("winmm.dll", "short", "mciGetErrorStringA", "str", $iExtended, "ptr", DllStructGetPtr($tText), "int", 128)
    MsgBox($MB_SYSTEMMODAL, "Error", "The open failed." & @CRLF & "Error Number: " & $iExtended & @CRLF & "Error Description: " & DllStructGetData($tText, 1) & @CRLF & "Please Note: The sound may still play correctly.")
    Else
    MsgBox($MB_SYSTEMMODAL, "Success", "The file opened successfully")
    EndIf

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

    _SoundClose($aSound)

    [/autoit]

    Das funzt einwandfrei

  • Ini Werte einlesen in Inputbox

    • Blubkuh
    • 25. März 2014 um 00:02
    Zitat von d-c-m

    Super, vielen Dank, so funktioniert es. :thumbup:

    Thema kann geschlossen werden.  :D


    Freut mich das ich helfen konnte.
    Bitte deinen ersten Beitrag editieren und den Thread auf "gelöst" setzen :)

  • Ini Werte einlesen in Inputbox

    • Blubkuh
    • 24. März 2014 um 20:22

    Wo ist den dein Problem?

    Hiermit solltest du weiterarbeiten können:

    Spoiler anzeigen
    [autoit]

    $test = StringSplit("mueller=juergen|12.02.1968|[email='jmuel68@gmx.de'][/email] ","|")
    MsgBox(0,"","Anzahl der Strings: " & $test[0])
    MsgBox(0,"",$test[1])
    MsgBox(0,"",$test[2])
    MsgBox(0,"",$test[3])
    $test = StringSplit("mueller=juergen|12.02.1968|[email='jmuel68@gmx.de'][/email] ","=")
    MsgBox(0,"","Anzahl der Strings: " & $test[0])
    MsgBox(0,"",$test[1])
    MsgBox(0,"",$test[2])

    [/autoit]
  • Per Button schleife unterbrechen möglich?!

    • Blubkuh
    • 20. März 2014 um 10:58
    Zitat von meistertogo

    Blubkuh:
    Warum verwendest Du die Variable $i (Z. 23, 31, 35) als String -- was Abgleiche u. U. erschweren kann -- und nicht als (Integer-)Zahl?


    Ich wusste das die Frage kommt ^^
    Und hier meine alles beantwortende Antwort: 42 .... (Weil es funktioniert ;))

  • Per Button schleife unterbrechen möglich?!

    • Blubkuh
    • 19. März 2014 um 23:09

    Hier mal nen Beispiel von mir:

    Spoiler anzeigen
    [autoit]

    #include <ButtonConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    Opt("GuiOnEventMode",1)

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

    Global $sFilePath = @ScriptDir & "\test.txt"

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

    #Region ### START Koda GUI section ### Form=
    $GUI = GUICreate("GUI", 159, 220, 192, 124)
    $GO = GUICtrlCreateButton("GO", 40, 32, 81, 41)
    GUICtrlSetOnEvent($GO, "_GO")
    $Stop = GUICtrlCreateButton("STOP", 41, 138, 81, 41)
    GUICtrlSetOnEvent($Stop, "_Stop")
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

    GUISetOnEvent($GUI_EVENT_CLOSE, "_Exit")
    Local $i

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

    While 1
    Sleep(50)
    If $i="1" Then
    FileWrite($sFilePath, "1, " & @CRLF)
    Sleep(500)
    EndIf
    WEnd

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

    Func _GO()
    $i = "1"
    EndFunc

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

    Func _Stop()
    $i = "0"
    EndFunc

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

    Func _Exit()
    Exit
    EndFunc

    [/autoit]
  • Listview flackert beim einlesen von Daten

    • Blubkuh
    • 17. März 2014 um 00:01

    Vielen Dank schonmal im Voraus an Friesel dank seiner modifizierten Version der Funktion von _GUICtrlListView_AddArray() konnte ich nun etwas genauer beobachten wo die Funktion ins Stocken gerät.

    Hier erstmal die modifizierte Version: (Die Änderung gibt nach jedem Item was ins Listview geschrieben wird ne msg box und pausiert so die Funktion, sodass man sehen kan welche Daten geschrieben wurden und man überprüfen kann ob diese richtig sind)

    Spoiler anzeigen
    [autoit]

    Func _GUICtrlListView_AddArray_test($hWnd, ByRef $aItems)
    ;~ If $Debug_LV Then __UDF_ValidateClassName($hWnd, $__LISTVIEWCONSTANT_ClassName)

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

    Local $fUnicode = _GUICtrlListView_GetUnicodeFormat($hWnd)

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

    Local $tItem = DllStructCreate($tagLVITEM)
    Local $tBuffer
    If $fUnicode Then
    $tBuffer = DllStructCreate("wchar Text[4096]")
    Else
    $tBuffer = DllStructCreate("char Text[4096]")
    EndIf
    DllStructSetData($tItem, "Mask", $LVIF_TEXT)
    DllStructSetData($tItem, "Text", DllStructGetPtr($tBuffer))
    DllStructSetData($tItem, "TextMax", 4096)
    Local $iLastItem = _GUICtrlListView_GetItemCount($hWnd)
    ;~ _GUICtrlListView_BeginUpdate($hWnd)
    If IsHWnd($hWnd) Then
    MsgBox(0, "", "IsHWnd($hWnd) ist True!" & @CRLF & "Bitte nur eine ListView ID übergeben, kein Handle!")
    ;~ If _WinAPI_InProcess($hWnd, $_lv_ghLastWnd) Then
    ;~ For $iI = 0 To UBound($aItems) - 1
    ;~ DllStructSetData($tItem, "Item", $iI)
    ;~ DllStructSetData($tItem, "SubItem", 0)
    ;~ DllStructSetData($tBuffer, "Text", $aItems[$iI][0])
    ;~ _SendMessage($hWnd, $LVM_INSERTITEMW, 0, $tItem, 0, "wparam", "struct*")
    ;~ For $iJ = 1 To UBound($aItems, 2) - 1
    ;~ DllStructSetData($tItem, "SubItem", $iJ)
    ;~ DllStructSetData($tBuffer, "Text", $aItems[$iI][$iJ])
    ;~ _SendMessage($hWnd, $LVM_SETITEMW, 0, $tItem, 0, "wparam", "struct*")
    ;~ Next
    ;~ Next
    ;~ Else
    ;~ Local $iBuffer = DllStructGetSize($tBuffer)
    ;~ Local $iItem = DllStructGetSize($tItem)
    ;~ Local $tMemMap
    ;~ Local $pMemory = _MemInit($hWnd, $iItem + $iBuffer, $tMemMap)
    ;~ Local $pText = $pMemory + $iItem
    ;~ DllStructSetData($tItem, "Text", $pText)
    ;~ For $iI = 0 To UBound($aItems) - 1
    ;~ DllStructSetData($tItem, "Item", $iI + $iLastItem)
    ;~ DllStructSetData($tItem, "SubItem", 0)
    ;~ DllStructSetData($tBuffer, "Text", $aItems[$iI][0])
    ;~ _MemWrite($tMemMap, $tItem, $pMemory, $iItem)
    ;~ _MemWrite($tMemMap, $tBuffer, $pText, $iBuffer)
    ;~ If $fUnicode Then
    ;~ _SendMessage($hWnd, $LVM_INSERTITEMW, 0, $pMemory, 0, "wparam", "ptr")
    ;~ Else
    ;~ _SendMessage($hWnd, $LVM_INSERTITEMA, 0, $pMemory, 0, "wparam", "ptr")
    ;~ EndIf
    ;~ For $iJ = 1 To UBound($aItems, 2) - 1
    ;~ DllStructSetData($tItem, "SubItem", $iJ)
    ;~ DllStructSetData($tBuffer, "Text", $aItems[$iI][$iJ])
    ;~ _MemWrite($tMemMap, $tItem, $pMemory, $iItem)
    ;~ _MemWrite($tMemMap, $tBuffer, $pText, $iBuffer)
    ;~ If $fUnicode Then
    ;~ _SendMessage($hWnd, $LVM_SETITEMW, 0, $pMemory, 0, "wparam", "ptr")
    ;~ Else
    ;~ _SendMessage($hWnd, $LVM_SETITEMA, 0, $pMemory, 0, "wparam", "ptr")
    ;~ EndIf
    ;~ Next
    ;~ Next
    ;~ _MemFree($tMemMap)
    ;~ EndIf
    Else
    Local $pItem = DllStructGetPtr($tItem)
    For $iI = 0 To UBound($aItems) - 1
    MsgBox(0, "", "")
    DllStructSetData($tItem, "Item", $iI + $iLastItem)
    DllStructSetData($tItem, "SubItem", 0)
    DllStructSetData($tBuffer, "Text", $aItems[$iI][0])
    If $fUnicode Then
    GUICtrlSendMsg($hWnd, $LVM_INSERTITEMW, 0, $pItem)
    Else
    GUICtrlSendMsg($hWnd, $LVM_INSERTITEMA, 0, $pItem)
    EndIf
    For $iJ = 1 To UBound($aItems, 2) - 1
    MsgBox(0, "", "")
    DllStructSetData($tItem, "SubItem", $iJ)
    DllStructSetData($tBuffer, "Text", $aItems[$iI][$iJ])
    If $fUnicode Then
    GUICtrlSendMsg($hWnd, $LVM_SETITEMW, 0, $pItem)
    Else
    GUICtrlSendMsg($hWnd, $LVM_SETITEMA, 0, $pItem)
    EndIf
    Next
    Next
    EndIf
    ;~ _GUICtrlListView_EndUpdate($hWnd)
    EndFunc ;==>_GUICtrlListView_AddArray_test

    [/autoit]


    Un nun kommen wir zu dem Punkt an dem die Funktion scheitert:
    Mein Listview wurde wie folgt erstellt:

    Spoiler anzeigen
    [autoit]

    $ListView1 = GUICtrlCreateListView("KdNr|Name|Straße|PLZ|Ort|Telefon|", 5, 25, 802, 450, BitOR($LVS_SORTASCENDING, $LVS_SINGLESEL))

    [/autoit]

    Das Problem ist, dass die Daten einer nach dem anderen in das Listview eingetragen werden und zwar immer in der untersten Zeile des Listviews. Da ich aber $LVS_SORTASCENDING benutze und die Kundennummern(1. Spalte) nicht von niedrig -> hoch eingelesen werden sondern durcheinander wird automatisch eine niedrige Kundennummer im Listview nach oben geschoben, die Daten werden aber in der untersten Zeile des Listviews eingetragen(soll heißen die alten Daten in der Zeile werden überschrieben)

    nach dem entfernen von $LVS_SORTASCENDING funktioniert die Funktion wunderbar. Ich bin mir nicht sicher ob man das als Bug werten sollte. Es sollte aber auf jedenfall in die Hilfe der _GUICtrlListView_AddArray() Funktion hinzugefügt werden


    EDIT:
    Mit dieser Funktion tritt übrigends kein Flackern des Listviews mehr auf. Vielen Dank

  • Listview flackert beim einlesen von Daten

    • Blubkuh
    • 13. März 2014 um 21:44
    Zitat von Friesel


    ArrayDisplay verursacht hin und wieder echt seltsame Effekte (Hab mir den Code allerdings nie näher angesehn, um das zu ergründen). Die benutze ich wirklich nur zum debuggen.
    Lass die Funktion einfach mal weg und schau, was passiert...


    ArrayDisplay hatte ich auch nur zum debuggen genommen weil in meinem Listview halt leere Einträge vorhanden sind. Ich mach gleich mal nen kurzes Video um das mal zu zeigen.


    Edit: Video des Problems ist hier zu sehen: https://www.youtube.com/watch?v=1UwvgII9Xus&feature=youtu.be

    Wenn das Video ned geht: Paar minuten warten damit Youtube das eben rendern kann. Dann sollte auch bessere Quali verfügbar sein

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™