Icons, Bilder Größe in Listview Topic is solved

Stelle Fragen zur Programmierung mit Autohotkey

Moderator: jNizM

Ahk_fan
Posts: 237
Joined: 31 Aug 2018, 14:34
Contact:

Icons, Bilder Größe in Listview

09 Dec 2018, 05:45

Hallo zusammen,

evtl hat jemand einen Tip oder eine Idee? Ich will in einer ListView die Symbole darstellen lassen mit einer nicht Standardbreite. die Bilder werden ja immer auf Systemgröße 16x16 oder 32x32 skaliert. ich habe aber 32x96 weil da mehrere Infos rein sollen. BEsser wäre noch 3 Spalten mit Symbolen zu erstellen, aber das bekomme ich auch nicht hin. Sowas wie LV_Add("Icon" 2 . "Icon " 1,"", ProgNr11,NeuerEintrag , "Messergebnis " A_Index) wäre praktisch.
Im Form habe ich leider nichts passendes gefunden, auser dass man über LV_Ex evtl die Spalten farblich gestalten könnte.
Wäre für Hilfe sehr dankbar.

hier ein Beispielcode:

Code: Select all

#NoEnv  ; Recommended for performance and compatibility with future AutoHotkey releases.
; #Warn  ; Enable warnings to assist with detecting common errors.
SendMode Input  ; Recommended for new scripts due to its superior speed and reliability.
SetWorkingDir %A_ScriptDir%  ; Ensures a consistent starting directory.

Gui, ListeView:new
gui, ListeView:Font, s14, Arial
Gui, ListeView:Add, ListView, w800 +0x4000 r20 vLV_Sample HWNDListTypeN Hdr AltSubmit Grid Section, Status|ProgNr11|NeuerEintrag|Messergebnis

ImageListID := IL_Create(8)  
LV_SetImageList(ImageListID)
IL_Add(ImageListID, A_WorkingDir "\011_neu_iO.png", 0xFFFFFF, 0) 		;1
IL_Add(ImageListID, A_WorkingDir "\012_neu_niO.png", 0xFFFFFF, 0)		;2
IL_Add(ImageListID, A_WorkingDir "\031_neu_PDF_iO.png", 0xFFFFFF, 0)	;3
IL_Add(ImageListID, A_WorkingDir "\032_neu_PDF_niO.png", 0xFFFFFF, 0)	;4
IL_Add(ImageListID, A_WorkingDir "\041_nix_PDF_iO.png", 0xFFFFFF, 0)	;5
IL_Add(ImageListID, A_WorkingDir "\042_nix_PDF_niO.png", 0xFFFFFF, 0)	;6
IL_Add(ImageListID, A_WorkingDir "\051_nix_iO.png", 0xFFFFFF, 0)		;7
IL_Add(ImageListID, A_WorkingDir "\052_nix_niO.png", 0xFFFFFF, 0)		;8
loop, 10
{
Random, NeuerEintrag , 0, 1
Random, ProgNr11_rnd , 0, 1
Random, PDF , 0, 1
if ProgNr11_rnd = 0
	ProgNr11 = n
if ProgNr11_rnd = 1
	ProgNr11 = y
	
				If NeuerEintrag = 1
				{
					If ProgNr11 = y			;i.O
					{
						If PDF = 1
						{
							LV_Add("Icon" 3,"", ProgNr11,NeuerEintrag , "Messergebnis " A_Index)
						}
						else
						{
							LV_Add("Icon" 1,"", ProgNr11,NeuerEintrag , "Messergebnis " A_Index)
						}
					}
					else			; nicht i.O
					{
						If PDF = 1
						{
							LV_Add("Icon" 4,"", ProgNr11,NeuerEintrag , "Messergebnis " A_Index)
						}
						else
						{
							LV_Add("Icon" 2,"", ProgNr11,NeuerEintrag , "Messergebnis " A_Index)
						}
					}
				}
				
				If NeuerEintrag = 0
				{
					If ProgNr11 = y			;i.O
					{
						If PDF = 1
						{
							LV_Add("Icon" 5,"", ProgNr11,NeuerEintrag , "Messergebnis " A_Index)
						}
						else
						{
							LV_Add("Icon" 7,"", ProgNr11,NeuerEintrag , "Messergebnis " A_Index)
						}
					}
					else			; nicht i.O
					{
						If PDF = 1
						{
							LV_Add("Icon" 6,"", ProgNr11,NeuerEintrag , "Messergebnis " A_Index)
						}
						else
						{
							LV_Add("Icon" 8,"", ProgNr11,NeuerEintrag , "Messergebnis " A_Index)
						}
					}
				}

}
LV_ModifyCol( 1, 80) 
LV_ModifyCol( 2 ) 
LV_ModifyCol( 3 ) 
 
