The Wiert Corner – irregular stream of stuff

Jeroen W. Pluimers on .NET, C#, Delphi, databases, and personal interests

  • My badges

  • Twitter Updates

  • My Flickr Stream

  • Pages

  • All categories

  • Enter your email address to subscribe to this blog and receive notifications of new posts by email.

    Join 1,604 other followers

Archive for April 17th, 2013

Woon je in Amsterdam de Aker? Nog 4 dagen de tijd om je voor Glasvezel in te schrijven en voorop mee te lopen.

Posted by jpluimers on 2013/04/17

Woon je in Amsterdam de Aker? Nog 4 dagen de tijd om je voor Glasvezel in te schrijven en voorop mee te lopen. « The Wiert Corner – irregular stream of stuff.

Het stuk in de krant zelf: Read the rest of this entry »

Posted in About, Opinions, Personal | Leave a Comment »

delphi – How to simulate Windows Theme behaviour when TComboBox uses csOwnerDrawFixed or csOwnerDrawVariable? – Stack Overflow

Posted by jpluimers on 2013/04/17

Some notes if I ever want to do something like this.

In this case I worked around it by having the Items include different text (since I had object pointers in the TStrings anyway) so I could stick to the csDropDown Style.

A very easy way to show different string values than the Items is to set the Style property fromcsDropDown to csOwnerDrawFixed as Andreas Rejbrand has answered a few years ago.

The thing is: as soon as you do that, you loose Windows Theming support.
The same limitation applies to using csOwnerDrawVariable

