2 Fragen

The place for threads about TimoSoft TabStrip.
Post Reply
floppes
Cadet
Posts: 4
Joined: 03 Feb 2007, 17:22

2 Fragen

Post by floppes »

Hi,

erstmal ein großes Lob! Das TabStrip Control ist genau was ich suche: ein TabStrip, das unter Windows XP und Vista korrekt angezeigt wird UND Icons in den Tabs unterstützt.

Jetzt habe ich nur zwei Probleme:
Ich habe die Icons für die Tabs in einer ImageList mit transparentem Hintergrund. Ich weise die Icons so zu:

Code: Select all

TabStrip1.hImageList = ImageList1.hImageList
TabStrip1.Tabs.Item(0).IconIndex = 0
Dabei wird aber der transparente Teil des Icons weiß dargestellt. Muss ich noch eine MaskColor irgendwo festlegen?

Das andere betrifft Windows XP/Vista Styles:
Auf den Tabs habe ich Picture Boxen in denen ich jeweils ein Frame habe und darin die Controls. Das Frame wird aber mit falschem Hintergrund (unter XP grau) angezeigt. Ich dachte der Trick um das zu verhindern wäre die Verwendung von einer PictureBox als Container. Oder was mache ich falsch?

Gruß,

Flo
[hr]
Translation for visitors not speaking German:
Hi,

at first kudos to you! The TabStrip control is exactly what I'm looking for: a tabstrip that is displayed correctly on XP and Vista AND supports icons within the tabs.

Now I've only two problems:
I've the icons for the tabs in an imagelist with transparent background. I apply the icons this way:

Code: Select all

TabStrip1.hImageList = ImageList1.hImageList
TabStrip1.Tabs.Item(0).IconIndex = 0
But this makes the transparent part of the icons drawn white. Do I have to set a MaskColor anywhere?

The other one affects Windows XP/Vista styles:
On the tabs I have PictureBoxes each containing a Frame and the controls inside the Frames. But the Frame is drawn with wrong background (on XP opaque gray). I thought the trick to prevent this would be to use a PictureBox as container. What am I doing wrong?

Salute,

Flo
User avatar
TiKu
Administrator
Administrator
Posts: 832
Joined: 28 Sep 2004, 21:10
Location: München
Contact:

Re: 2 Fragen

Post by TiKu »

Hi,
floppes wrote:Jetzt habe ich nur zwei Probleme:
Ich habe die Icons für die Tabs in einer ImageList mit transparentem Hintergrund. Ich weise die Icons so zu:

Code: Select all

TabStrip1.hImageList = ImageList1.hImageList
TabStrip1.Tabs.Item(0).IconIndex = 0
Dabei wird aber der transparente Teil des Icons weiß dargestellt. Muss ich noch eine MaskColor irgendwo festlegen?
Dafür habe ich im Moment keine Lösung. Mein Control leitet das alles an die SysTabStrip32-Fensterklasse aus der comctl32.dll weiter. Auch das Zeichnen des Controls wird von SysTabStrip32 übernommen. Es ist also ein Problem in der comctl32.dll.
Ich werde mal versuchen herauszufinden, ob es einen Workaround gibt.
floppes wrote:Das andere betrifft Windows XP/Vista Styles:
Auf den Tabs habe ich Picture Boxen in denen ich jeweils ein Frame habe und darin die Controls. Das Frame wird aber mit falschem Hintergrund (unter XP grau) angezeigt. Ich dachte der Trick um das zu verhindern wäre die Verwendung von einer PictureBox als Container. Oder was mache ich falsch?
Platziert man den Frame von VB6 auf einem VB6-TabStrip, hat der Frame einen komplett grauen Hintergrund. Eine PictureBox als Container des Frames ändert daran nichts.
Platziert man den Frame von VB6 auf meinem TabStrip, hat der Frame einen grauen Hintergrund, außer bei der Beschriftung, welche einen transparenten Hintergrund hat (zumindest unter Vista). Eine PictureBox als Container des Frames führt zu einem komplett grauen Hintergrund.
Platziert man den Frame aus meinen ButtonControls auf meinem TabStrip, hat der Frame den gewünschten transparenten Hintergrund. Eine PictureBox als Container des Frames führt zu einem komplett grauen Hintergrund.

