Unterlegung für ListIconGadget

Windowsspezifisches Forum , API ,..
Beiträge, die plattformübergreifend sind, gehören ins 'Allgemein'-Forum.
Andesdaf
Moderator
Beiträge: 2673
Registriert: 15.06.2008 18:22
Wohnort: Dresden

Unterlegung für ListIconGadget

Beitrag 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
Zuletzt geändert von Andesdaf am 04.11.2008 17:07, insgesamt 2-mal geändert.
Win11 x64 | PB 6.20
Andesdaf
Moderator
Beiträge: 2673
Registriert: 15.06.2008 18:22
Wohnort: Dresden

Beitrag von Andesdaf »

Die frage ist ziemlich schwer, hoffe, da antwortet noch einer.
Win11 x64 | PB 6.20
DarkDragon
Beiträge: 6291
Registriert: 29.08.2004 08:37
Computerausstattung: Hoffentlich bald keine mehr
Kontaktdaten:

Beitrag von DarkDragon »

Vielleicht hilft dir das hier ja weiter:

http://www.purearea.net/pb/CodeArchiv/G ... Colored.pb
Angenommen es gäbe einen Algorithmus mit imaginärer Laufzeit O(i * n), dann gilt O((i * n)^2) = O(-1 * n^2) d.h. wenn man diesen Algorithmus verschachtelt ist er fertig, bevor er angefangen hat.
Benutzeravatar
hjbremer
Beiträge: 822
Registriert: 27.02.2006 22:30
Computerausstattung: von gestern
Wohnort: Neumünster

Beitrag 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 


Purebasic 5.70 x86 5.72 X 64 - Windows 10

Der Computer hat dem menschlichen Gehirn gegenüber nur einen Vorteil: Er wird benutzt
grüße hjbremer
Andesdaf
Moderator
Beiträge: 2673
Registriert: 15.06.2008 18:22
Wohnort: Dresden

Beitrag 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:
Win11 x64 | PB 6.20
Benutzeravatar
alter Mann
Beiträge: 201
Registriert: 29.08.2008 09:13
Wohnort: hinterm Mond

Beitrag 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
Win11 64Bit / PB 6.0
Benutzeravatar
alter Mann
Beiträge: 201
Registriert: 29.08.2008 09:13
Wohnort: hinterm Mond

Beitrag 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
Win11 64Bit / PB 6.0
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag 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.
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Andesdaf
Moderator
Beiträge: 2673
Registriert: 15.06.2008 18:22
Wohnort: Dresden

Beitrag 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!
Win11 x64 | PB 6.20
Andesdaf
Moderator
Beiträge: 2673
Registriert: 15.06.2008 18:22
Wohnort: Dresden

Beitrag 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
Win11 x64 | PB 6.20
Antworten