gui, ListeView:Font, s12, Arial
Gui, ListeView:add, button, xs w300 h20 gAbbrechenListe, Zurück
Gui, ListeView:add, button, xs w300 h20 gNeuLaden, reload
Gui, ListeView:show, , Liste Eingaben
return

ListeViewGuiClose:
AbbrechenListe:
Gui, ListeView:Destroy
return

NeuLaden:
reload
und die Bilder
pix.zip
(6.82 KiB) Downloaded 209 times
regards,
AHK_fan :)
https://hr-anwendungen.de
garry
Posts: 3720
Joined: 22 Dec 2013, 12:50

Re: Icons, Bilder Größe in Listview  Topic is solved

09 Dec 2018, 08:48

ein Test script mit Lösung von 'just me'
( lege ICOns "032_neu_PDF_niO.png" und "042_nix_PDF_niO.png" in subfolder ICO )

Code: Select all

;- Listview added ICO with defined size 
;- LV_ICO_TEST > put the ico "032_neu_PDF_niO.png" in subfolder ICO
;                            "042_nix_PDF_niO.png"
;-----------------------------------------------------------------------------------------------------------
;- https://autohotkey.com/boards/viewtopic.php?f=6&t=1256   just me LV_EX LIB
;- https://autohotkey.com/boards/viewtopic.php?f=6&t=1273
;- https://github.com/AHK-just-me/IL_EX                             IL_EX LIB
;- https://autohotkey.com/boards/viewtopic.php?f=9&t=59791  german question for bigger ICOn's 
;- https://autohotkey.com/boards/download/file.php?id=6127  donload ICO for test
;--------------------------------------------------------

#warn
#noenv
#SingleInstance force
setworkingdir, %a_scriptdir%
Gui,2:default
Gui,2: -DPIScale
Gui,2:Font,CDefault s14   , Lucida Console
transform,s,chr,10

;----------------- TEST -------------------------
R3ICO=%A_scriptDir%\ICO                      ;- put your icons here
ifnotexist,%R3ICO%
FileCreateDir,%R3ICO%
png1:=r3ico . "\032_neu_PDF_niO.png"         ;- for test
png2:=r3ico . "\042_nix_PDF_niO.png"

fx=%a_scriptdir%\test55.txt
ifnotexist,%fx%
  fileappend,Line1`r`n,%fx%
fn=%a_scriptdir%\test56.csv
ifnotexist,%fn%
  fileappend,Line1`r`n,%fn%

F12=%A_ScriptDir%\test.csv             ;example
;filedelete,%f12%
ifnotexist,%F12%
  {
  fileappend,CALC;C:\windows\system32\calc.exe;`r`n,%f12%
  fileappend,TEST;test55.txt;`r`n,%f12%
  fileappend,TEST;test56.csv;`r`n,%f12%
  }
;-----------------------------------------------

T1=300
T2=630
T3=0
T1K:=T1
T2K:=T1+T2+50
T2A:=T1+T2+70
      Gui,2:Add, ListView,  backgroundSilver grid x3 y10   h240 w%t2k% +hscroll altsubmit vMLV1 gMLV2, AA|BB|CC
      ILid := IL_Create(1,1,0)                 ;- small
      ;ILid := IL_Create(1,1,1)                ;- bigger
	  IL_EX_SetSize(ILID, 100, 45)             ;- set ICO size  <<<<<<<<<<<<<<
      LV_SetImageList(ILid,1)

LV_Delete()
LV_ModifyCol(1,T1)
LV_ModifyCol(2,T2)
LV_ModifyCol(3,T3)
pict05:=""

