Wie zeigt man in VB.NET 2003 in einer ListView die Icons versteckter Dateien halbtransparent an?

Antwort

Um in VB.NET 2003 in einer `ListView` die Icons versteckter Dateien halbtransparent (wie im Windows Explorer) darzustellen, sind mehrere Schritte nötig, da die Standard-ListView-Steuerung dies nicht direkt unterstützt. Die halbtransparente Darstellung (Alpha-Blending) muss manuell umgesetzt werden. **Vorgehensweise:** 1. **Dateiattribute prüfen:** Überprüfe, ob eine Datei das Attribut "Hidden" (`FileAttributes.Hidden`) besitzt. 2. **Icon extrahieren:** Hole das Standard-Icon der Datei (z.B. mit `SHGetFileInfo` aus der Windows-API). 3. **Icon halbtransparent machen:** Wandle das Icon in ein Bitmap um und setze die Transparenz (Alpha-Wert) auf z.B. 128 (halbtransparent). 4. **ImageList befüllen:** Füge das (ggf. modifizierte) Icon in die ImageList ein, die der ListView zugewiesen ist. **Beispielcode (stark vereinfacht):** ```vb.net Imports System.IO Imports System.Drawing Imports System.Drawing.Imaging Imports System.Runtime.InteropServices ' API für Icon holen <DllImport("shell32.dll")> _ Private Shared Function SHGetFileInfo( _ ByVal pszPath As String, _ ByVal dwFileAttributes As Integer, _ ByRef psfi As SHFILEINFO, _ ByVal cbFileInfo As Integer, _ ByVal uFlags As Integer) As IntPtr End Function Private Const SHGFI_ICON = &H100 Private Const SHGFI_SMALLICON = &H1 <StructLayout(LayoutKind.Sequential)> _ Private Structure SHFILEINFO Public hIcon As IntPtr Public iIcon As Integer Public dwAttributes As Integer <MarshalAs(UnmanagedType.ByValTStr, SizeConst:=260)> Public szDisplayName As String <MarshalAs(UnmanagedType.ByValTStr, SizeConst:=80)> Public szTypeName As String End Structure ' Icon extrahieren Private Function GetFileIcon(ByVal filePath As String) As Icon Dim shinfo As New SHFILEINFO() SHGetFileInfo(filePath, 0, shinfo, Marshal.SizeOf(shinfo), SHGFI_ICON Or SHGFI_SMALLICON) Return Icon.FromHandle(shinfo.hIcon) End Function ' Icon halbtransparent machen Private Function MakeIconSemiTransparent(ByVal icon As Icon) As Bitmap Dim bmp As New Bitmap(icon.Width, icon.Height) Using g As Graphics = Graphics.FromImage(bmp) g.DrawIcon(icon, 0, 0) End Using Dim rect As New Rectangle(0, 0, bmp.Width, bmp.Height) Dim data As BitmapData = bmp.LockBits(rect, ImageLockMode.ReadWrite, bmp.PixelFormat) Dim bytesPerPixel As Integer = Image.GetPixelFormatSize(bmp.PixelFormat) \ 8 Dim ptr As IntPtr = data.Scan0 Dim numBytes As Integer = Math.Abs(data.Stride) * bmp.Height Dim rgbValues(numBytes - 1) As Byte Marshal.Copy(ptr, rgbValues, 0, numBytes) For i As Integer = 0 To rgbValues.Length - 1 Step bytesPerPixel If bytesPerPixel >= 4 Then rgbValues(i + 3) = CByte(rgbValues(i + 3) \ 2) ' Alpha halbieren End If Next Marshal.Copy(rgbValues, 0, ptr, numBytes) bmp.UnlockBits(data) Return bmp End Function ' Anwendung auf ListView Private Sub AddFileToListView(ByVal filePath As String, ByVal lv As ListView, ByVal imgList As ImageList) Dim fi As New FileInfo(filePath) Dim icon As Icon = GetFileIcon(filePath) Dim bmp As Bitmap If (fi.Attributes And FileAttributes.Hidden) = FileAttributes.Hidden Then bmp = MakeIconSemiTransparent(icon) Else bmp = icon.ToBitmap() End If imgList.Images.Add(filePath, bmp) Dim lvi As New ListViewItem(fi.Name) lvi.ImageKey = filePath lv.Items.Add(lvi) End Sub ``` **Hinweise:** - Die halbtransparente Darstellung funktioniert nur, wenn die ImageList auf `ColorDepth` 32 Bit steht. - Die Windows-ListView unterstützt keine echte Alpha-Transparenz unter Windows XP/2003, aber mit Bitmaps mit Alpha-Kanal kann man einen ähnlichen Effekt erzielen. - Für viele Dateien kann das Extrahieren und Bearbeiten der Icons langsam