Es war mir leider nicht möglich, das TabStrip so zu schreiben, dass auch der normale VB6-Frame automatisch einen transparenten Hintergrund bekommt.

Grüße
TiKu
[hr]
Translation for visitors not speaking German:
Hi,
floppes wrote:Now I've only two problems:
I've the icons for the tabs in an imagelist with transparent background. I apply the icons this way:

Code: Select all

TabStrip1.hImageList = ImageList1.hImageList
TabStrip1.Tabs.Item(0).IconIndex = 0
But this makes the transparent part of the icons drawn white. Do I have to set a MaskColor anywhere?
Currently I don't have a solution for this one. My control is forwarding all this to the SysTabStrip32 window class out of the comctl32.dll. Drawing the control is done by SysTabStrip32, too. So this is a problem in comctl32.dll.
I'll try to find out whether there's a work-around.
floppes wrote:The other one affects Windows XP/Vista styles:
On the tabs I have PictureBoxes each containing a Frame and the controls inside the Frames. But the Frame is drawn with wrong background (on XP opaque gray). I thought the trick to prevent this would be to use a PictureBox as container. What am I doing wrong?
Placing the VB6 Frame on a VB6 TabStrip makes the Frame's background all gray. A PictureBox as the Frame's container won't change this.
Placing a VB6 Frame on my TabStrip makes the Frame's background all gray, except the caption's background which gets a transparent background (at least on Vista). A PictureBox as the Frame's container makes the background all gray.
Placing the Frame of my ButtonControls on my TabStrip makes the Frame's background transparent as desired. A PictureBox as the Frame's container makes the background all gray.

Unfortunately I wasn't able to write the TabStrip so that also the normal VB6 Frame gets a transparent background automatically.

Greetings
TiKu
Last edited by TiKu on 20 Feb 2007, 00:48, edited 1 time in total.
Crunching for Fab36_Folding-Division at Folding@Home. Join Fab36/Fab30! - Folding@Home and BOINC
Boycott DRM! Boycott HDCP!
floppes
Cadet
Posts: 4
Joined: 03 Feb 2007, 17:22

Re: 2 Fragen

Post by floppes »

TiKu wrote:Dafür habe ich im Moment keine Lösung. Mein Control leitet das alles an die SysTabStrip32-Fensterklasse aus der comctl32.dll weiter. Auch das Zeichnen des Controls wird von SysTabStrip32 übernommen. Es ist also ein Problem in der comctl32.dll.
Ich werde mal versuchen herauszufinden, ob es einen Workaround gibt.
Hm ok. Und wie hast du das bei den Beispielprogrammen auf den Screenshots gemacht? Da ist der Hintergrund der Icons transparent.

Mit dem Frame aus den ButtonControls funktioniert es wunderbar. Aber leider ist die OCX Datei mit 700 KB recht groß.
[hr]
Translation for visitors not speaking German:
TiKu wrote:Currently I don't have a solution for this one. My control is forwarding all this to the SysTabStrip32 window class out of the comctl32.dll. Drawing the control is done by SysTabStrip32, too. So this is a problem in comctl32.dll.
I'll try to find out whether there's a work-around.
Hm ok. And how did you do this in the sample programs on the screenshots? The icon's background is transparent there.

It works delightful with the Frame from the ButtonControls. But unfortunately with 700 KB this OCX file is quite huge.
User avatar
TiKu
Administrator
Administrator
Posts: 832
Joined: 28 Sep 2004, 21:10
Location: München
Contact:

Re: 2 Fragen

Post by TiKu »

