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

Beiträge von nuts

  • Drucken

    • nuts
    • 7. September 2009 um 18:31

    Hab mal den Anfang und ein Testbeispiel gemacht.
    Es muss noch die Gesamtbreite, die Spaltenbreite und der Übertrag mit einbezogen werden.
    Bin dran, nur html ist schon strange :wacko:

    Spoiler anzeigen
    [autoit]


    #include<WindowsConstants.au3>
    #include<ListViewConstants.au3>
    #include<ButtonConstants.au3>
    #include<GUIConstantsEx.au3>
    #include<Guilistview.au3>
    #include<File.au3>
    #include<Array.au3>

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

    Global $sHeader = "Artikelnummer|Art|Nummer|Baureihe|Name|+1" ; Die Überschriften für das Listview und für das "Neuer Eintrag"-Fenster
    Global $sDBFile = @ScriptDir & "\datenbank.html" ; Pfad und Name der Datenbank-Datei
    If not FileExists($sDBFile) Then _FileCreate($sDBFile)

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

    ;global $open = Fileopen($sDBFile,2)
    ;ConsoleWrite(_ArrayToHTMLTable($a,true,false))
    ;_FileWriteFromArray($sDBFile,_ArrayToHTMLTable($a,true,false))
    ;FileWrite($open, _ArrayToHTMLTable($a,true,true))
    ;MsgBox(1, "",_ArrayToHTMLTable($a,true,true))

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

    #Region Hauptfenster
    Global $hGui = GUICreate("Listview-Datenbank-Beispiel", 600, 480) ; Hauptfenster erstellen
    Global $hListView = GUICtrlCreateListView($sHeader, 0, 0, 600, 420, $LVS_SHOWSELALWAYS) ; Listview erstellen

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

    Global $hLVHandle = GUICtrlGetHandle($hListView) ; das Handle vom Listview wird für die UDF-Listview-Funktionen benötigt
    _GUICtrlListView_SetColumn($hLVHandle, 0, "Artikelnummer", 120, 0)
    _GUICtrlListView_SetColumn($hLVHandle, 1, "Art", 60, 0)
    _GUICtrlListView_SetColumn($hLVHandle, 2, "Nummer", 90, 0)
    _GUICtrlListView_SetColumn($hLVHandle, 3, "Baureihe", 100, 0)
    _GUICtrlListView_SetColumn($hLVHandle, 4, "Name", 120, 0)
    _GUICtrlListView_SetColumn($hLVHandle, 5, "+1", 12, 0)

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

    for $i = 1 to 20
    GUICtrlCreateListViewItem($i &"|Test|2|Uiui|HTML|+1", $hListView)
    next
    Global $hNew = GUICtrlCreateButton("Print", 5, 430, 80, 35)

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

    GUISetState(@SW_SHOW)

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

    While 1
    $nMsg = GUIGetMsg(1) ; Message-Event holen (1) = erweiterter Modus
    Switch $nMsg[0] ; anhand der Control-ID das entsprechende Case aufrufen

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

    Case $hNew
    local $array = _Listviewtoarray($hLVHandle)
    _ArrayDisplay($array)
    _test($array)

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

    Case $GUI_EVENT_CLOSE ; User hat auf das Schließen-Symbol geklickt (bzw. die ESC-Taste gedrückt)
    Switch $nMsg[1] ; erweiterte Abfrage für welches Fenster
    Case $hGui ; User will das Hauptfenster schließen
    Exit
    EndSwitch
    EndSwitch
    WEnd

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

    Func _Listviewtoarray($hwnd)
    local $col, $getcol, $lcount, $atext, $counter = 1
    $col = _GUICtrlListView_GetColumnCount($hwnd)
    $lcount = _GUICtrlListView_GetItemCount($hwnd)
    local $alistview [$lcount+1][$col]
    for $y = 0 to $col-1
    $getcol= _GUICtrlListView_GetColumn($hwnd, $y)
    $alistview[0][$y] = $getcol[5]
    next
    for $i= 0 to $lcount -1
    $atext = _GUICtrlListView_GetItemTextArray($hwnd,$i)
    for $x = 0 to $atext[0] -1
    $alistview[$counter][$x] = $atext[$x+1]
    next
    $counter += 1
    next
    return $alistview
    $counter = 1
    endfunc

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

    func _test($array)
    local $open = Fileopen($sDBFile,2)
    local $html = _ArrayToHTMLTable($array,true,true)
    FileWrite($open, $html)
    fileclose($open)
    endfunc

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

    ; #FUNCTION# ===================================================================
    ; Name ..........: _ArrayToHTMLTable
    ; Description ...: Creates a HTML-table from a 2dim-array
    ; AutoIt Version : V3.3.0.0
    ; Syntax ........: _ArrayToHTMLTable(ByRef $aArray[, $bHeader = True[, $bBorder = True[, $sStyle = 'width:100%']]])
    ; Parameter(s): .: $aArray -
    ; $bHeader - Optional: (Default = True) :
    ; $bBorder - Optional: (Default = True) :
    ; $sStyle - Optional: (Default = width: 100%) : StyleSheet
    ; Return Value ..: Success - string
    ; Failure - empty string
    ; @ERROR -
    ; Author(s) .....: Thorsten Willert
    ; Modified ......: Nuts (http://www.autoit.de)
    ; Date ..........: Wed Jul 01 18:07:39 CEST 2009
    ; Version .......: 1.0
    ; ==============================================================================
    Func _ArrayToHTMLTable(ByRef $aArray, $bHeader = True, $bBorder = True, $sStyle = 'width:100%')
    Local $iD1 = UBound($aArray,1)
    If @error Then
    SetError(1)
    Return ''
    EndIf
    Local $iD2 = UBound($aArray,2)
    If @error Then
    SetError(1)
    Return ''
    EndIf

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

    Local $sTable = ""
    If $sStyle <> '' Then $sStyle = ' style="' & $sStyle & '"'
    $sStyle &= '>'

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

    If $bBorder Then
    $sTable &= '<table border="1"'
    Else
    $sTable &= '<table'
    EndIf
    $sTable &= $sStyle & @CRLF

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

    Local $iStart = 0
    If $bHeader Then
    $iStart = 1
    $sTable &= '<tr>' & @CRLF
    For $i = 0 To $iD2 -1
    $sTable &= @TAB & '<th align="left">' & $aArray[0][$i] & '</th>' & @CRLF
    Next
    $sTable &= '</tr>' & @CRLF
    EndIf

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

    For $i = $iStart To $iD1 -1
    $sTable &= '<tr>' & @CRLF
    For $j = 0 To $iD2 -1
    $sTable &= @TAB & '<td>' & $aArray[$i][$j] & '</td>' & @CRLF
    Next
    $sTable &= '</tr>' & @CRLF
    Next

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

    $sTable &= '</table>' & @CRLF

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

    Return $sTable
    EndFunc ;==> _ArrayToHTMLTable

    [/autoit]
  • Autoit Eingabefeld/Eingabe als txt speichern.

    • nuts
    • 7. September 2009 um 15:10

    Wenn es die Datei schon gibt, kann diese auch überschrieben werden.
    Filedelete & _Filecreate ist dann unnötig.

  • Drucken

    • nuts
    • 7. September 2009 um 14:13

    Ist was dran.
    Dazu müsste man mal eine UDF basteln, _Printfrom_List() mit Übertrag usw.

    Mit html gibts wohl bessere Formatierungsmöglichkeiten, ist dafür aber aufwendiger.
    Hast sowas schon jemand im Archiv? Sonst versuche ich mich mal daran.

  • Notenmanager, Schulnoten verwalten, Schnitte ausrechnen und mehr...Version 3.20

    • nuts
    • 7. September 2009 um 12:59

    Ähm nicht so wirklich, aber solange du durchblickst ists ja okay ;)

  • Drucken

    • nuts
    • 7. September 2009 um 12:55

    Hey,

    ja danke soweit war ich auch gerade 8)
    fehlt noch eine Funktion um das ganze Listview zu erfassen, sollten zuviele Items eingetragen sein.

    1. Möglichkeit ein virtuelles Listview mit entsprechend kleiner Schritt
    Ist nicht schwer, sieht allerdings irgendwann blöd aus.

    Könnte man dann quasi einen Zoom einbauen und seitenübergreifend drucken?

  • Notenmanager, Schulnoten verwalten, Schnitte ausrechnen und mehr...Version 3.20

    • nuts
    • 7. September 2009 um 12:21

    So vom Aufbau her:

    Zuerst alle Gui-Elemente erstellen (und mit @Hide, @Show arbeiten)
    Eine große While Wend Schleife
    In der While Wend Schleife die "Aktion" weitestgehend auf Funktionen verteilen.

    Bsp:

    Spoiler anzeigen
    [autoit]


    #include<WindowsConstants.au3>
    #include<GUIConstantsEx.au3>

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

    #Region Hauptfenster
    Global $hGui = GUICreate("Listview-Datenbank-Beispiel", 600, 480) ; Hauptfenster erstellen
    Global $hNew = GUICtrlCreateButton("Öffne anderes Gui-Element", 100, 100, 150, 40)
    #EndRegion Hauptfenster

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

    #Region Fenster für neuen Eintrag
    Global $hGuiNew = GUICreate("Neuer Eintrag", 600, 480) ; das Fenster "Neuer Eintrag" erstellen
    Global $back = GUICtrlCreateButton("Zurück", 100, 100, 150, 40)
    #EndRegion Fenster für neuen Eintrag

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

    GUISetState(@SW_SHOW, $hGui) ; Hauptfenster sichtbar machen

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

    While 1
    $nMsg = GUIGetMsg(1) ; Message-Event holen (1) = erweiterter Modus
    Switch $nMsg[0] ; anhand der Control-ID das entsprechende Case aufrufen
    Case $hNew; User hat auf "Neuer Eintrag" geklickt
    WinSetTitle($hGuiNew, "", "Neuer Eintrag") ; den Titel des Fenster anpassen
    GUISetState(@SW_SHOW, $hGuiNew) ; das Fenster "Neuer Eintrag" anzeigen
    GUISetState(@SW_DISABLE, $hGui) ; das Hauptfenster deaktivieren
    case $back
    GUISetState(@SW_HIDE, $hGuiNew) ; "Neuer Eintrag"-Fenster verstecken
    GUISetState(@SW_ENABLE, $hGui) ; Hauptfenster wieder aktivieren
    WinActivate($hGui)
    Case $GUI_EVENT_CLOSE ; User hat auf das Schließen-Symbol geklickt (bzw. die ESC-Taste gedrückt)
    Switch $nMsg[1] ; erweiterte Abfrage für welches Fenster
    Case $hGui ; User will das Hauptfenster schließen
    If MsgBox(32 + 4, "Beenden", "Wollen sie das Programm wirklich beenden?") = 6 Then Exit ; wenn ja, dann Exit
    Case $hGuiNew ; User will das "Neuer Eintrag"-Fenster schließen
    GUISetState(@SW_HIDE, $hGuiNew) ; "Neuer Eintrag"-Fenster verstecken
    GUISetState(@SW_ENABLE, $hGui) ; Hauptfenster wieder aktivieren
    WinActivate($hGui) ; und in den Vordergrund holen
    EndSwitch
    EndSwitch
    WEnd

    [/autoit]
  • Notenmanager, Schulnoten verwalten, Schnitte ausrechnen und mehr...Version 3.20

    • nuts
    • 7. September 2009 um 12:08

    Du gehst für jedes Gui-Fenster in eine andere While ... Wend Schleife oder habe ich das falsch gelesen?
    Sowas lässt sich im erweiterten Messageloop Modus vermeiden (s. verlinktes Beispiel).

  • Drucken

    • nuts
    • 7. September 2009 um 12:05

    Sehr cool, lässt sich das auf einzelne Controls beschränken?

  • Notenmanager, Schulnoten verwalten, Schnitte ausrechnen und mehr...Version 3.20

    • nuts
    • 7. September 2009 um 12:01

    Listview-Datenbank-Beispiel wird z.B. hier verwendet (kannst dir ja den Listviewteil wegdenken).

  • Autoit Eingabefeld/Eingabe als txt speichern.

    • nuts
    • 7. September 2009 um 11:57

    Guictrlcreateinput (zum Erstellen)
    Guictrlread (zum Auslesen)
    _StringEncrypt (zum Verschlüsseln)
    Filewrite(line) oder Iniwrite (zum Speichern)

    Sollte dir weiterhelfen.

  • Notenmanager, Schulnoten verwalten, Schnitte ausrechnen und mehr...Version 3.20

    • nuts
    • 7. September 2009 um 11:52

    3.10 sieht auch schon viel besser aus (und funktioniert auch ;) )!
    Trotzdem sind die untereinander verschachtelten while ... wend Schleifen schon ähm sagen wir mal gewöhnungsbedürftig.
    Den erweiterten Messageloop Modus kennst du schon?

  • Ini in 3D Array einlesen?

    • nuts
    • 6. September 2009 um 20:15

    Bei mir ist die Version ohne Redim erwartungsgemäß schneller.
    Schwankt leider ziemlich, je nachdem wieviele Umläufe davor schon gemacht wurden.
    Ist trotzdem relativ deutlich ;)

  • Ini in 3D Array einlesen?

    • nuts
    • 6. September 2009 um 19:51

    Zeig mal die Vergleichsskripte :)

  • Ini in 3D Array einlesen?

    • nuts
    • 6. September 2009 um 19:39

    Doch schon, habe ich hier im Forum gelernt. Details dazu können andere sicherlich besser liefern.

  • Ini in 3D Array einlesen?

    • nuts
    • 6. September 2009 um 19:31

    Ist das wirklich schnell?

    Besser wäre doch:
    1. Inireadsectionnames
    2. Inireadsection für jeden Section
    und dann das Array einmal entsprechend zu deklarieren? Spart die Redim-Bremse!

    Wobei man dann auch für jede Section mit einem anderen Array arbeiten könnte.

  • Brauche kleine Hilfe beim Denken

    • nuts
    • 6. September 2009 um 11:25
    Zitat von Deepred

    Würde das nicht etwas zu lange dauern? ?(


    Kommt natürlich auf die Datenmenge an. Bei Musikfiles im normalen Rahmen imho völlig unkritisch.

  • Brauche kleine Hilfe beim Denken

    • nuts
    • 6. September 2009 um 09:56

    Du kannst da beim Dropevent auslesen was schon im Listview steht und mit den hinzuzufügenden vergleichen.
    Für die Schnittmengenermittlung gibts auch eine UDF von Bugfix (im Skripteforum).

    Das Design ist übrigens ziemlich cool :thumbup:

  • etwas auf einer liste ausgeben

    • nuts
    • 6. September 2009 um 00:34

    Ist trotzdem ein seltsames Vorhaben. :whistling:

  • Windows 7 + Makros : laufen nicht !

    • nuts
    • 5. September 2009 um 13:02

    Benutzerkontensteuerung aktiv? Oder sowas? Sorry kenne mich in Vista / Win7 nicht aus ?(

  • Windows 7 + Makros : laufen nicht !

    • nuts
    • 5. September 2009 um 12:59

    Also wenn der Pfad stimmt (kannste dir ja in einer msgbox anzeigen lassen) würde ich auf ein Rechte-Problem tippen?

    [autoit]


    $path = @desktopdir &"\meinprogramm.exe"
    MsgBox(1, "", $path)
    run($path)

    [/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™