Variabel deklarieren. Aber der Chinese geht Reis kochen!
09.02.2025 13:16:36
Chatzebuseli
Ich bin da nochmel an die Thematik Listbox einträge einfärben gegangen.
Nun ja die Chinesen haben da ja jetz auch ne KI.
Hab zu der Thematik mit der mal einwenig rummgespielt. Und doch einige interessante SUb's generiert.
Aber ja irgendwann muss die scheibar dann doch Reis kochen gehen....
Darum würde mich hier mal eure meinung dazu Interessiern:
'Das Zeug soll laut dem Computerchinesen unter Option Explicit
' API-Deklarationen für benutzerdefiniertes Zeichnen
Private Declare PtrSafe Function SetTextColor Lib "gdi32" (ByVal hDC As Long, ByVal crColor As Long) As Long
Private Declare PtrSafe Function SetBkColor Lib "gdi32" (ByVal hDC As Long, ByVal crColor As Long) As Long
Private Declare PtrSafe Function TextOut Lib "gdi32" Alias "TextOutA" (ByVal hDC As Long, ByVal x As Long, ByVal y As Long, ByVal lpString As String, ByVal nCount As Long) As Long
Private Declare PtrSafe Function CreateSolidBrush Lib "gdi32" (ByVal crColor As Long) As Long
Private Declare PtrSafe Function FillRect Lib "user32" (ByVal hDC As Long, lpRect As RECT, ByVal hBrush As Long) As Long
Private Declare PtrSafe Function DeleteObject Lib "gdi32" (ByVal hObject As Long) As Long
' RECT-Struktur für das Zeichnen
Private Type RECT
Left As Long
Top As Long
Right As Long
Bottom As Long
End Type
'Und da macht er in der Userform ne eigene Sub was mir einleuchtet.
' DrawItem-Ereignis für die ListBox
Private Sub ListBox1_DrawItem(ByVal Index As Long, ByVal hDC As Long, ByRef Rect As RECT, ByVal State As Long)
Dim TextColor As Long
Dim BackColor As Long
Dim CellValue As Double
Dim i As Integer
Dim strText As String
Dim cellRect As RECT
' Wert in Spalte 5 (Index 4) überprüfen
CellValue = CDbl(ListBox1.List(Index, 4))
' Farben basierend auf dem Wert festlegen
If CellValue 0 Then
TextColor = vbRed ' Rot für negative Werte
BackColor = vbWhite ' Weißer Hintergrund
Else
TextColor = vbGreen ' Grün für positive Werte
BackColor = vbWhite ' Weißer Hintergrund
End If
' Hintergrund zeichnen
Dim hBrush As Long
hBrush = CreateSolidBrush(BackColor)
FillRect hDC, Rect, hBrush
DeleteObject hBrush
' Textfarbe setzen
SetTextColor hDC, TextColor
SetBkColor hDC, BackColor
' Text für jede Spalte zeichnen
For i = 0 To ListBox1.ColumnCount - 1
strText = ListBox1.List(Index, i)
cellRect = Rect
cellRect.Left = cellRect.Left + (i * 100) ' Spaltenbreite anpassen
TextOut hDC, cellRect.Left + 5, cellRect.Top + 2, strText, Len(strText)
Next i
End Sub
Dann will er in in Userform Initialized folgendes:
Private Sub UserForm_Initialize()
ListBox1.Style = fmStyleOwnerDrawFixed
End Sub
Wenn ich das starte kommt bei (fmStyleOwnerDrawFixed) die Meldung Variabel nicht definiert.
Wenn ich nun den Chinesen im PC suche ist der am Reis kochen. Aber wir werden doch wohl so ne dämliche Variabel definieren können. Aber wo als was?
Hat da jemand ne Idee.
Klar ist wenn ihr Reis kochen geht wird es wohl nicht funktionieren. Aber wenn wir es gemeinsam hinkriegen könnte es eine interessantes Gedget werden!
E liebs Griessli
Chatzebuseli
Anzeige