These two Style values get translated into adding the CBS_OWNERDRAWFIXED orCBS_OWNERDRAWVARIABLE (in addition to CBS_DROPDOWNLISTstyles of the Windows COMBOBOX control.

In turn, CBS_OWNERDRAWFIXED or CBS_OWNERDRAWVARIABLE cause you to instantly loose the Windows theming support.

When you do full custom painting like a colour picker, that is all fine. But when you only want to replace the drawn text, it is not.

The Windows COMBOBOX control does not seem to have a way around this, so I’m wondering: how can you simulate the Windows theming from Delphi?

I assume it has to do with DrawThemedBackground, but it has been a while since I’ve done serious Delphi Control work, so any pointers on how to get started there are fine too (even if they invalidate my assumption).

share|edit|close|delete|flag
75% accept rate
1
Just change the text in the control and let Windows do the work. – David Heffernan Sep 9 at 11:08
@DavidHeffernan That is a lot of work, so I wonder if simulating the theming is less work. And it would be a good exercise to learn more about how the theming support actually functions. – Jeroen Wiert Pluimers Sep 9 at 11:14
2
up voted
I cannot imagine that ComboBox1.Items.Assign is harder than working out theming. Very easy to get themed painting wrong as you can see from the VCL. Windows gets it right. – David Heffernan Sep 9 at 11:38
@DavidHeffernan The problem is not the Assign, but the mapping back to what I want. But I appreciate your point. Just waiting to see if someone comes with an answer into the theming direction and if not, work on the mapping. – Jeroen Wiert Pluimers Sep 9 at 12:21
1
up voted
Can you work it out by reading the code for TComboBoxStyleHook. – David Heffernan Sep 9 at 13:13
I tried, not much success yet, but when I do, I will post. First some non work though (: – Jeroen Wiert PluimersSep 9 at 13:24
1
up voted
As david says, I really don’t see the point of your question. You’re doing it the hard slow way, instead of the fast easy way (Just change the item text?) – Warren P Sep 10 at 3:21
I simplified the question a lot. Doing the reverse mapping requires me to enumerate over all items, which I’d rather not do (especially since I’d need abstract that for multiple not so similar kinds of occasions that are in different parts of the class hierarchy). – Jeroen Wiert Pluimers Sep 10 at 11:03
 
@JeroenWiertPluimers But you need to do that mapping at some point. The text has to come from somewhere. – David Heffernan Sep 10 at 12:09
@DavidHeffernan But now I need to do the reverse mapping… It’s not impossible like a trapdoor, but it is impractical. But probably less impractical than doing the theming. – Jeroen Wiert Pluimers Sep 10 at 14:19
1
up voted
If you can work the text out to paint it, you can work the text out to stuff into the combo box items. – David Heffernan Sep 10 at 14:42
@DavidHeffernan stuffing the text into the items isn’t the problem. The reverse (getting the right underlying item back from that text) is. That’s my mapping problem, hence the reference to the trapdoor. – Jeroen Wiert Pluimers Sep 10 at 15:14
 
OK, now I understand. I guess at this point you wished you had a better separation between business logic and UI! – David Heffernan Sep 10 at 15:15
I usually want, as most code I maintain at clients has very bad separation. But in this case the separation is quite OK. The Business Layer gives me a TStrings with the Objects filled (it is pre-Delphi-2009, so no generics yet). That’s why I can get out the Text sou easy (: First I need to finish about a week of .NET work though. – Jeroen Wiert Pluimers Sep 10 at 16:03
 
I actually wish that I had a completely VCL-implementation of TComboBox if only due to the issues in the Standard Control ComboBox setting its item height however it wants. If I was stuck in your situation, I think I’d almost write my own TExtComboBox and its own VCL styles feature. – Warren P Sep 10 at 20:45
The comments by @DavidHeffernan did give me some thought. Since the Object instance references are already in the TStrings, I wrote a small function to return a new temporary TStrings that has the string values with the captions I needed and keep the Object references. Since it has the same item ordering, and same Object references I don’t need any mapping at all. Just need to make sure I free the new TStrings at the right moment. – Jeroen Wiert Pluimers Sep 10 at 21:24

add comment

–jeroen

via: delphi – How to simulate Windows Theme behaviour when TComboBox uses csOwnerDrawFixed or csOwnerDrawVariable? – Stack Overflow.

Posted in Delphi, Delphi XE2, Delphi XE3, Development, Software Development | 3 Comments »

Woon je in Amsterdam de Aker? Nog 4 dagen de tijd om je voor Glasvezel in te schrijven en voorop mee te lopen.

Posted by jpluimers on 2013/04/17

Onderstaand  interview met mij komt vandaag op 17 april 2013 in de Westerpost over Glasvezel in Amsterdam De Aker | Reggefiber.

Woon je ook in de Aker en heb je je nog niet ingeschreven, of heb je nog vragen: post gerust een comment en ik leg in meer detail uit waarom ik niet 1 maar 2 aansluitingen ga bestellen.

Eindelijk de kans om voorop te lopen

Nog vier dagen, dan weet bewoner Jeroen Pluimers of in zijn buurt tenminste dertig procent van de huishoudens voor een glasvezelabonnement bij één van de serviceproviders kiest. Alleen dán gaat glasvezel, aangelegd door Reggefiber, er ook echt komen. Jeroen (44) heeft een automatiseringsbedrijf (http://BeSharp.net) aan huis, maar ziet ook privé enorme mogelijkheden met glasvezel.

Hoe 2.0 ben jij?

“Ha, ik ben zelfs 3.0! De voorlopers van Internet gebruikte ik al vrij snel nadat in 1986 – ik was toen achttien jaar – de elektronische netwerken in Europa en Amerika met elkaar werden verbonden. Het nieuwe werken doe ik al sinds begin jaren ’90.”

Dat is erg 3.0 ja! Logisch dat je een voorstander van glasvezel bent.

“Ik heb gejuicht toen ik zag dat De Aker in aanmerking komt. Al lange tijd hield ik in de gaten of het zover was. Immers, Amsterdam had de ambitie om dé glasvezelhoofdstad te worden, maar helaas is dat niet gelukt. Ik moest dus maar afwachten of het nog kwam en stelde vaak op internet de vraag wánneer het in De Aker zou komen. We lopen hier vaak achter. De komst van openbaar vervoer, ADSL, kabel, de brug over de ringvaart, dat duurde allemaal erg lang. Ik hoop zo dat er glasvezel zal worden aangelegd.”

Handig voor jou, met een bedrijf aan huis.

“Ja, met glasvezel kun je makkelijk meer servers tegelijk vanaf het internet benaderen. Maar ook privé is het hartstikke handig als je dingen snel kunt uploaden en downloaden, omdat we steeds meer informatie met elkaar delen. ADSL en kabel volstaan niet meer. Bij glasvezel is het laagste abonnement dat je bij je provider kunt kiezen voor uploaden al circa tien keer sneller! En als je denkt dat je dat nu nog niet nodig hebt, is het slim om er toch voor te kiezen. Er komen steeds meer online diensten bij. Neem het live videobellen met verre vrienden of familie, het delen van grote hoeveelheden informatie zoals haarscherpe foto’s en video’s, of communiceren met apparaten thuis zoals de thermostaat, de zonwering, de magnetron. Met glasvezel kun je sneller en veel meer diensten tegelijk afnemen.”

En de prijs?

“Veel mensen hebben nu nog televisie, telefonie en internet apart. Door deze slim te combineren in een abonnement kun je met glasvezel een stuk goedkoper uit zijn dan nu vaak het geval is.”

Je hebt erover nagedacht. En je buren?

“Volgens mij zijn er best nog wat buurtbewoners die aarzelen. Maar ik zie zoveel voordelen. Ik hoop de laatste twijfelaars deze week nog over te halen.”

En als je dan voor glasvezel kiest, hoe kun je je aanmelden?

“Het wordt de mensen heel gemakkelijk gemaakt. Je kunt je via internet aanmelden bij www.eindelijkglasvezel.nl/amsterdam-de-aker of via de website van je provider, zoals ik heb gedaan. En er zit zelfs een servicepunt in de C1000 in winkelcentrum Dukaat.”

Dat heb jij natuurlijk allang gedaan.

“Wat dacht je! Ver voor 21 april. En gelukkig hebben bewoners van De Aker nu nog een paar dagen de tijd om dat te regelen. Ik ben zó benieuwd of we de dertig procent halen. Dit is al heel lang mijn wens. ‘Yes!’ dacht ik toen ik hoorde over de plannen. Eindelijk krijgt De Aker de kans om mee te lopen. Om voorop te lopen!”

–jeroen

Posted in Opinions, Power User | 1 Comment »

 
%d bloggers like this: