[win32] Kleur van gesorteerde kolom

Pagina: 1
Acties:

  • _Thanatos_
  • Registratie: Januari 2001
  • Laatst online: 06-03 20:19

_Thanatos_

Ja, en kaal

Topicstarter
Weet iemand misschien hoe ik achter de kleur van een kolom kom, waarop gesorteerd wordt? In XP wordt die kleur ietjes anders dan de rest. Als de kleur van "venster" in de display settings op wit staat, wordt het #F7F7F7, terwijl als die kleur op zwart staat, wordt het lichter, maar veel meer lichter dan je zou verwachten.

Kan ik die kleur ergens uit het register halen? Op MSDN kon ik geen COLOR_x identifier ervoor vinden... of weet iemand misschien hoe die kleur berekend wordt?

Het is iig niet simpelweg de kleur wat donkerder of wat lichter maken, blijkt dus.

日本!🎌


  • The End
  • Registratie: Maart 2000
  • Laatst online: 06:37

The End

!Beginning

GetSysColor haalt de kleur op die je wilt hebben.

edit:


Niet goed gelezen. :) De kleur zou er tussen moeten staan, misschien dat hij bij de SystemParametersInfo lijst staat.

[ Voor 60% gewijzigd door The End op 10-03-2005 11:26 ]


  • _Thanatos_
  • Registratie: Januari 2001
  • Laatst online: 06-03 20:19

_Thanatos_

Ja, en kaal

Topicstarter
Helaas, maar bij SystemParametersInfo kan ik geen waarde vinden die de kleur returnt, die ik zoek...

/edit: GetSystemMetrics staat ie ook niet bij.

[ Voor 20% gewijzigd door _Thanatos_ op 10-03-2005 11:42 ]

日本!🎌


  • Tomatoman
  • Registratie: November 2000
  • Laatst online: 04:01

Tomatoman

Fulltime prutser