floppes wrote:Hm ok. Und wie hast du das bei den Beispielprogrammen auf den Screenshots gemacht? Da ist der Hintergrund der Icons transparent.
In den Beispielen verwende ich das ImageList-Control von vbAccelerator. Ich war erst davon ausgegangen, dass dieses Control eine Hintergrundfarbe setzt, aber das tut es nicht wie ich gerade im Quellcode sehe.
Die vbAccelerator-ImageList geht so vor: Es erzeugt die ImageList mit dem ILC_MASK-Flag, setzt den Hintergrund auf CLR_NONE, also transparent, und fügt die Icons dann mittels ImageList_AddIcon() ein. Damit funktioniert es auch wie man an den Screenshots sieht.

Ach ja, mit der System-ImageList bekommt man interessanterweise einen weißen Hintergrund. :dontknow:
[hr]
Translation for visitors not speaking German:
floppes wrote:Hm ok. And how did you do this in the sample programs on the screenshots? The icon's background is transparent there.
In the samples I'm using the ImageList control from vbAccelerator. First I thought this control would set a background color, but it doesn't do so as I'm seeing in the sourcecode now.
The vbAccelerator ImageList works like this: It creates the imagelist with the ILC_MASK flag, sets the background to CLR_NONE, i. e. transparent, and then adds the icons using ImageList_AddIcon(). As you can see on the screenshots it works if done this way.

By the way, using the system imagelist you get a white background interestingly. :dontknow:
Last edited by TiKu on 20 Feb 2007, 00:56, edited 1 time in total.
Crunching for Fab36_Folding-Division at Folding@Home. Join Fab36/Fab30! - Folding@Home and BOINC
Boycott DRM! Boycott HDCP!
floppes
Cadet
Posts: 4
Joined: 03 Feb 2007, 17:22

Post by floppes »

Ok danke, mit der ListView von vbAccelerator klappt es :)

Jetzt aber das nächste Problem: Labels innerhalb von Frames auf dem TabControl haben einen grauen Hintergrund. Ich hab schon geschaut ob du dafür auch ein Control anbietest aber bisher nichts gefunden.
[hr]
Translation for visitors not speaking German:
Ok thanks, it's working with the listview from vbAccelerator. :)

But now the next problem: Labels inside of Frames on the tab control have a gray background. I've already been looking for a replacement control from you but didn't find one.
User avatar
TiKu
Administrator
Administrator
Posts: 832
Joined: 28 Sep 2004, 21:10
Location: München
Contact:

Post by TiKu »

floppes wrote:Ok danke, mit der ListView von vbAccelerator klappt es :)
ListView? Du meinst ImageList, oder? ;)
floppes wrote:Jetzt aber das nächste Problem: Labels innerhalb von Frames auf dem TabControl haben einen grauen Hintergrund. Ich hab schon geschaut ob du dafür auch ein Control anbietest aber bisher nichts gefunden.
Es reicht, den Hintergrund (BackStyle) des Labels auf "0-Transparent" zu setzen.
[hr]
Translation for visitors not speaking German:
floppes wrote:Ok thanks, it's working with the listview from vbAccelerator. :)
Listview? You mean imagelist, don't you? ;)
floppes wrote:But now the next problem: Labels inside of Frames on the tab control have a gray background. I've already been looking for a replacement control from you but didn't find one.
It's enough to set the label's background (BackStyle) to "0-Transparent".
Last edited by TiKu on 20 Feb 2007, 00:59, edited 1 time in total.
Crunching for Fab36_Folding-Division at Folding@Home. Join Fab36/Fab30! - Folding@Home and BOINC
Boycott DRM! Boycott HDCP!
floppes
Cadet
Posts: 4
Joined: 03 Feb 2007, 17:22

Post by floppes »

TiKu wrote:ListView? Du meinst ImageList, oder? ;)
Ja, ImageList natürlich :D
TiKu wrote:Es reicht, den Hintergrund (BackStyle) des Labels auf "0-Transparent" zu setzen.
Stimmt, da hätte ich mal dran denken sollen... ;)

Danke für die Hilfe!
[hr]
Translation for visitors not speaking German:
TiKu wrote:Listview? You mean imagelist, don't you? ;)
Yes, imagelist of course. :D
TiKu wrote:It's enough to set the label's background (BackStyle) to "0-Transparent".
Right, I should have thought of this... ;)

Thanks for the help!
Post Reply