---
title: "Listview + bakgrundsbild + ikon?"
type: "forum-thread"
url: "https://www.webforum.nu/amne/dotnet/80229-listview-bakgrundsbild-ikon"
topic: ".NET"
topic_url: "https://www.webforum.nu/amne/dotnet"
author: "krupp"
published: "2003-06-21T14:02:22.000Z"
updated: "2003-06-24T00:13:23.000Z"
replies: 8
views: 385
page: 1
pages: 1
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/dotnet/80229-listview-bakgrundsbild-ikon"
---

# Listview + bakgrundsbild + ikon?

## #1 — krupp, 2003-06-21T14:02Z

VB5. Common controls 5.
Jag har en listview. Har satt en bakgrundsbild. Och första kolumnen kan ha en ikon. Bakgrundsbilden fungerar, men bara om det inte finns någon ikon i någon rad. Om det finns en ikon så blir hela den kolumnen utan bakgrundsbild, vilket ser ganska dumt ut.

Finns det något sätt att kringå detta? Jag har ett indexnummer i första kolumnen också, så det är inte bara ikonen. Så kolumnen kan bli ganska bred och ful när den är helt vit medan alla andra kolumner får bakgrunden.

/dr Krupp

Permalänk: https://www.webforum.nu/p/80229

## #2 — niko, 2003-06-21T20:07Z

Kan inte påstå att jag känner igen problemet (VB6 + sp5). Har du en skärmdump eller nåt exempelprojekt som illustrerar hur du menar?

Permalänk: https://www.webforum.nu/p/1090412

## #3 — krupp, 2003-06-21T21:24Z

Naturligtvis är det bättre med en illustrerande bild, men jag trodde att det var ett förekommande fenomen. Nåja, det kanske fungerar bättre i VB6, men jag vågar inte byta Common controls 5 till 6 eftersom jag hört att det kan bli trubbel då.

Hur som helst, här är en skärmdump:
<http://www.drkrupp.se/_bildexempel_listview_bakgrundsbild_ikon.gif> 

/dr Krupp

Permalänk: https://www.webforum.nu/p/1090458

## #4 — niko, 2003-06-21T22:06Z

När jag försöker göra likadant i VB6 så får jag iaf inget problem med transparensen mot bakgrundsbilden (se bilaga).

Lite frågor:

1\. Är det likadant vilka ikoner och bakgrundbilder du än använder?
2\. Har du den senaste service packen för VB5?
3\. Hur har du fått fullrowselect i VB5? Är det via API:er? Och isåf: Är problemet kvar om du tar bort den?
4\. På din bild ser det ut som om du har ikonen i *andra* kolumnen. Hur har du gjort det?

Bilagor:

- [lview.jpg](https://www.webforum.nu/a/1638.jpg)

Permalänk: https://www.webforum.nu/p/1090470

## #5 — krupp, 2003-06-21T22:28Z

1\. Ja, det är samma sak oavsett ikoner och bakgrundsbild.
2\. Jag tror jag har den senaste service packen. men jag vet inte, jag har ingen aning om vare sig vilken jag har och vilken som finns.
3\. Ja, jag har fullrowselect. Ja, det är via API. Märkligt nog fungerar det om jag tar bort fullrowselect.
4\. Det råkade se ut som det, eftersom jag flyttat en annan kolumn till en plats före första kolumnen. Jag kan bara ha ikoner i kolumn#1, men jag behöver inte ha kolumn#1 på plats #1, om man säger så.

Vidare:
Jag har nog fullständigt tappat vettet eftersom jag inte blir klok på detta för fem öre. Jag kom på att jag ju har flera Listviews i programmet, och att de har samma API-grejer... och för dessa fungerar minsann bakgrundsbiden som den ska (och fullrowselect). Men lögn att få den viktigaste listviewn att fungera.... vb i ett nötskal känns det som. Alltid något att hänga upp sig på. Och när jag försöker flytta om en massa kod så får jag plötsligt obegripligt märkliga fel... som att programmet läser in inställningsfiler helt fel och annan knas, trots att jag inte varit i närheten av den koden. Verkar som att VB buggar ur när det börjar bli hett om öronen.

73\.000 rader kod, och så lyckas man inte komma runt en sån här struntsak,... \*suck\*

Permalänk: https://www.webforum.nu/p/1090478

## #6 — niko, 2003-06-21T22:40Z

> **krupp skrev:**
>
> Märkligt nog fungerar det om jag tar bort fullrowselect.

Bingo ..

> **krupp skrev:**
>
> Jag kom på att jag ju har flera Listviews i programmet, och att de har samma API-grejer... och för dessa fungerar minsann bakgrundsbiden som den ska (och fullrowselect).

Nu kör jag inte VB5 och kan inte testa, men jag har för mig att man åstadkommer det via *SendMessage* och kan tänka mig att det spelar roll *när* man gör det (innan eller efter man lägger till sina listitems.) Kolla på koden för de listvyer som funkar och försök göra i samma ordningsföljd. Kolla också andra inställningar för listvyerna ifall det (eventuellt) är nåt annat som skiljer.

> **krupp skrev:**
>
> vb i ett nötskal känns det som. Alltid något att hänga upp sig på.

Hmm .. Förtal av Microsoftprodukt. Allvarliga saker .. ;)