De kleurcode is een 32-bits integer, die als volgt is opgebouwd:
rood: (kleur & #000000FF) (bitwise AND)
groen: (kleur & #0000FF00)
blauw: (kleur & #00FF0000)
(Het kan zijn dat ik de volgorde verkeerd aangeef, ik heb hier geen compiler bij de hand.)

Als de most significant byte (kleur & #FF000000) nul is, geven de rood-, groen- en blauwcomponenten de kleur aan. Als de most significant byte niet nul is, betreft het een constante die een Windows systeemkleur zoals clWindow of clButtonHighlight aangeeft; de R-, G- en B-componenten geven dan geen kleur aan maar zijn onderdeel van de constante. Wil je een willekeurige kleurcode vertalen (systeemkleur of RGB-waarde) naar de 'echte' RGB-kleur, dan gebruik je daarvoor in Delphi de functie ColorToRGB. Misschien kan iemand die op dit moment Delphi voor zich op zijn scherm ziet even opzoeken welke Win32 API call daarachter hangt.

[ Voor 18% gewijzigd door Tomatoman op 10-03-2005 12:52 ]

Een goede grap mag vrienden kosten.


  • _Thanatos_
  • Registratie: Januari 2001
  • Laatst online: 06-03 20:19

_Thanatos_

Ja, en kaal

Topicstarter
tomatoman, ik denk dat we allemaal best weten hoe kleuren werken, maar dat was mijn vraag ook helemaal niet...

Maar leuk dat het je interesseert :+

[ Voor 16% gewijzigd door _Thanatos_ op 10-03-2005 19:05 ]

日本!🎌


  • riezebosch
  • Registratie: Oktober 2001
  • Laatst online: 07:01
Wat wil je überhaupt met die kleurcode doen?

Canon EOS 400D + 18-55mm F3.5-5.6 + 50mm F1.8 II + 24-105 F4L + 430EX Speedlite + Crumpler Pretty Boy Back Pack


  • Tomatoman
  • Registratie: November 2000
  • Laatst online: 04:01

Tomatoman

Fulltime prutser

_Thanatos_ schreef op donderdag 10 maart 2005 @ 19:04:
tomatoman, ik denk dat we allemaal best weten hoe kleuren werken, maar dat was mijn vraag ook helemaal niet...

Maar leuk dat het je interesseert :+
Ehm, even niet opgelet welke user de vraag stelde. Als ik had gezien dat jij het was had ik wel een vaag lulverhaal opgehangen :+

In Delphi heet die color identifier clHighlightText; hij mapt naar (#FF000000 or COLOR_HIGHLIGHTTEXT) oftewel #FF000014. Vraag gewoon met GetSysColor(clHighlightText) de RGB-waarde op, daar heb je het register helemaal niet voor nodig. Of begrijp ik je nu nog steeds verkeerd :?

[ Voor 29% gewijzigd door Tomatoman op 10-03-2005 23:55 ]

Een goede grap mag vrienden kosten.


  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
riezebosch schreef op donderdag 10 maart 2005 @ 19:19:
Wat wil je überhaupt met die kleurcode doen?
Met alle respect, maar wat maakt dat nou uit wat 'ie er mee wil doen? Waarschijnlijk heeft de TS ook een listview die te sorteren is en wil dus deze feature mimicken ofzo. Who cares wat de TS er mee wil doen :Y)

Ik heb ook even over MSDN voor de TS zitten bladeren, maar kan ook zo snel niks vinden. Je zou natuurlijk de kleur kunnen hard-coden, maar ik begrijp prima dat je gewoon de windows instellingen wil aanhouden (en dus door de gebruiker aan te passen middels een setting, theme of whatever).

Wel zou ik eens even kijken of het niet gewoon een bepaalde drawmode combinatie met een bepaalde systeem-kleur is ofzo. Misschien dat je met een beetje reduceren er achter kunt komen welke het dan is? (Hoewel me dit sterk lijkt).

[ Voor 9% gewijzigd door RobIII op 10-03-2005 23:53 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


  • _Thanatos_
  • Registratie: Januari 2001
  • Laatst online: 06-03 20:19

_Thanatos_

Ja, en kaal

Topicstarter
tomatoman, je begrijpt me nog steeds verkeerd :)

Het gaat om de lichtgrijze kleur die een kolom in de explorer in XP krijgt, als je erop sorteert. De rest van de kolommen is dan wit.

RobIII, bedankt voor het meedenken. Je hebt me nog op een ander idee gebracht: misschien is die kleur wel ergens uit de theme service te trekken (alhoewel de grijze sorteerkolom ook zichtbaar is als je de themes-service stopt/uitschakelt). Misschien biedt LVP_LISTSORTEDDETAIL wel wat ik wil :)

日本!🎌


  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
_Thanatos_ schreef op vrijdag 11 maart 2005 @ 10:09:
tomatoman, je begrijpt me nog steeds verkeerd :)

Het gaat om de lichtgrijze kleur die een kolom in de explorer in XP krijgt, als je erop sorteert. De rest van de kolommen is dan wit.
Plaats dan effe een screenie ;)

Afbeeldingslocatie: http://www.tweakers.net/ext/f/53849/thumb.png
Nou doet de thumbnail het wéér niet :? Toch maar eens effe draadje starten in [BUG] [FA] :Y)

Afbeeldingslocatie: http://www.tweakers.net/ext/f/53850/thumb.png
PNG doet het wel :?

[ Voor 24% gewijzigd door RobIII op 11-03-2005 10:39 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


  • _Thanatos_
  • Registratie: Januari 2001
  • Laatst online: 06-03 20:19

_Thanatos_

Ja, en kaal

Topicstarter
Precies, die kleur zoek ik :)

Ik heb trouwens al wat kunnen vinden:
Delphi:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
var
   SortColor: Cardinal;
   Res: HRESULT;
begin
SortColor := 0;
Res := GetThemeColor(ThemeServices.Theme[teListView],
   LVP_LISTSORTEDDETAIL,
   1,
   TMT_FILLCOLOR,
   SortColor);
if Res <> S_OK
then ShowMessage(SysErrorMessage(Res));
Shape2.Brush.Color := SortColor;
end;


maar: ten eerste werkt dit alleen met themes enabled, dus als je het classic "theme" gebruikt, dan geeft ThemeService.Theme[..] altijd een 0 terug (en dat is fout). Daarnaast mét een theme geeft dit altijd wit terug, dus misschien dat het een ander iets is, die voor de lichtgrijze kleur zorgt.

日本!🎌


  • The End
  • Registratie: Maart 2000
  • Laatst online: 06:37

The End

!Beginning

Ik denk dat dit een custom feature is van de Windows Explorer. Ik kan niet vinden in CListCtrl waar je dit kan instellen. Andere programma's doen dit ook niet. (B.V. Outlook Express)

Je zal het dus wel gewoon kunnen hardcoden. Ik zie ook nergens een optie om het te veranderen.

  • Tomatoman
  • Registratie: November 2000
  • Laatst online: 04:01

Tomatoman

Fulltime prutser

_Thanatos_ schreef op vrijdag 11 maart 2005 @ 10:09:
tomatoman, je begrijpt me nog steeds verkeerd :)

