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

Post a reply


In an effort to prevent automatic submissions, we require that you complete the following challenge.
Smilies
:D :) ;) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :!: :?: :idea: :| :mrgreen: :geek: :ugeek: :arrow: :angel: :clap: :crazy: :eh: :lolno: :problem: :shh: :shifty: :sick: :silent: :think: :thumbup: :thumbdown: :salute: :wave: :wtf: :yawn: :facepalm: :bravo: :dance: :beard: :morebeard: :xmas: :HeHe: :trollface: :cookie: :rainbow: :monkeysee: :monkeysay: :happybday: :headwall: :offtopic: :superhappy: :terms: :beer:
View more smilies

BBCode is ON
[img] is OFF
[flash] is OFF
[url] is ON
Smilies are ON

Topic review
   

Expand view Topic review: ListView: nur ein Teil der ausgewählten Zeilen wird übernommen

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

by garry » 02 Aug 2020, 14:32

... oder links / rechts ... :)

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

by KHA » 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 :)

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

by garry » 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
}

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

by KHA » 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
}

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

by just me » 02 Aug 2020, 07:49

Hi @garry,

yepp, das klappt auch.

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

by garry » 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
}
;==========================

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

by just me » 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?

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

by KHA » 01 Aug 2020, 12:00

@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

by garry » 01 Aug 2020, 11:14

Code: Select all

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

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

by KHA » 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 3917 times

Top