Mehrspaltige Listview / selected items auslesen und als string ausgeben?

  • Hallo Leute,


    %Ich habe nun ein weiteres Problem das eurer Hilfe bedarf, [unten angeführt]...

    Vielleicht könnt ihr mir dabei helfen: Ich möchte aus einer mehrspaltigen Listview ein selektiertes item als string an ein anderes programm übergeben, hab schon einiges versucht bekomme es aber nur hin den wert aus der 1. Spalte auszulesen jedoch nicht alle 7 Spalten....

    Danke schonmal im voraus....

    Spoiler anzeigen
    Zitat

    Ich weiß wo dein Haus wohnt... 8o

    3 Mal editiert, zuletzt von stinger2k (9. März 2010 um 21:07)

  • Hallo Stinger2k,

    schau dir einaml die Hilfe zu _GUICtrlListView_GetItemTextString an.

    [autoit]

    $sItem = _GUICtrlListView_GetItemTextString($listview)
    ;in $sItem stehht danach der durch "|" getrennte String des ausgewählten Items

    [/autoit]

    mfg (Auto)Bert

  • Danke AutoBert, :thumbup:


    funktioniert einwandfrei.


    Hättest du auch noch eine Möglichkeit parat wie ich mehrere selktierte items auslese???? ;(

    Spoiler anzeigen
    Zitat

    Ich weiß wo dein Haus wohnt... 8o

    Einmal editiert, zuletzt von stinger2k (1. März 2010 um 19:08)

  • Hallo stinger2k,

    schau dir in folgendem Beispiel-Skript von mir den Code ab Case $GUI_EVENT_DROPPED an:

    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>
    #include <GUIConstants.au3>
    #include <WindowsConstants.au3>
    #include <GuiListView.au3>
    #include <ListViewConstants.au3>
    ;#include <array.au3>

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

    Local $tZeit, $s1, $s2

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

    $main = GUICreate("Testlistview Drag & Drop from LV1 to LV2 DblClick in LV1", 600, 400)
    $listview = GUICtrlCreateListView("Gruppe1| BlubText", 10, 10, 200, 100, BitOR($LVS_REPORT, $LVS_SHOWSELALWAYS ), BitOR($LVS_EX_FULLROWSELECT, $WS_EX_CLIENTEDGE))
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_LV_ALTERNATE) ; legt fest, dass Hintergrundfarbe wechselt
    GUICtrlSetBkColor(-1, 0xE6E6FA) ; Hintergrundfarbe 1

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

    $listview2 = GUICtrlCreateListView("Gruppe2 | BlubText", 230, 10, 200, 100, BitOR($LVS_REPORT, $LVS_SHOWSELALWAYS), BitOR($LVS_EX_FULLROWSELECT, $WS_EX_CLIENTEDGE))
    GUICtrlSetState($listview2, $GUI_DROPACCEPTED)
    $hbtnInfo = GUICtrlCreateButton("Info", 160, 120, 100, 20)
    For $i = 1 To 9
    $listitem = GUICtrlCreateListViewItem("test" & $i & " |Blub " & Random(1, 9), $listview)
    GUICtrlSetBkColor(-1, 0xcccccc) ; Hintergrundfarbe 2
    Next
    GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY") ;<=========================================== Bemachrichtigung Doppelklick
    GUISetState()
    $first = True
    While 1
    $msg = GUIGetMsg()
    Switch $msg
    Case $GUI_EVENT_DROPPED ;<=====================================
    $ar = _GUICtrlListView_GetSelectedIndices($listview, True)
    ;_ArrayDisplay($ar)
    For $i = 1 To $ar[0]
    $sItem = _GUICtrlListView_GetItemTextString($listview, $ar[$i])
    GUICtrlCreateListViewItem($sItem, $listview2)
    Next
    Case $hbtnInfo
    $aItem = _GUICtrlListView_GetItemTextArray($listview)
    MsgBox(0, "Info zu " & $aItem[1] & ":", $aItem[2])
    if not $first Then MsgBox(0, "Erste Sicherung um " & $tZeit & ":", $s1 & @CRLF & $s2 & @CRLF )
    if $first AND $aItem[1] <> "" Then
    $s1 = $aItem[1]
    $s2 = $aItem[2]
    $tZeit = @HOUR & ":" & @MIN
    $first = False
    EndIf
    Case $GUI_EVENT_CLOSE
    Exit
    EndSwitch
    WEnd

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

    Func WM_NOTIFY($hWnd, $MsgID, $wParam, $lParam) ;<================== Benachrichtigung Doppelklick from Chaoskeks (in ChaosExecution)
    Local $tagNMHDR, $event, $hwndFrom, $code
    $tagNMHDR = DllStructCreate("int;int;int", $lParam)
    If @error Then Return 0
    $code = DllStructGetData($tagNMHDR, 3)
    If $wParam = $ListView And $code = -3 And _GUICtrlListView_GetSelectedCount($ListView) > 0 Then
    For $i = 0 To _GUICtrlListView_GetItemCount($ListView)
    IF _GUICtrlListView_GetItemSelected($ListView, $i) Then
    $aItem = _GUICtrlListView_GetItemTextArray($listview, $i)
    MsgBox(0,"Doppel-Klick auf ",$aItem[1] & @CRLF & @CRLF & $aItem[2])
    EndIf
    Next
    Endif
    Return $GUI_RUNDEFMSG
    EndFunc ;==>WM_NOTIFY

    [/autoit]

    Edit: 1. Beispiel war fehlerhaft Skript ausgetauscht
    mfg (Auto)Bert

    Einmal editiert, zuletzt von AutoBert (1. März 2010 um 20:22)

  • Deine Funktion funktioniert nicht wenn ich es mit dem kontextmenü verknüpfe

    mit ClipPut ($sitem) kopiert er mir nur das jeweils markierte vom rechtsklick.


    Wie könnte ich das umgehen :?:

    Spoiler anzeigen
    Zitat

    Ich weiß wo dein Haus wohnt... 8o

  • Hallo stinger2k,

    hier mein Beispiel aus Post #5 erweitert um Contextmenü:

    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>
    #include <GUIConstants.au3>
    #include <WindowsConstants.au3>
    #include <GuiListView.au3>
    #include <ListViewConstants.au3>
    ;#include <array.au3>

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

    Local $tZeit, $s1, $s2

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

    $main = GUICreate("Testlistview Drag & Drop from LV1 to LV2 DblClick in LV1", 600, 400)
    $listview = GUICtrlCreateListView("Gruppe1| BlubText", 10, 10, 200, 100, BitOR($LVS_REPORT, $LVS_SHOWSELALWAYS), BitOR($LVS_EX_FULLROWSELECT, $WS_EX_CLIENTEDGE))
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_LV_ALTERNATE) ; legt fest, dass Hintergrundfarbe wechselt
    GUICtrlSetBkColor(-1, 0xE6E6FA) ; Hintergrundfarbe 1

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

    $listview2 = GUICtrlCreateListView("Gruppe2 | BlubText", 230, 10, 200, 100, BitOR($LVS_REPORT, $LVS_SHOWSELALWAYS), BitOR($LVS_EX_FULLROWSELECT, $WS_EX_CLIENTEDGE))
    GUICtrlSetState($listview2, $GUI_DROPACCEPTED)
    $hbtnInfo = GUICtrlCreateButton("Info", 160, 120, 100, 20)
    For $i = 1 To 9
    $listitem = GUICtrlCreateListViewItem("test" & $i & " |Blub " & Random(1, 9), $listview)
    GUICtrlSetBkColor(-1, 0xcccccc) ; Hintergrundfarbe 2
    Next
    $idContextmenu = GUICtrlCreateContextMenu($listview)
    $idClipmenu = GUICtrlCreateMenuItem("Ins ClipBoard", $idContextmenu)

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

    GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY") ;<=========================================== Bemachrichtigung Doppelklick
    GUISetState()
    $first = True
    While 1
    $msg = GUIGetMsg()
    Switch $msg
    Case $GUI_EVENT_DROPPED
    $ar = _GUICtrlListView_GetSelectedIndices($listview, True)
    ;_ArrayDisplay($ar)
    For $i = 1 To $ar[0]
    $sItem = _GUICtrlListView_GetItemTextString($listview, $ar[$i])
    GUICtrlCreateListViewItem($sItem, $listview2)
    Next
    Case $hbtnInfo
    $aItem = _GUICtrlListView_GetItemTextArray($listview)
    MsgBox(0, "Info zu " & $aItem[1] & ":", $aItem[2])
    If Not $first Then MsgBox(0, "Erste Sicherung um " & $tZeit & ":", $s1 & @CRLF & $s2 & @CRLF)
    If $first And $aItem[1] <> "" Then
    $s1 = $aItem[1]
    $s2 = $aItem[2]
    $tZeit = @HOUR & ":" & @MIN
    $first = False
    EndIf
    Case $idClipmenu
    $aItems = _GUICtrlListView_GetSelectedIndices($listview, True)
    $sItemText = ""
    For $i = 1 To $aItems[0]
    ;Schleifenbeginn 1 da $aItem[0] die Anzahl enhält
    $sItemText &= _GUICtrlListView_GetItemTextString($listview, $aItems[$i]) & @CRLF
    ConsoleWrite($sItemText & @CRLF)
    Next ;= > weiter mit For
    ClipPut($sItemText & @CRLF)

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

    Case $GUI_EVENT_CLOSE
    Exit
    EndSwitch
    WEnd

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

    Func WM_NOTIFY($hWnd, $MsgID, $wParam, $lParam) ;<================== Benachrichtigung Doppelklick from Chaoskeks (in ChaosExecution)
    Local $tagNMHDR, $event, $hwndFrom, $code
    $tagNMHDR = DllStructCreate("int;int;int", $lParam)
    If @error Then Return 0
    $code = DllStructGetData($tagNMHDR, 3)
    If $wParam = $listview And $code = -3 And _GUICtrlListView_GetSelectedCount($listview) > 0 Then
    For $i = 0 To _GUICtrlListView_GetItemCount($listview)
    If _GUICtrlListView_GetItemSelected($listview, $i) Then
    $aItem = _GUICtrlListView_GetItemTextArray($listview, $i)
    MsgBox(0, "Doppel-Klick auf ", $aItem[1] & @CRLF & @CRLF & $aItem[2])
    EndIf
    Next
    EndIf
    Return $GUI_RUNDEFMSG
    EndFunc ;==>WM_NOTIFY

    [/autoit]

    Falls du noch Fragen/Probleme hast poste doch bitte dein Skript dazu,

    mfg (Auto)Bert

  • Mit diesen Ansätzen konnte ich schon gut arbeiten, jedoch stellt sich mir ein neues Problem ;(


    Wie schaffe ich es eine Listview in ein Array zu speichern und dieses an die Zwischenablage weiterzugeben :?:

    folgende func funktioniert nicht, da sie mir nur 9 ausgibt je nachdem wieviele item count´s gemacht wurden.


    [autoit]


    Func write()
    For $i = 0 To _GUICtrlListView_GetItemCount($Liste)
    $sItem = _GUICtrlListView_GetItemTextString($Liste, $i)
    $iItem=StringReplace($sItem, "|", @TAB)
    Next
    $array = $iItem
    _ArrayToClip ($array,1)
    EndFunc ;==>write

    [/autoit]


    Ps.: Diese Funktion bringt beim schreiben direkt in eine Datei mit _FileWrite den gewünschten Effekt.

    Jedoch möchte ich die Zwischenablage verwenden um den Datenaustausch mit Excel zu vereinfachen...


    Bitte helft mir...

    Spoiler anzeigen
    Zitat

    Ich weiß wo dein Haus wohnt... 8o

  • Hallo stinger2k,

    du kannst kein Array an das Clipboard übergeben, nur Strings (diese halt mit @crlf formatiert für Zeilenschaltung) siehe dazu auch mein Beispiel in Post #5
    und hier diese func umgeschrieben:

    [autoit]

    Func write()
    Local $sToClip = ""
    For $i = 0 To _GUICtrlListView_GetItemCount($Liste)
    $sItem = _GUICtrlListView_GetItemTextString($Liste, $i)
    $iItem=StringReplace($sItem, "|", @TAB) & @CRLF
    $sToClip &= $iItem
    Next
    _ArrayToClip ($sToClip,1)
    EndFunc ;==>write

    [/autoit]

    sollte mit FileWrite auch dirket in Datei klappen, beides aber ungetestet (online geschrieben)

    mfg (Auto)Bert

  • Funktioniert auch nicht da ich als Spaltentrennung "|" verwende und nur durch @Tab ersetze um es in Excel einzufügen, mit dieser func schreibt er mir nach jedem wert eine neue Zeile was ich jedoch vermeiden muss.

    Spoiler anzeigen
    Zitat

    Ich weiß wo dein Haus wohnt... 8o

  • kenne mich mit objekten nicht aus...

    wäre aber für jede erklärung und hilfestellung dankbar.


    Hier nochmals mein code:

    Spoiler anzeigen
    [autoit]


    #region ;**** Directives created by AutoIt3Wrapper_GUI ****
    #AutoIt3Wrapper_icon=C:\WinSetupFromUSB\files\5_1.ico
    #AutoIt3Wrapper_outfile=..\..\ESCO\DK540i.exe
    #AutoIt3Wrapper_UseX64=n
    #endregion ;**** Directives created by AutoIt3Wrapper_GUI ****
    #include <Excel.au3>
    #include <File.au3>
    #include <GuiEdit.au3>
    #include <GuiListView.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <ListViewConstants.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    #include <GuiListBox.au3>
    AutoItSetOption("TrayIconHide", 1)
    FileInstall("N:\ESCO_2.l", @ScriptDir & "\")
    FileInstall("N:\DK.pdf", @ScriptDir & "\")
    FileInstall("N:\TF.pdf", @ScriptDir & "\")
    FileInstall("N:\Liste.xls", @ScriptDir & "\")
    _FileCreate(@ScriptDir & "\list.esc")
    Global $T1rech, $T1_1rech, $T2rech, $T3rech, $T4rech, $T5rech, $T1, $T1_1, $T2, $T3, $T4, $T5
    Global $FB, $FH, $GH, $Checkbox1, $Pos, $file, $line, $Form1
    Global $temp
    $x = @DesktopWidth - 30
    $y = @DesktopHeight - 60
    #region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("esco - Schubstangenkonfigurator v0.1 beta", $x, $y, -1, -1, BitOR($WS_MAXIMIZE, $WS_SIZEBOX, $WS_MAXIMIZEBOX, $WS_MINIMIZEBOX, $WS_GROUP, $WS_CLIPSIBLINGS, $ES_AUTOHSCROLL, $ES_AUTOVSCROLL))
    $Datei = GUICtrlCreateMenu("&Datei")
    $Bearbeiten = GUICtrlCreateMenu("&Bearbeiten")
    $Optionen = GUICtrlCreateMenu("&Optionen")
    $Hilfe = GUICtrlCreateMenu("&Hilfe")
    $oeffnen = GUICtrlCreateMenuItem("&Öffnen", $Datei)
    $menuneu = GUICtrlCreateMenuItem("&Neu", $Datei)
    $menudruck = GUICtrlCreateMenuItem("&Drucken", $Datei)
    $menusave = GUICtrlCreateMenuItem("&Speichern", $Datei)
    $menusearch = GUICtrlCreateMenuItem("Suchen", $Bearbeiten)
    $menucopy = GUICtrlCreateMenuItem("Kopieren", $Bearbeiten)
    $menutoexcel = GUICtrlCreateMenuItem("in Excel bearbeiten", $Bearbeiten)
    $menusend = GUICtrlCreateMenuItem("als E-Mail versenden", $Bearbeiten)
    $menuscreenshot = GUICtrlCreateMenuItem("Screenshot erzeugen", $Bearbeiten)
    $menueinstellungen = GUICtrlCreateMenuItem("Firmendaten aktualisieren", $Optionen)
    $kommission = GUICtrlCreateMenuItem("Kommission hinzufügen", $Optionen)
    $menubeschlag = GUICtrlCreateMenuItem("Beschlag wechseln DK/TF", $Optionen)
    $menuDK = GUICtrlCreateMenuItem("Montageanleitung DK", $Hilfe)
    $menuTF = GUICtrlCreateMenuItem("Montageanleitung TF", $Hilfe)
    $menuinfo = GUICtrlCreateMenuItem("Über...", $Hilfe)
    GUISetBkColor(0xFFFFFF)
    $Pic1 = GUICtrlCreatePic("ESCO_2.l", 39, 39, 121, 40, BitOR($SS_NOTIFY, $WS_GROUP, $WS_CLIPSIBLINGS))
    $Text_Progname = GUICtrlCreateLabel("Schubstangenkonfigurator (Roto T540-10 DK)", 282, 48, 875, 36, BitOR($WS_CHILD, $ES_AUTOHSCROLL, $ES_AUTOVSCROLL))
    GUICtrlSetFont(-1, 16, 800, 0, "MS Reference Sans Serif")
    GUICtrlSetColor(-1, 0x000080)
    $Text_Beschr = GUICtrlCreateLabel("Bitte geben Sie folgende Maße an:", 39, 114, 134, 46, BitOR($ES_AUTOHSCROLL, $ES_AUTOVSCROLL))
    $Text_FB = GUICtrlCreateLabel("Flügelbreite: (FB)", 39, 162, 92, 17)
    $Text_FH = GUICtrlCreateLabel("Flügelhöhe: (FH)", 39, 195, 92, 17)
    $Text_GH = GUICtrlCreateLabel("Griffhöhe: (GH)", 39, 228, 92, 17)
    $Text_Pos = GUICtrlCreateLabel("Pos. (optional)", 39, 261, 92, 17)
    $FB = GUICtrlCreateInput("", 139, 159, 80, 21, BitOR($ES_AUTOHSCROLL, $ES_NUMBER))
    $FH = GUICtrlCreateInput("", 139, 192, 80, 21, BitOR($ES_AUTOHSCROLL, $ES_NUMBER))
    $GH = GUICtrlCreateInput("", 139, 225, 80, 21, BitOR($ES_AUTOHSCROLL, $ES_NUMBER))
    $Pos = GUICtrlCreateInput("", 139, 258, 80, 21, BitOR($ES_UPPERCASE, $ES_AUTOHSCROLL))
    $Group1 = GUICtrlCreateGroup("Schubstangenlängen: (mm)", 233, 139, 309, 152)
    $Text_T1 = GUICtrlCreateLabel("T1", 245, 162, 33, 17, $ES_AUTOHSCROLL)
    $Text_T2 = GUICtrlCreateLabel("T2", 407, 162, 33, 17, $ES_AUTOHSCROLL)
    $Text_T3 = GUICtrlCreateLabel("T3", 245, 195, 33, 17, $ES_AUTOHSCROLL)
    $Text_T4 = GUICtrlCreateLabel("T4", 407, 195, 33, 17, $ES_AUTOHSCROLL)
    $Text_T5 = GUICtrlCreateLabel("T5", 245, 228, 33, 17, $ES_AUTOHSCROLL)
    ;~ $Text_T1_1 = GUICtrlCreateLabel("** T1.1", 396, 228, 42, 17, $SS_CENTERIMAGE)
    $T1 = GUICtrlCreateInput("", 273, 159, 92, 21, BitOR($ES_AUTOHSCROLL, $ES_READONLY))
    $T2 = GUICtrlCreateInput("", 435, 159, 92, 21, BitOR($ES_AUTOHSCROLL, $ES_READONLY))
    $T3 = GUICtrlCreateInput("", 273, 192, 92, 21, BitOR($ES_AUTOHSCROLL, $ES_READONLY))
    $T4 = GUICtrlCreateInput("", 435, 192, 92, 21, BitOR($ES_AUTOHSCROLL, $ES_READONLY))
    $T5 = GUICtrlCreateInput("", 273, 225, 92, 21, BitOR($ES_AUTOHSCROLL, $ES_READONLY))
    ;~ $T1_1 = GUICtrlCreateInput("", 435, 225, 92, 21, BitOR($ES_AUTOHSCROLL, $ES_READONLY))
    ;~ $T1_1text = GUICtrlCreateLabel("** Alternativ bis 1300 (FB) zu T1 u. T2", 364, 300, 400, 17)
    $Checkbox1 = GUICtrlCreateCheckbox("mit Einlassgetriebe", 245, 261, 115, 17)
    ;~ $Checkbox2 = GUICtrlCreateCheckbox("ohne Mittelverschluss", 407, 261, 123, 17)
    $Berechnen = GUICtrlCreateButton("Berechnen", 555, 156, 87, 25, $WS_GROUP)
    $Abbrechen = GUICtrlCreateButton("Abbrechen", 555, 189, 87, 25, $WS_GROUP)
    $Drucken__ = GUICtrlCreateButton("Drucken", 555, 222, 87, 25, $WS_GROUP)
    $Listenansicht = GUICtrlCreateButton("Übernehmen", 555, 255, 87, 25, $WS_GROUP)
    $Zusammenfassung = GUICtrlCreateGroup("Zusammenfassung", 45, 316, 930, 328)
    $Liste = GUICtrlCreateListView("Pos.|T1|T2|T3|T4|T5", 54, 333, 912, 300, BitOR($LVS_REPORT, $LVS_EDITLABELS, $WS_EX_DLGMODALFRAME, $WS_EX_CLIENTEDGE))
    _GUICtrlListView_SetColumnWidth($Liste, 0, 130)
    _GUICtrlListView_SetColumnWidth($Liste, 1, 80)
    _GUICtrlListView_SetColumnWidth($Liste, 2, 80)
    _GUICtrlListView_SetColumnWidth($Liste, 3, 80)
    _GUICtrlListView_SetColumnWidth($Liste, 4, 80)
    _GUICtrlListView_SetColumnWidth($Liste, 5, 80)
    _GUICtrlListView_SetExtendedListViewStyle($Liste, BitOR($LVS_EX_GRIDLINES, $LVS_EX_FULLROWSELECT, $LVS_EX_DOUBLEBUFFER))
    GUICtrlSetBkColor($Liste, $GUI_BKCOLOR_LV_ALTERNATE)
    $menu = GUICtrlCreateContextMenu($Liste)
    $entf = GUICtrlCreateMenuItem("Eintrag entfernen", $Liste)
    $newlist = GUICtrlCreateMenuItem("Neue Liste", $Liste)
    $copyitem = GUICtrlCreateMenuItem("Kopieren", $menu)
    $send = GUICtrlCreateMenuItem("als E-Mail versenden", $Liste)
    _GUICtrlListView_RegisterSortCallBack($Liste)
    $Speichern = GUICtrlCreateButton("Liste speichern", 45, 652, 120, 25, $WS_GROUP)
    $Excel = GUICtrlCreateButton("mit Excel bearbeiten", 215, 652, 120, 25, $WS_GROUP)
    $Group3 = GUICtrlCreateGroup("Firmendaten", 655, 139, 328, 154)
    $Label1 = GUICtrlCreateLabel("Firma:", 667, 159, 101, 17)
    $Label3 = GUICtrlCreateLabel("Adresse:", 667, 192, 101, 17)
    $Label5 = GUICtrlCreateLabel("@e-mail:", 667, 225, 101, 17)
    $Label2 = GUICtrlCreateLabel("Telefon / Fax:", 667, 258, 101, 17)
    $Input1 = GUICtrlCreateInput("", 769, 156, 199, 21, $ES_READONLY)
    $Input3 = GUICtrlCreateInput("", 769, 189, 199, 21, $ES_READONLY)
    $Input5 = GUICtrlCreateInput("", 769, 222, 199, 21, $ES_READONLY)
    $Input2 = GUICtrlCreateInput("", 769, 255, 199, 21, $ES_READONLY)
    $Icon1 = GUICtrlCreateIcon("C:\Windows\System32\shell32.dll", 265, 731, 131, 32, 32)
    GUISetState(@SW_SHOW)
    #endregion ### END Koda GUI section ###

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    $close = MsgBox(36, "Schließen", "Wollen Sie das Pogramm wirklich beenden?")
    If $close = 6 Then Exit
    Case $FB
    If GUICtrlRead($FB) < 405 Then
    _GUICtrlEdit_ShowBalloonTip($FB, "Fehler", "Fensterbreite (FB) unter 405 mm nicht zulässig", $TTI_INFO)
    ContinueLoop
    EndIf
    If GUICtrlRead($FB) > 1600 Then
    _GUICtrlEdit_ShowBalloonTip($FB, "Fehler", "Fensterbreite (FB) über 1600 mm nicht zulässig", $TTI_INFO)
    ContinueLoop
    EndIf
    ;~ GUICtrlSetState($Checkbox1, $GUI_UNCHECKED)
    ;~ GUICtrlSetState($Checkbox1, $GUI_DISABLE)
    Case $FH
    If GUICtrlRead($FH) < 520 Then
    _GUICtrlEdit_ShowBalloonTip($FH, "Fehler", "Fensterhöhe (FH) unter 520 mm nicht zulässig", $TTI_INFO)
    ContinueLoop
    EndIf
    If GUICtrlRead($FH) > 2400 Then
    _GUICtrlEdit_ShowBalloonTip($FH, "Fehler", "Fensterhöhe (FH) über 2400 mm nicht zulässig", $TTI_INFO)
    ContinueLoop
    EndIf
    If GUICtrlRead($GH) < Round(GUICtrlRead($FH) / 3, 0) Then
    GUICtrlSetData($GH, "260")
    EndIf
    $ghdata = Round(GUICtrlRead($FH) / 3, 0)
    If $ghdata < 260 Then
    GUICtrlSetData($GH, "260")
    Else
    GUICtrlSetData($GH, $ghdata)
    EndIf
    ;~ GUICtrlSetState($Checkbox1, $GUI_UNCHECKED)
    ;~ GUICtrlSetState($Checkbox1, $GUI_DISABLE)
    Case $GH
    If GUICtrlRead($FH) - $GH - 175 < 0 Then
    _GUICtrlEdit_ShowBalloonTip($GH, "Fehler", "(GH) ist für diese (FH) nicht zulässig!", $TTI_ERROR)
    ContinueLoop
    EndIf
    If GUICtrlRead($GH) < 260 Then
    GUICtrlSetData($GH, "260")
    ContinueLoop
    EndIf
    If GUICtrlRead($GH) < 260 Then
    _GUICtrlEdit_ShowBalloonTip($GH, "Fehler", "Griffhöhe (GH) unter 260 mm nicht zulässig", $TTI_INFO)
    ContinueLoop
    EndIf
    If GUICtrlRead($GH) < Round(GUICtrlRead($FH) / 3, 0) Then
    _GUICtrlEdit_ShowBalloonTip($GH, "Fehler", "(GH) muss mindestens 1/3 der (FH) sein", $TTI_INFO)
    GUICtrlSetData($GH, "260")
    ContinueLoop
    EndIf
    ;~ GUICtrlSetState($Checkbox1, $GUI_UNCHECKED)
    ;~ GUICtrlSetState($Checkbox1, $GUI_DISABLE)

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

    Case $Pos
    Case $Checkbox1
    If GUICtrlRead($GH) <= 0 Then
    _GUICtrlEdit_ShowBalloonTip($GH, "Fehler", "(GH) keine Maße zum berechnen!", $TTI_ERROR)
    ContinueLoop
    EndIf
    If GUICtrlRead($GH) < 260 Then GUICtrlSetData($GH, "260")

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

    If GUICtrlRead($GH) < Round(GUICtrlRead($FH) / 3, 0) Then
    _GUICtrlEdit_ShowBalloonTip($GH, "Fehler", "(GH) muss mindestens 1/3 der (FH) sein", $TTI_ERROR)
    ContinueLoop
    EndIf
    If GUICtrlRead($GH) = "" Then
    _GUICtrlEdit_ShowBalloonTip($GH, "Fehler", "(GH) keine Maße zum berechnen!", $TTI_ERROR)
    ContinueLoop
    EndIf
    If GUICtrlRead($FB) = "" Then
    _GUICtrlEdit_ShowBalloonTip($FB, "Fehler", "(FB) keine Maße zum berechnen!", $TTI_ERROR)
    ContinueLoop
    EndIf
    If GUICtrlRead($FH) = "" Then
    _GUICtrlEdit_ShowBalloonTip($FH, "Fehler", "(FH) keine Maße zum berechnen!", $TTI_ERROR)
    ContinueLoop
    EndIf
    If GUICtrlRead($T2) < 0 Then
    _GUICtrlEdit_ShowBalloonTip($GH, "Fehler", "(GH) ist für diese (FH) nicht zulässig!", $TTI_ERROR)
    ContinueLoop
    EndIf
    If GUICtrlRead($T2) < 0 Then _GUICtrlEdit_ShowBalloonTip($GH, "Fehler", "(GH) ist für diese (FH) nicht zulässig!", $TTI_ERROR)
    If GUICtrlRead($FH) - $GH - 175 < 0 Then
    _GUICtrlEdit_ShowBalloonTip($GH, "Fehler", "(GH) ist für diese (FH) nicht zulässig!", $TTI_ERROR)
    ContinueLoop
    EndIf
    rechnen()
    If GUICtrlRead($T2) <= 0 Then
    _GUICtrlEdit_ShowBalloonTip($GH, "Fehler", "(GH) ist für diese (FH) nicht zulässig!", $TTI_ERROR)
    ContinueLoop
    EndIf
    Case $Abbrechen
    $close = MsgBox(36, "Abbrechen", "Wollen Sie das Pogramm wirklich beenden?")
    If $close = 6 Then Exit
    Case $Berechnen
    GUISetState($Berechnen, $GUI_FOCUS)
    If GUICtrlRead($GH) < 260 Then GUICtrlSetData($GH, "260")

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

    If GUICtrlRead($GH) < Round(GUICtrlRead($FH) / 3, 0) Then
    _GUICtrlEdit_ShowBalloonTip($GH, "Fehler", "(GH) muss mindestens 1/3 der (FH) sein", $TTI_ERROR)
    ContinueLoop
    EndIf
    If GUICtrlRead($GH) = "" Then
    _GUICtrlEdit_ShowBalloonTip($GH, "Fehler", "(GH) keine Maße zum berechnen!", $TTI_ERROR)
    ContinueLoop
    EndIf
    If GUICtrlRead($FB) = "" Then
    _GUICtrlEdit_ShowBalloonTip($FB, "Fehler", "(FB) keine Maße zum berechnen!", $TTI_ERROR)
    ContinueLoop
    EndIf
    If GUICtrlRead($FH) = "" Then
    _GUICtrlEdit_ShowBalloonTip($FH, "Fehler", "(FH) keine Maße zum berechnen!", $TTI_ERROR)
    ContinueLoop
    EndIf
    If GUICtrlRead($T2) < 0 Then
    _GUICtrlEdit_ShowBalloonTip($GH, "Fehler", "(GH) ist für diese (FH) nicht zulässig!", $TTI_ERROR)
    ContinueLoop
    EndIf
    If GUICtrlRead($T2) < 0 Then _GUICtrlEdit_ShowBalloonTip($GH, "Fehler", "(GH) ist für diese (FH) nicht zulässig!", $TTI_ERROR)
    If GUICtrlRead($FH) - $GH - 175 < 0 Then
    _GUICtrlEdit_ShowBalloonTip($GH, "Fehler", "(GH) ist für diese (FH) nicht zulässig!", $TTI_ERROR)
    ContinueLoop
    EndIf
    rechnen()
    ;~ GUICtrlSetState($Checkbox1, $GUI_ENABLE)
    Case $Drucken__
    _Print()

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

    Case $Listenansicht
    $index = GUICtrlRead($Pos)
    $1 = GUICtrlRead($T1)
    $2 = GUICtrlRead($T2)
    $3 = GUICtrlRead($T3)
    $4 = GUICtrlRead($T4)
    $5 = GUICtrlRead($T5)
    GUICtrlCreateListViewItem($index & "|" & $1 & "|" & $2 & "|" & $3 & "|" & $4 & "|" & $5, $Liste)

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

    Case $Excel
    write()
    $werte=ClipGet ()
    $excelbook=_ExcelBookOpen (@ScriptDir &"\liste.xls")
    _ExcelWriteArray ($excelbook,6,1,$werte)
    Case $Speichern
    $var = FileSaveDialog("Speicherort", @ScriptDir & "\", "esco Listen(*.esc)", 2, "liste.esc")
    FileCopy(@ScriptDir & "\list.esc", $var, 1 + 8)
    Case $oeffnen
    Opt("GUIDataSeparatorChar", @TAB)
    Local $listfile, $fileopen
    $fileopen = FileOpenDialog("Öffnen", @ScriptDir, "esco listen(*.esc)")
    If Not @error Then
    _GUICtrlListView_DeleteAllItems(GUICtrlGetHandle($Liste))
    _FileReadToArray($fileopen, $line)
    For $i = 1 To UBound($line) - 1
    StringReplace($line[$i], @TAB & @TAB, @TAB)
    GUICtrlCreateListViewItem($line[$i], $Liste)
    Next
    EndIf
    Opt("GUIDataSeparatorChar", Default)
    Case $newlist
    _GUICtrlListView_DeleteAllItems(GUICtrlGetHandle($Liste))
    Case $entf
    _GUICtrlListView_DeleteItemsSelected(GUICtrlGetHandle($Liste))
    Case $menuinfo
    $infotext = "esco ToolSuite - Schubstangenkonfigurator" & @CRLF & @CRLF
    $infotext &= "Version 0.3" & @CRLF & @CRLF
    $infotext &= "HRB 202074 Stuttgart I Geschäftsführer: Christoph Schill" & @CRLF
    $infotext &= "Ein Unternehmen der VBH-Gruppe"
    MsgBox(0, "Über...", $infotext)
    Case $menuneu
    _GUICtrlListView_DeleteAllItems(GUICtrlGetHandle($Liste))
    Case $menuDK
    $executedk = ShellExecute(@ScriptDir & "\dk.pdf")
    If @error Then
    MsgBox(16, "esco-ToolSuite", "Es ist ein Fehler aufgetreten!" & @CRLF & @CRLF & "Installieren Sie die Anwendung erneut um den Fehler zu beheben.")
    EndIf
    Case $menuTF
    $executetf = ShellExecute(@ScriptDir & "\tf.pdf")
    If @error Then
    MsgBox(16, "esco-ToolSuite", "Es ist ein Fehler aufgetreten!" & @CRLF & @CRLF & "Installieren Sie die Anwendung erneut um den Fehler zu beheben.")
    EndIf
    Case $menusave
    $var = FileSaveDialog("Speicherort", @ScriptDir & "\", "esco Listen(*.esc)", 2, "liste.esc")
    FileCopy(@ScriptDir & "\list.esc", $var, 1 + 8)
    Case $Liste
    _GUICtrlListView_SortItems($Liste, GUICtrlGetState($Liste))
    Case $copyitem
    $curitemtext = _GUICtrlListView_GetItemTextString($Liste, -1)
    $itemtext = StringReplace($curitemtext, "|", @TAB)
    ClipPut($itemtext)
    Case $menueinstellungen
    $Firma = InputBox("Firmendaten", "Firmenwortlaut:", "", "", 260, 130)
    GUISetIcon(@WindowsDir & "\system32\shell32.dll", 265, -1)
    GUICtrlSetData($Input1, $Firma)
    $Adresse = InputBox("Firmendaten", "Firmenanschrift:", "", "", 260, 130)
    GUISetIcon(@WindowsDir & "\system32\shell32.dll", 265, -1)
    GUICtrlSetData($Input3, $Adresse)
    $mail = InputBox("Firmendaten", "Ihre E-Mail Adresse:", "", "", 260, 130)
    GUISetIcon(@WindowsDir & "\system32\shell32.dll", 265, -1)
    GUICtrlSetData($Input5, $mail)
    $telephone = InputBox("Firmendaten", "Telefonnummer für Rückfragen:", "", "", 260, 130)
    GUISetIcon(@WindowsDir & "\system32\shell32.dll", 265, -1)
    GUICtrlSetData($Input2, $telephone)
    Case $kommission
    $kbvh = InputBox("Kommissionsdaten", "Kommission / Bvh:", "", "", 260, 130)
    $kadresse = InputBox("Kommissionsdaten", "Anschrift:", "", "", 260, 130)
    $ktelephone = InputBox("Kommissionsdaten", "Telefonnummer für Rückfragen:", "", "", 260, 130)
    $kansprechpartner = InputBox("Kommissionsdaten", "Ansprechpartner:", "", "", 260, 130)
    $kbemerkung = InputBox("Kommissionsdaten", "Bemerkungen:", "", "", 260, 130)
    Case $menubeschlag

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

    EndSwitch
    WEnd
    Func rechnen()
    If GUICtrlRead($Checkbox1) = $GUI_CHECKED Then
    $T1rech = GUICtrlRead($GH) - 222
    Else
    $T1rech = GUICtrlRead($GH) - 175
    EndIf
    If GUICtrlRead($Checkbox1) = $GUI_CHECKED Then
    $T2rech = GUICtrlRead($FH) - GUICtrlRead($GH) - 222
    Else
    $T2rech = GUICtrlRead($FH) - GUICtrlRead($GH) - 175
    EndIf
    If GUICtrlRead($FB) < 600 Then $T3rech = GUICtrlRead($FB) - 371
    If GUICtrlRead($FB) >= 600 Then $T3rech = GUICtrlRead($FB) - 539
    $T4rech = GUICtrlRead($FH) / 2 - 128
    $T5rech = GUICtrlRead($FB) / 2 - 94
    GUICtrlSetData($T1, $T1rech)
    GUICtrlSetData($T2, $T2rech)
    GUICtrlSetData($T3, $T3rech)
    GUICtrlSetData($T4, $T4rech)
    GUICtrlSetData($T5, $T5rech)

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

    EndFunc ;==>rechnen
    Func write()
    For $i = 0 To _GUICtrlListView_GetItemCount($Liste)
    $sItem = _GUICtrlListView_GetItemTextString($Liste, $i)
    $iItem=StringReplace($sItem, "|", @TAB)
    ClipPut ($sItem)
    Next
    EndFunc ;==>write
    Func _Print()
    EndFunc ;==>_Print

    [/autoit]


    PS: Bei ClipPut wird nur der jeweils letze wert einbezogen, bei _ArrayToClip wird für jedes item bzw. eingelesene zeile "9" zurückgegeben.

    Spoiler anzeigen
    Zitat

    Ich weiß wo dein Haus wohnt... 8o

    Einmal editiert, zuletzt von stinger2k (9. März 2010 um 22:07)

    • Offizieller Beitrag

    Mit der Zwischenablage ist nicht sinnvoll, schreibe doch direkt in die Excel-Datei:

    Spoiler anzeigen
    [autoit]

    #include <GuiListView.au3>
    Local $s, $gui, $lv
    $gui = GUICreate('test')
    $lv = GUICtrlCreateListView('1|2|3|4', 10, 10, 300, 200)
    $hWnd = GUICtrlGetHandle($lv)
    For $i = 1 To 10
    $s = ''
    For $j = 1 To 4
    $s &= Random(100,999,1) & '|'
    Next
    GUICtrlCreateListViewItem(StringTrimRight($s, 1), $lv)
    Next
    GUISetState(@SW_SHOW, $gui)

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

    ; === übertragen in Excel-Dokument
    Local $sFilePath = @ScriptDir & '\test1.xls'
    Local $oExcel = ObjCreate("Excel.Application")
    $oExcel.Visible = 0
    $oExcel.WorkBooks.Add
    $oExcel.ActiveWorkbook.Sheets(1).Select ()

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

    For $i = 0 To _GUICtrlListView_GetItemCount($hWnd) -1
    For $j = 0 To _GUICtrlListView_GetColumnCount($hWnd) -1
    $oExcel.Range("A1").Offset($i, $j).Value = _GUICtrlListView_GetItemText($hWnd, $i, $j)
    Next
    Next

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

    $oExcel.DisplayAlerts = False
    $oExcel.ActiveWorkBook.SaveAs($sFilePath)
    $oExcel.Application.Quit
    MsgBox(0, 'Speichern in Excel', 'Fertig :D')

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

    Do
    Until GUIGetMsg() = -3

    [/autoit]
  • funzt einwandfrei...

    nun folgt jedoch schon wieder das nächste problem


    Wie kann ich eine bestehende excel-datei öffnen um die daten darin reinzuschreiben?


    Ps: wo kann ich die verwendeten funktionen in den objekten finden...


    Thanks BugFix

    Spoiler anzeigen
    Zitat

    Ich weiß wo dein Haus wohnt... 8o

    • Offizieller Beitrag

    Excel-Datei öffnen:
    statt WorksBook.Add ==> WorkBooks.Open

    [autoit]

    $oExcel.WorkBooks.Open($sFilePath)
    ;~ $oExcel.WorkBooks.Add

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

    ; zum Speichern dann anstatt SaveAs nur Save
    $oExcel.ActiveWorkBook.Save

    [/autoit]

    Vieles findest du in der Excel.au3, ansonsten kannst du dir bei MSDN mal das Excel-Object-Model anschauen.

  • Danke BugFix dies stellt natürlich die weit bessere Lösung dar.


    Muss mich einfach mehr in die Materie mit den Objekten einarbeiten.

    Spoiler anzeigen
    Zitat

    Ich weiß wo dein Haus wohnt... 8o