loop,read,%F12%
  {
  c1=
  c2=
  c3=
  stringsplit,c,A_LoopReadLine,`;,
  SplitPath,c2,,,ext2,,
  IconNumber := IL_Add(ILid, "%pict05%" )  ;- picture which not exist
  ;IL_Add(ImageListID, Filename [, IconNumber, ResizeNonIcon])
  EXEX1=txt
  if EXT2 in %EXEX1%
 	  IconNumber := IL_Add(ILid,png1)       ;- 
  EXEX1b=csv
  if EXT2 in %EXEX1b%
	  IconNumber := IL_Add(ILid,png2 )
  EXEX2=exe,dll,cpl,msc,chm
  if EXT2 in %EXEX2%
      IconNumber := IL_Add(ILid,c2 )        ;- original ico from exe file
  LV_Add("icon" . iconnumber ,c1,c2,c3)
  }

Gui,2: Show, x0 y50 w%t2a% h270, TEST ICONS
return
2Guiclose:
exitapp

;------------------------------
MLV2:
GuiControlGet,MLV1
      LV_GetText(C2,A_EventInfo,2)
	  if A_GuiEvent=normal
      run,%C2%
      return
;-------------------------------   
;----------- functiom from user 'just me' --------
;- https://github.com/AHK-just-me/IL_EX                             IL_EX LIB
; IL_EX_SetSize(ILID, W, H)
; Function:       Sets the dimensions of images in an image list and removes all images from the list.
; Parameters:     W        -  The width, in pixels, of all images in the image list.
;                 H        -  The height, in pixels, of all images in the image list.
; Return values:  Returns nonzero if successful, or zero otherwise.
; MSDN:           http://msdn.microsoft.com/en-us/library/bb775224(VS.85).aspx
; Remarks:        All images in an image list have the same dimensions.
; ======================================================================================================================
IL_EX_SetSize(ILID, W, H) {
   Return DllCall("ComCtl32.dll\ImageList_SetIconSize", "Ptr", ILID, "Int", W, "Int", H, "Int")
}
;========================================================================

Last edited by garry on 10 Dec 2018, 15:11, edited 1 time in total.
just me
Posts: 9406
Joined: 02 Oct 2013, 08:51
Location: Germany

Re: Icons, Bilder Größe in Listview

09 Dec 2018, 22:20

Moin,

wenn Du diese Version von LV_EX meinst, sollte Dir im obersten Bild die Icons in der Spalte Icon auffallen. LV_EX hat dafür die Funktion LV_EX_SetSubItemImage().

Alternativ kannst Du die Größe der Bilder in einer ImageList mit der Funktion IL_EX_SetSize(ILID, W, H) (von hier) festlegen. Die Funktion muss aufgerufen werden, bevor die Bilder per IL_Add() hinzugefügt werden. Außerdem musst Du wahrscheinlich bei LV_SetImageList() den zweiten Parameter versorgen.
garry
Posts: 3720
Joined: 22 Dec 2013, 12:50

Re: Icons, Bilder Größe in Listview

10 Dec 2018, 15:13

@just me , habe script oben angepasst mit "IL_EX_SetSize(ILID, W, H)" , wäre dies OK ?
Ahk_fan
Posts: 237
Joined: 31 Aug 2018, 14:34
Contact:

Re: Icons, Bilder Größe in Listview

11 Dec 2018, 14:50

Hallo zusammen,

Danke für die Tips! Haben mich auf eine gute Lösung gebracht mit LV_EX.ahk, eigentlich genauso wie ich es mir anfangs vorgestellt hatte. Im Anhang ist ein Beispiel Script. Trotz aller VErsuche konnte ich es nicht mit JPG,PNG oder BMP Bilddateien richtig zum Laufen bringen. Die Bilder wurden nicht korrekt skaliert oder abgeschnitten. Mit ICO hat es dann funktioniert.
Ein Kuriosität gibt es trotzdem:
Wenn ich eine Loop, parse, InhaltDateiCSV, `n,`r laufen lasse und mit

Code: Select all

If A_loopfield =
	Continue     
oder

Code: Select all

If A_Index = 1
	continue   ; 1 Zeile ueberspringen
programmiere, werden die ICOs nicht mehr angezeigt.
wenn ich Break programmiere geht es, aber so werden leere Einträge nicht übersprungen

Anhang:
test.zip
(10.97 KiB) Downloaded 91 times
Screenshot:
test.jpg
test.jpg (33.63 KiB) Viewed 3124 times
Grüße und Danke nochmal
regards,
AHK_fan :)
https://hr-anwendungen.de
just me
Posts: 9406
Joined: 02 Oct 2013, 08:51
Location: Germany

Re: Icons, Bilder Größe in Listview

12 Dec 2018, 05:08

Moin,
Ein Kuriosität gibt es trotzdem:
Wenn ich eine Loop, parse, InhaltDateiCSV, `n,`r laufen lasse und mit ...
Es wäre gut, wenn wir das zusammen mit dem übrigen Code sehen könnten.

P.S.: DIe von Dir ganz oben eingestellten Bilddateien haben nicht das Format 96*32!
Ahk_fan
Posts: 237
Joined: 31 Aug 2018, 14:34
Contact:

Re: Icons, Bilder Größe in Listview

12 Dec 2018, 16:38

Hi,

zur Bildergröße: Ich habe die Bilder wieder 3-teilig gemacht, d.h. 32x32 und auf 3 Spalten aufgeteilt, so war es anfangs auch gedacht, nur wusste ich nicht wie man die Bilder auf 3 Spalten verteilt, deswegen habe ich die zu einem Bild in verschiedenen Kombinationen zusammengepackt.
So wie es jetzt ist ist es optimal

zu dem Fehler (oder was es auch immer ist): ich habe es in einem Beispielscript zusammen gepackt:
  • Auswahl 1: Zufallszahlen--> aus Zufahlszuständen in den Spalten 1-3 die entsprechende Zustande generieren und die passenen ICO dazu zeigen --> geht (sub Liste1)
  • Auswahl 2a: aus CSV+A_Index_A_loopfield überspringen+V1 die angehängte CSV wird eingelesen, Spalten getrennt/interpretiert und entsprechend Parameterzustände aus CSV abgefragt, Zeile 1 aus CSV und leere Zeilen sollen überprungen werden --> ICOs werden nicht angezeigt, Liste wird aber korrekt mit Inhalten aus CSV befüllt --> sub Liste2
  • Auswahl 2b: aus CSV+A_Index_A_loopfield überspringen+V2 wie 2a, nur abfrage der Inhalte der Zellen und zuweisung neuer Variablen --> ICOs werden nicht angezeigt, Liste wird aber korrekt mit Inhalten aus CSV befüllt --> sub Liste2
  • Auswahl 2c: aus CSV+V2die angehängte CSV wird eingelesen, Spalten getrennt/interpretiert und entsprechend Parameterzustände aus CSV abgefragt, kein Überspringen von leeren Zeilen und kein Weglassen der Zeile 1 aus CSV, Abfrage der Inhalte der Zellen und zuweisung neuer Variablen --> ICOs werden korrekt angezeigt, Liste wird korrekt mit Inhalten aus CSV befüllt --> sub Liste2
test2.zip
(11.87 KiB) Downloaded 90 times
regards,
AHK_fan :)
https://hr-anwendungen.de
just me
Posts: 9406
Joined: 02 Oct 2013, 08:51
Location: Germany

Re: Icons, Bilder Größe in Listview

12 Dec 2018, 22:33

Moin,

dafür gibt es eine einfache Erklärung:

Für die Anzeige der Icons in den Spalten 1 bis 3 nutzt Du Funktionsaufrufe wie

Code: Select all

LV_EX_SetSubitemImage(HLV, A_Index, 1, 2)
Spannend ist hier der zweite Parameter, der die Zeilennummer im ListView bestimmt. A_Index enthält die Nummer des aktuellen Schleifendurchlaufs und wird bei jedem Durchlauf erhöht. Wenn bei einem Durchlauf keine neue Zeile an das ListView-Control angehängt wird, stimmen A_Index und die Nummer der zuletzt angehängten Zeile nicht mehr überein. A_Index zeigt dann auf eine Zeile hinter der letzten Zeile des ListViews. Einer nicht vorhandenen Zeile können aber keine Icons zugewiesen werden.

Es gibt auch eine einfache Lösung:

Code: Select all

LV_Add("Icon0","", "", "", Spalte4, Spalte5, Spalte6)
gibt die Nummer der angehängten Zeile zurück. Die kann dann für das Zuweisen der Icons genutzt werden, z.B.

Code: Select all

			If PDF = 1
			{
				NeueZeile := LV_Add("Icon0","", "", "", Spalte4, Spalte5, Spalte6)
				LV_EX_SetSubitemImage(HLV, NeueZeile, 1, 2)
				LV_EX_SetSubitemImage(HLV, NeueZeile, 2, 4)
				LV_EX_SetSubitemImage(HLV, NeueZeile, 3, 3)
			}
			...
Ahk_fan
Posts: 237
Joined: 31 Aug 2018, 14:34
Contact:

Re: Icons, Bilder Größe in Listview

13 Dec 2018, 01:35

Guten Morgen,
wie logisch! Da sieht man echt den Baum vor lauter Wäldern nicht mehr :lol:
Danke!
Warum das mit der
PS: wieso schläft man um die Zeit (4:33) nicht mehr ? :shock:
Gruß
regards,
AHK_fan :)
https://hr-anwendungen.de
just me
Posts: 9406
Joined: 02 Oct 2013, 08:51
Location: Germany

Re: Icons, Bilder Größe in Listview

13 Dec 2018, 03:02

Ahk_fan wrote: PS: wieso schläft man um die Zeit (4:33) nicht mehr ? :shock:
Ich zähle seit einiger Zeit zum wachsenden Kreis der Menschen mit Schlafproblemen. Da habe ich nachts immer mal wieder ein paar Schlaflücken zu füllen, wenn ich es im Bett nicht mehr aushalte.

Return to “Ich brauche Hilfe”

Who is online

Users browsing this forum: No registered users and 22 guests