Page 1 of 1

ListView: nur ein Teil der ausgewählten Zeilen wird übernommen

Posted: 01 Aug 2020, 10:02
by KHA
Hallo,
Wenn ich bei einer ListView mehrere Zeilen auswählen um es zu bearbeiten, wird mir nur ein Teil übernommen.
Also, z.B ich habe 10 Zeilen ausgewählt, es werden aber nur 7 Zeilen exportiert, habe zum besseren Verständnis ein Gif angehängt.

Ist mein Funktion "AusWahlFehlderHolen" falsch?

LG

Code: Select all

; Erstellt eine ListView mit den zwei Spalten, Name und Größe:
Gui, Add, ListView, r20 w700 gMeineListView vvMeineListView, Name|Größe (KB)

; Sammelt eine Liste mit Dateien von einem Ordner und fügt sie in die ListView ein:
Loop, C:\Windows\*.*
    LV_Add("", A_LoopFileName, A_LoopFileSizeKB)

LV_ModifyCol()  ; Passt die Breiten der Spalten an den Inhalt der Reihen an.
LV_ModifyCol(2, "Integer")  ; Kennzeichnet aus Sortierungsgründen die Spalte 2 als Integer.


Menu, MeinKontextmenue, Add, Öffnen, Oeffnen
Menu, MeinKontextmenue, Add, Schließen, schliessen


Gui, Show
return

MeineListView:
if (A_GuiEvent = "DoubleClick")
{
    LV_GetText(Reihentext, A_EventInfo)  ; Ermittelt den Text aus dem ersten Feld der Reihe.
    ToolTip Sie haben die Reihe %A_EventInfo% doppelt angeklickt. Text: "%Reihentext%"
}
return


GuiContextMenu:
if (A_GuiControl <> "vMeineListView") 
    return
Menu, MeinKontextmenue, Show, %A_GuiX%, %A_GuiY%
return


Oeffnen:
SpalteEins := AusWahlFehlderHolen(1)
MsgBox, % SpalteEins
Return

schliessen:
SpalteZwei := AusWahlFehlderHolen(2)
MsgBox, % SpalteZwei
Return


AusWahlFehlderHolen(Spalte)
{
   Anfang := 0
   	Loop
	   {
    	    Anfang := LV_GetNext(Anfang) 
	        if not Anfang 
	        break
   	    LV_GetText(AusgewaehlteSpalte, Anfang, Spalte)
	    KomplettAuswahl .= AusgewaehlteSpalte "`n"
	    LV_Delete(Anfang)
   	}

  Return % KomplettAuswahl
}



GuiClose:  ; Kennzeichnet, dass das Skript automatisch beim Schließen des Fensters beendet werden sollte.
ExitApp
ListView.gif
ListView.gif (309.4 KiB) Viewed 3928 times

Re: ListView: nur ein Teil der ausgewählten Zeilen wird übernommen

Posted: 01 Aug 2020, 11:14
by garry

Code: Select all

;LV_Delete(Anfang)
diesen Befehl weglassen, denn scheint's OK

Re: ListView: nur ein Teil der ausgewählten Zeilen wird übernommen

Posted: 01 Aug 2020, 12:00
by KHA
@garry stimmt, vielen Dank!
Idee, wie ich danach die Zeilen Löschen/Ausblenden, kann?

Re: ListView: nur ein Teil der ausgewählten Zeilen wird übernommen

Posted: 02 Aug 2020, 05:07
by just me

Code: Select all

AusWahlFehlderHolen(Spalte)
{
   KomplettAuswahl := ""                                 ; Rückgabevariable initialisieren
   If (Start := LV_GetNext(0))                           ; erste ausgewählte Zeile ermitteln
   {
      GuiControl, -Redraw, vMeineListView                ; Neuzeichnen des ListViews abschalten
      Anzahl := LV_GetCount("S")                         ; Anzahl der ausgewählten Zeilen holen
      Row := Start                                       ; Startzeile für die Schleife versorgen
      Loop, %Anzahl%                                     ; für jede ausgewählte Zeile
      {
         LV_GetText(AusgewaehlteSpalte, Row++, Spalte)   ; übergebene Spalte auslesen und die Zeilennummer um 1 erhöhen
         KomplettAuswahl .= AusgewaehlteSpalte "`n"      ; Rückgabevariable versorgen
      }
      Loop, %Anzahl%                                     ; für jede ausgewählte Zeile
         LV_Delete(Start)                                ; Startzeile löschen, die anderen wandern 1 Zeile nach unten
      GuiControl, +Redraw, vMeineListView                ; Neuzeichnen des ListViews wieder einschalten
   }
   Return %KomplettAuswahl%                              ; Rückgabevariable zurückgeben
}
So vielleicht?

Re: ListView: nur ein Teil der ausgewählten Zeilen wird übernommen  Topic is solved

Posted: 02 Aug 2020, 06:43
by garry
@just me , danke , ich hatte dies :

Code: Select all

;- ListView: nur ein Teil der ausgewählten Zeilen wird übernommen 
;- https://www.autohotkey.com/boards/viewtopic.php?f=9&t=79354

#warn
#NoEnv
setworkingdir,%a_scriptdir%
Gui, Add, ListView, r20 w700 gMeineListView vvMeineListView, Name|Größe (KB)
Loop, C:\Windows\*.*
    LV_Add("", A_LoopFileName, A_LoopFileSizeKB)
LV_ModifyCol()                  ;- Passt die Breiten der Spalten an den Inhalt der Reihen an.
LV_ModifyCol(2, "Integer")      ;- Kennzeichnet aus Sortierungsgründen die Spalte 2 als Integer.
Menu, MeinKontextmenue, Add, Öffnen   , Oeffnen
Menu, MeinKontextmenue, Add, Schließen, Schliessen
Gui, Show,,TEST
return
;--------------
GuiClose:
ExitApp
;--------------
MeineListView:
if (A_GuiEvent = "DoubleClick")
{
LV_GetText(Reihentext, A_EventInfo)   ;- Ermittelt den Text aus dem ersten Feld der Reihe.
ToolTip Sie haben die Reihe %A_EventInfo% doppelt angeklickt. Text: "%Reihentext%"
}
return
;--------------
GuiContextMenu:
if (A_GuiControl <> "vMeineListView") 
    return
Menu, MeinKontextmenue, Show, %A_GuiX%, %A_GuiY%
return
;--------------
Oeffnen:
SpalteEins := AusWahlFelderHolen(1)
MsgBox, % SpalteEins
Return
;--------------
Schliessen:
SpalteZwei := AusWahlFelderHolen(2)
MsgBox, % SpalteZwei
Return

;----- FUNCTION ---------
AusWahlFelderHolen(Spalte)
{
KomplettAuswahl := "" 
rnx:=""
Anfang := 0
GuiControl, -Redraw, vMeineListView
Loop
   {
   Anfang := LV_GetNext(Anfang) 
   if not Anfang 
     break
   Rnx = %anfang%|%rnx%
   LV_GetText(AusgewaehlteSpalte, Anfang, Spalte)
   KomplettAuswahl .= AusgewaehlteSpalte "`n"
  }
Loop, parse,rnx, `|
 LV_Delete(A_LoopField)
GuiControl, +Redraw, vMeineListView
Return % KomplettAuswahl
}
;==========================

Re: ListView: nur ein Teil der ausgewählten Zeilen wird übernommen

Posted: 02 Aug 2020, 07:49
by just me
Hi @garry,

yepp, das klappt auch.

Re: ListView: nur ein Teil der ausgewählten Zeilen wird übernommen

Posted: 02 Aug 2020, 07:52
by KHA
@just me Danke, funktioniert wie immer tadellos.

@garry Auf deine Idee bin ich gestern auch gekommen, bei mir hat es nicht funktioniert.

Der Unterschied ist, ich benutze LoescheZeilen .= Anfang "`n" um meine Variable zu bilden, du dagegen Rnx = %anfang%|%rnx%, bei dir funktioniert es und bei mir nicht. Nahm immer an, dass es das gleiche ist.


Code: Select all

AusWahlFelderHolen(Spalte)
{
GuiControl, -Redraw, vMeineListView


   Anfang := 0
   	Loop
	   {
    	    Anfang := LV_GetNext(Anfang) 
	        if not Anfang 
	        break
   	    LV_GetText(AusgewaehlteSpalte, Anfang, Spalte)
	    KomplettAuswahl .= AusgewaehlteSpalte "`n"
	    LoescheZeilen .= Anfang "`n" 
   	}

   Loop, parse, LoescheZeilen, `n, `r 
   LV_Delete(A_LoopField)

GuiControl, +Redraw, vMeineListView

  Return % KomplettAuswahl
}

Re: ListView: nur ein Teil der ausgewählten Zeilen wird übernommen

Posted: 02 Aug 2020, 10:08
by garry
@just me vielen Dank für die Funktion mit guter Erklärung
@KHA es funktioniert wenn man Loeschezeilen rückwärts sortiert

Code: Select all

AusWahlFelderHolen(Spalte)
{
KomplettAuswahl:=""
LoescheZeilen:=""
GuiControl, -Redraw, vMeineListView
Anfang := 0
Loop
   {
   Anfang := LV_GetNext(Anfang) 
   if not Anfang 
      break
   LV_GetText(AusgewaehlteSpalte, Anfang, Spalte)
   KomplettAuswahl .= AusgewaehlteSpalte "`n"
   LoescheZeilen .= Anfang "`n" 
   }
sort,Loeschezeilen,RN
Loop, parse, LoescheZeilen, `n,
   LV_Delete(A_LoopField)
GuiControl, +Redraw, vMeineListView
Return % KomplettAuswahl
}

Re: ListView: nur ein Teil der ausgewählten Zeilen wird übernommen

Posted: 02 Aug 2020, 14:23
by KHA
Danke @garry
Merke ich mir für die Zukunft, wenn vorwärts nichts funktioniert, dann versuch es rückwärts :)

Re: ListView: nur ein Teil der ausgewählten Zeilen wird übernommen

Posted: 02 Aug 2020, 14:32
by garry
... oder links / rechts ... :)