Het gaat om de lichtgrijze kleur die een kolom in de explorer in XP krijgt, als je erop sorteert. De rest van de kolommen is dan wit.
Aha, nu begrijp ik het. Je zou het als volgt kunnen aanpakken. Open een hidden desktop, waarop je Explorer start. Maximaliseer het venster en selecteer via een gesimuleerde muisklik de eerste kolom. Neem een screenshot van Explorer en bepaal de pixelkleur van de pixel in de linkerbovenhoek van de geselecteerde kolom. Houd er wel even rekening mee dat de positie van de bewuste pixel afhankelijk is van de gebruikte Windowsversie, de gebruikte Explorerversie inclusief plugins en een eventueel geselecteerd theme (dat de grootte van de title header aanpast). Sluit Explorer, sluit de hidden desktop. Je hebt nu de kleur bepaald. Mocht je de kleur vaak opnieuw willen bepalen, bouw dan nog even een caching mechanisme in. Om zeker te weten dat je de juiste kleur hebt gevonden, vergelijk je nog even de carthesische afstand tussen de gevonden kleur en lichtgrijs; is deze te groot, dan is er iets verkeerd gegaan.

Je zou natuurlijk ook gewoon de kleur kunnen hardcoden, net zoals in Explorer is gebeurd :z

Een goede grap mag vrienden kosten.


  • riezebosch
  • Registratie: Oktober 2001
  • Laatst online: 07:01
tomatoman schreef op vrijdag 11 maart 2005 @ 14:44:
[...]
Bovenstaande informatie wordt u gratis aangeboden door tomatoman. Voor nuttige informatie wordt een geringe toeslag in rekening gebracht.
Hier reken je geen toeslag voor, neem ik aan... ;)

Canon EOS 400D + 18-55mm F3.5-5.6 + 50mm F1.8 II + 24-105 F4L + 430EX Speedlite + Crumpler Pretty Boy Back Pack


  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
tomatoman schreef op vrijdag 11 maart 2005 @ 14:44:
[...]
Aha, nu begrijp ik het. Je zou het als volgt kunnen aanpakken. Open een hidden desktop, waarop je Explorer start. Maximaliseer het venster en selecteer via een gesimuleerde muisklik de eerste kolom. Neem een screenshot van Explorer en bepaal de pixelkleur van de pixel in de linkerbovenhoek van de geselecteerde kolom. Houd er wel even rekening mee dat de positie van de bewuste pixel afhankelijk is van de gebruikte Windowsversie, de gebruikte Explorerversie inclusief plugins en een eventueel geselecteerd theme (dat de grootte van de title header aanpast). Sluit Explorer, sluit de hidden desktop. Je hebt nu de kleur bepaald. Mocht je de kleur vaak opnieuw willen bepalen, bouw dan nog even een caching mechanisme in. Om zeker te weten dat je de juiste kleur hebt gevonden, vergelijk je nog even de carthesische afstand tussen de gevonden kleur en lichtgrijs; is deze te groot, dan is er iets verkeerd gegaan.

Je zou natuurlijk ook gewoon de kleur kunnen hardcoden, net zoals in Explorer is gebeurd :z
Als je dat vlak dan gaat kleuren moet je dat wel even voor iedere pixel doen (en misschien wel beter 2x per pixel om er zeker van te zijn dat het goed is) want stel dat de gebruiker net die instelling wijzigt of een andere theme kiest terwijl je dat vlak aan 't kleuren bent. Misschien, bedenk ik net, kun je het nog beter een keer of 10 doen per pixel en dan het gemiddelde nemen van al die 10 meetwaarden. :+

Enniewee; denk jij dat het "hardcoded" in explorer zit? Lijkt me redelijk stug eig'k. Maar 't zou kunnen...

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


  • _Thanatos_
  • Registratie: Januari 2001
  • Laatst online: 06-03 20:19

_Thanatos_

Ja, en kaal

Topicstarter
Ook al zit het hardcoded in de explorer, dan nog is het een formulier om die kleur te bepalen, en die formulier luidt niet simpel "5% donkerder dan clWindow" ofzo, want bij donkere kleuren wordt de sorteerkleur ietje lichter, terwijl als clWindow==clBlack, dan wordt de sorteerkleur gelijk 50% lichter (clGray dus).

Dusseh, als het niet uit het register of een API te trekken is, dan graag een formule om de betreffende leur te bepalen :Y)

日本!🎌


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 07-05 22:49

curry684

left part of the evil twins

Als de kleur meeverandert met clWindow kun je vervolgens toch met 5 tests de formule wel elimineren?

Professionele website nodig?


  • Tomatoman
  • Registratie: November 2000
  • Laatst online: 04:01

Tomatoman

Fulltime prutser

_Thanatos_ schreef op zaterdag 12 maart 2005 @ 16:45:
Dusseh, als het niet uit het register of een API te trekken is, dan graag een formule om de betreffende leur te bepalen :Y)
Mezelf kennende weet ik dat het erg aantrekkelijk is om de precieze formule te gebruiken, maar eerlijk gezegd denk ik dat er geen gebruikers zijn die je boze mails gaan sturen als je er een paar grijstinten naast zit :). Ik zou lekker een eenvoudige formule pakken en er verder niet te lang bij stil blijven staan.

Een goede grap mag vrienden kosten.

Pagina: 1