Permalänk: https://www.webforum.nu/p/1090483

## #7 — krupp, 2003-06-21T23:04Z

Alltså, tack för alla tips och så. Men här sitter man och blir alldeles röd av att inte komma någon vart alls.

\- Det verkar inte spela någon roll om jag lägger till listinnehållet före eller efter jag sätter bakgrundsbilden. Jag provade att plocka ut koden för bakgrundsfärgen för en listview som funkar, och lägga den under en knapp istället. Och det fungerar att sätta bild vare sig listan är tom eller inte.

Bifogar lite rolig kod.

Modul:
Public Const LVS_EX_GRIDLINES = &H1
Public Const LVS_EX_SUBITEMIMAGES = &H2
Public Const LVS_EX_CHECKBOXES = &H4
Public Const LVS_EX_TRACKSELECT = &H8
Public Const LVS_EX_HEADERDRAGDROP = &H10
Public Const LVS_EX_FULLROWSELECT = &H20
Public Const LVS_EX_ONECLICKACTIVATE = &H40
Public Const LVS_EX_TWOCLICKACTIVATE = &H80
Public Type LVBKIMAGE
   uFlags As Long
   hBmp As Long
   pszImage As String
   cchImageMax As Long
   xOffsetPercent As Long
   yOffsetPercent  As Long
