Seite 1 von 2

Unterlegung für ListIconGadget

Verfasst: 30.09.2008 16:33
von Andesdaf
Hallo!
Ich schreib an nem Dateicommander mit zwei Listicons. Ich will diesen Windows-Vista-Style verwenden:
Bild

Beim überfahren mit der Maus soll das Item bläulich unterlegt werden. Wenn es angeklickt wird, soll es ebenfalls blau sein.
Wenn ich beim ListIcon #PB_ListIcon_AlwaysShowSelection angegeben habe, soll das item des inaktiven Gadgets grau unterlegt sein.

Wie kann ich diesen Effekt machen?


Edit: Überschrift korrigiert (irgendwie hab ichs immer mit dem Gadget) - Andesdaf

Verfasst: 09.10.2008 18:45
von Andesdaf
Die frage ist ziemlich schwer, hoffe, da antwortet noch einer.

Verfasst: 09.10.2008 19:17
von DarkDragon
Vielleicht hilft dir das hier ja weiter:

http://www.purearea.net/pb/CodeArchiv/G ... Colored.pb

Verfasst: 10.10.2008 21:55
von hjbremer
zuerst korrigiere bitte den Schreibfehler in deiner Überschrift, findet ja sonst keiner

Und hier eine Lösung die deiner Frage recht nahe kommt. Ist zwar nicht ganz was du möchtest, dafür aber sehr simpel.

die Farben hängen vom XP-Style ab, bei mir grau und hellblau

Code: Alles auswählen


;hier einige wichtige Konstanten, die teilweise in PB nicht integriert sind
#LVM_GETHOTITEM = #LVM_FIRST + 61 
#LVM_SETHOVERTIME = #LVM_FIRST + 71 
#LVS_EX_TRACKSELECT =8
#LVS_EX_ONECLICKACTIVATE =64
#LVS_EX_TWOCLICKACTIVATE =128
#LVS_EX_UNDERLINEHOT =$800

#LVS_EX_FLATSB =256
#LVS_EX_REGIONAL =512
#LVS_EX_INFOTIP = 1024
#LVS_EX_UNDERLINECOLD =$1000
#LVS_EX_MULTIWORKAREAS =$2000

#winnr = 1
#listnr = 2

OpenWindow(#winnr, 0, 0, 600, 250, "",#PB_Window_ScreenCentered) 
 
 CreateGadgetList(WindowID(#winnr)) 
 
    CreateStatusBar(0, WindowID(#winnr)) 
    AddStatusBarField(200) 
    AddStatusBarField(125) 
        
    listid = ListIconGadget(#listnr, 10, 10, 422, 200, "0", 100, #PB_ListIcon_FullRowSelect|#PB_ListIcon_GridLines) 
    
    AddGadgetColumn(#listnr, 1, "1", 100) 
    AddGadgetColumn(#listnr, 2, "2", 100) 
    AddGadgetColumn(#listnr, 3, "3", 100) 
    For j = 0 To 20 
      AddGadgetItem(#listnr, -1, "Zeile " + Str(j) + #LF$ + "Zeile " + Str(j) + #LF$ + "Zeile " + Str(j) + #LF$ + "Zeile " + Str(j)) 
    Next 
    
    ;ListIconGadget Extended Styles
    flag = SendMessage_(listid, #LVM_GETEXTENDEDLISTVIEWSTYLE,0,0)
    SendMessage_(listid, #LVM_SETEXTENDEDLISTVIEWSTYLE,  0, flag | #LVS_EX_ONECLICKACTIVATE | #LVS_EX_UNDERLINEHOT) ;#LVS_EX_TRACKSELECT) 
    ;SendMessage_(listid, #LVM_SETHOVERTIME, 0, 100) ; nur in Verbindung mit #LVS_EX_TRACKSELECT

Repeat 
  
  eventid = WaitWindowEvent() 
  
  Select eventid 
    
      Case #PB_Event_Gadget 
      
          Select EventGadget() 
      
              Case #listnr 
                StatusBarText(0, 1, "Zeile angeklickt = " + Str(GetGadgetState(#listnr))) 
      
          EndSelect 
      
      ;nur zur Info, kann auch weg
      Case #WM_MOUSEMOVE 
        
          id = ChildWindowFromPoint_(WindowID(#winnr), WindowMouseX(#winnr), WindowMouseY(#winnr)) 
      
          If id = listid 
              zeile = SendMessage_(listid, #LVM_GETHOTITEM, 0, 0) 
              StatusBarText(0, 0, "Maus in Zeile = " + Str(zeile)) 
          EndIf 
      
  EndSelect 
  
Until eventid = #PB_Event_CloseWindow 
End 



Verfasst: 11.10.2008 10:48
von Andesdaf
@DarkDragon:
Das habe ich auch schon gefunden war aber leider nicht das richtige.

@hjbremer:
Ich werds mir mal anschauen. Auf den ersten Blick siehts schon mal gut aus! :allright:

Verfasst: 16.10.2008 18:21
von alter Mann
wenn du jetzt noch beim Code von hjbremer

Code: Alles auswählen

    SetWindowTheme_ (listid,"Explorer",#Null)
nach dem ertsellen des LsitIcon einfügst sollte es das gewünschte Aussehen haben

Verfasst: 16.10.2008 18:30
von alter Mann
sorry, habe noch vergessen zu erwähnen, dass die Exe als Unicode
compiliert werden muss bzw. der String "Explorer" als Unicode
an SetWindowTheme_ übergeben werden muss

Verfasst: 16.10.2008 18:32
von ts-soft
Und das man die Funktion erst importieren sollte :wink: , bzw. lieber die dll
dynamisch laden, da nicht immer vorhanden
da könnte man dann auch gleich den pseudotype p-unicode nehmen, dann
hätte sich das mit dem "Explorer" auch erledigt.

Verfasst: 20.10.2008 15:41
von Andesdaf
alter Mann hat geschrieben:wenn du jetzt noch beim Code von hjbremer

Code: Alles auswählen

    SetWindowTheme_ (listid,"Explorer",#Null)
nach dem ertsellen des LsitIcon einfügst sollte es das gewünschte Aussehen haben
Danke! :D
ts-soft hat geschrieben:Und das man die Funktion erst importieren sollte , bzw. lieber die dll
dynamisch laden, da nicht immer vorhanden
da könnte man dann auch gleich den pseudotype p-unicode nehmen, dann
hätte sich das mit dem "Explorer" auch erledigt.
Auch danke! :mrgreen:

@hjbremer: Nochmal danke für die Vorlage :D

Edit: Beitrag nr. 100!

Verfasst: 04.11.2008 17:10
von Andesdaf
Jetzt ist aber was komisch!

Wenn ich das beim Code von hjbremer ausführen will, geht's einwandfrei, aber bei meinem Projekt laäuft's nich. :?

Vielleicht habt ihr ja noch eine Idee für dieses Problem