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

Stelle Fragen zur Programmierung mit Autohotkey

Moderator: jNizM

KHA
Posts: 226
Joined: 21 Aug 2018, 11:11

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

01 Aug 2020, 10:02

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 3842 times
garry
Posts: 2338
Joined: 22 Dec 2013, 12:50

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

01 Aug 2020, 11:14

Code: Select all

;LV_Delete(Anfang)
diesen Befehl weglassen, denn scheint's OK
KHA
Posts: 226
Joined: 21 Aug 2018, 11:11

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

01 Aug 2020, 12:00

@garry stimmt, vielen Dank!
Idee, wie ich danach die Zeilen Löschen/Ausblenden, kann?
just me
Posts: 7157
Joined: 02 Oct 2013, 08:51
Location: Germany

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

02 Aug 2020, 05:07

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?
garry
Posts: 2338
Joined: 22 Dec 2013, 12:50

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

02 Aug 2020, 06:43

@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
}
;==========================
just me
Posts: 7157
Joined: 02 Oct 2013, 08:51
Location: Germany

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

02 Aug 2020, 07:49

Hi @garry,

yepp, das klappt auch.
KHA
Posts: 226
Joined: 21 Aug 2018, 11:11

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

02 Aug 2020, 07:52

@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
}
garry
Posts: 2338
Joined: 22 Dec 2013, 12:50

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

02 Aug 2020, 10:08

@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
}
KHA
Posts: 226
Joined: 21 Aug 2018, 11:11

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

02 Aug 2020, 14:23

Danke @garry
Merke ich mir für die Zukunft, wenn vorwärts nichts funktioniert, dann versuch es rückwärts :)

Return to “Ich brauche Hilfe”

Who is online

Users browsing this forum: No registered users and 5 guests