End Type
Public Declare Function SendMessageAny Lib "user32" Alias "SendMessageA" (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long

Public Const LVM_FIRST = &H1000
Public Const LVM_SETEXTENDEDLISTVIEWSTYLE = LVM_FIRST + 54
Public Const LVM_GETEXTENDEDLISTVIEWSTYLE = LVM_FIRST + 55
Public Const LVS_FULLROWSELECT = &H20
Public Declare Function SendMessageLong Lib "user32" Alias "SendMessageA" (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long

'-------------------------------------------------------
Private Sub Form_Load()

Dim lStyle As Long
Dim tmp As Long
   'Set ListView Extended Styles
   lStyle = SendMessageLong(ListView1.hWnd, LVM_GETEXTENDEDLISTVIEWSTYLE, 0&, 0&)  'Just uncomment the styles
   If frmmain.mnufilmlista_gridlines.Checked = True Then lStyle = lStyle Or LVS_EX_GRIDLINES 'Gridlines in ListView
   'lStyle = lStyle Or LVS_EX_GRIDLINES 'Gridlines in ListView
   'lStyle = lStyle Or LVS_EX_SUBITEMIMAGES 'Dont know
   'lStyle = lStyle Or LVS_EX_CHECKBOXES 'Inserts checkbox beside eachItem
   'lStyle = lStyle Or LVS_EX_TRACKSELECT 'Selection follows the mousecursor
   lStyle = lStyle Or LVS_EX_HEADERDRAGDROP 'Columns can be moved by draging them
   lStyle = lStyle Or LVS_EX_FULLROWSELECT 'Selects the whole row instead of the column one
   'lStyle = lStyle Or LVS_EX_ONECLICKACTIVATE 'I don't know, what itsays?
   'lStyle = lStyle Or LVS_EX_TWOCLICKACTIVATE 'I don't know, what itsays?
   tmp = SendMessageLong(ListView1.hWnd, LVM_SETEXTENDEDLISTVIEWSTYLE, 0&, lStyle)

End Sub

'--------------------------------------------------------

Public Sub Form_Activate()

'sätt färg i listan
ListView1.ForeColor = frmsetupTab.lblexempel.ForeColor
ListView1.BackColor = frmsetupTab.lblexempel.BackColor
ListView1.Font.Bold = frmsetupTab.lblexempel.FontBold
ListView1.Font.Size = frmsetupTab.lblexempel.FontSize
ListView1.Font.Name = frmsetupTab.lblexempel.FontName

Dim BKIMG As LVBKIMAGE
Dim PixPathTile As String
PixPathTile = App.Path & "\\bg.gif"
  'prepare the backimage structure data
   With BKIMG
      'use the file provided in pszImage and tile
      .uFlags = LVBKIF_SOURCE_URL Or LVBKIF_STYLE_TILE
      'the imagefile to display
      .pszImage = (PixPathTile)
      'h&v offsets for the pix (only if tiled not specified)
      '.xOffsetPercent = 0
      '.yOffsetPercent = 0
   End With
  'set the text background to none (transparent) to
  'allow image to show through.  A RGB() value can
  'also be passed to colour the text background
  '(to the edge of the control)
   Call SendMessageLong(ListView1.hWnd, LVM_SETTEXTBKCOLOR, 0&, CLR_NONE)
  'set the image to the listview
   Call SendMessageAny(ListView1.hWnd, LVM_SETBKIMAGE, 0&, BKIMG)
End Sub

'----------------------------------------------------------------------

Typ så ser det ut... nånting... Ganska obegripligt. Och det har blivit så mycket api-krafs att jag inte vet riktigt vad som hör till vad... och vad det ska vara bra för.

Och hur får man tag på Visual Basic 6? Vad kostar det? Finns det att köpa i butik?
(knycklar ihop VB5 och kastar ut genom ... ozonlagret!)

Permalänk: https://www.webforum.nu/p/1090487

## #8 — krupp, 2003-06-22T01:34Z

Okej, fellas... känns som att jag ger upp nu. Har provat det mesta, med bedrövliga resultat.  :r 

Bara att deklarera det fakto att programmet inte har support för bakgrundsbild i vissa listor.  §jr 

Kul i alla fall att ett av mina (betydligt) mindre program plötsligt tittar fram ur PC för Allas tidning, med ett vackert betyg. \*smygreklam\* ... kanske är det såna här små erkännelser som håller en amatörprogramerare rakryggad...

Bild bifogad. (glöm länken de angett... jag har inte längre Passagen som "webbhotell" )

/dr Krupp

Bilagor:

- [backup_pcforalla_nr5juni2003.jpg](https://www.webforum.nu/a/1639.jpg)

Permalänk: https://www.webforum.nu/p/1090509

## #9 — krupp, 2003-06-24T00:13Z

Jag klurade ut problemet. Utan att egentligen göra, eller lösa, nånting.

\* Jag använder API för att kunna ändra kolumnordningen.
\* Om jag stängde av funktionen fungerade bakgrundsbilden.
\* Om jag satte på funktionen, men valde att ha kolumn#1 på plats#1 så blev det ju plötsligt bra.

Summa: Bakgrundsbild + ikon i listview fungerar bara om ikon-kolumnen är på sin rätta plats, dvs plats 1.

Skumt, sa räven.

Kan ni som kör VB6 kolla ifall det är samma fenomen där? (fast det spelar ju egentligen ingen roll)

Tack ändå.

Tjohej.

/dr Krupp

Permalänk: https://www.webforum.nu/p/1091602

---

Tråden på webben: https://www.webforum.nu/amne/dotnet/80229-listview-bakgrundsbild-ikon