Frage stellen und sofort Antwort erhalten

Verwandte Fragen

Wie sortiert man in VB.NET 2003 Datums- oder Größendaten in einem ListView?

Um in VB.NET 2003 die Einträge eines `ListView` nach Datum oder Größe zu sortieren, musst du einen benutzerdefinierten Sortierer implementieren, da die Standard-Sortierung nur nach Tex... [mehr]

Wie nutze ich UseItemStyleForSubItems in VB.NET 2003?

Die Eigenschaft `UseItemStyleForSubItems` ist Teil des `ListViewItem`-Objekts in Windows Forms (WinForms) in VB.NET. Sie steuert, ob die Unterelemente (SubItems) eines ListView-Elements (`ListViewItem... [mehr]

Wie ändere ich in VB.NET 2003 die ForeColor von ListView-SubItems?

In VB.NET 2003 (also .NET Framework 1.1) ist es leider nicht direkt möglich, die `ForeColor` (Textfarbe) einzelner SubItems in einem `ListView`-Steuerelement zu ändern. Die Standard-ListView... [mehr]

Gibt es eine Möglichkeit, in VB.NET 2003 die Farbe der SelectedItems eines ListViews zu beeinflussen?

In VB.NET 2003 (also .NET Framework 1.1) gibt es leider keine direkte Möglichkeit, die Farbe der ausgewählten Elemente (`SelectedItems`) eines `ListView`-Steuerelements im Detail- oder Repor... [mehr]

Kann man mit VB.NET 2003 effizient Vorschaubilder für die Miniaturansicht eines ListView erstellen?

Ja, mit VB.NET 2003 kannst du Vorschaubilder (Thumbnails) für die Miniaturansicht eines ListView zeitsparend erstellen. Dazu nutzt du die Klassen aus dem Namespace `System.Drawing`. Hier ein grun... [mehr]

Wie füge ich in VB.NET 2003 einen ListViewItem-Clone in ein existierendes ListViewItem einer zweiten ListView ein?

Um in VB.NET 2003 ein **ListViewItem** von einer ListView in eine andere zu kop, kannst du die `Clone()`Methode verwenden. Dabei wird ein, identisches ListViewItem erzeug, das du dann der zweiten List... [mehr]

Wie kehrt man in VB.NET 2003 die Reihenfolge der Zeilen eines ListView um?

Um in VB.NET 2003 die Reihenfolge der Zeilen (Items) eines ListView-Steuerelements umzukehren, kannst du die Items in eine Liste kopieren, diese umkehren und dann das ListView neu befüllen. Hier... [mehr]

Wie kopiert man in VB.NET 2003 eine oder mehrere ListView-Zeilen per Clipboard?

Um in VB.NET 2003 eine oder mehrere Zeilen (Items) aus einer `ListView` in die Zwischenablage (Clipboard) zu kopieren, gehst du wie folgt vor: 1. **Ausgewählte Zeilen ermitteln:** Über... [mehr]

Wie kann ein in eine PictureBox geladenes Icon mit VB.NET 2003 wieder als Icon gespeichert werden?

Um ein in eine `PictureBox` geladene Icon-Datei in VB.NET 2003 wieder als `.ico`-Datei zu speichern, musst du beachten, dass die `PictureBox.Image`-Eigenschaft ein `Image`-Objekt ist. Das direkte Spei... [mehr]

Wie lädt man in VB.NET 2003 ein Icon in eine PictureBox?

In VB.NET 2003 kannst du ein Icon in eine PictureBox laden, indem du das Icon zuerst in ein Bitmap-Objekt umwandelst, da die PictureBox kein Icon-Objekt direkt anzeigen kann. Hier ein Beispiel: ```vb... [mehr]