[.NET] Een HatchBrush patroon verschuiven

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • NickThissen
  • Registratie: November 2007
  • Laatst online: 09-09 10:50
Hey,

Ik ben een set controls aan het maken (in VB.NET) die kwa uiterlijk lijken op de Visual Studio 2010 IDE. Op het moment ben ik aan de TabControl bezig (die voor de tabbed documents gebruikt wordt natuurlijk) en vooral de achtergrond achter de tabs.

Deze achtergrond is een donkerblauwe kleur, met een patroon van puntjes. Hier is een uitvergootte versie (met verhoogd contrast/helderheid voor de duidelijkheid):
Afbeeldingslocatie: http://i33.tinypic.com/2ey8b9w.png

Zoals je kunt zien zijn er twee patronen: een van donkere puntjes en een van lichte puntjes.

Het tekenen van een sets puntjes is niet zo moeilijk, dat kan met behulp van de HatchBrush met een HatchStyle van Percent20:
Visual Basic .NET:
1
2
3
Using b As New HatchBrush(HatchStyles.Percent20, punt1Color, backColor)
   e.Graphics.FillRectangle(b, rect)
End Using


Het probleem is nu het tekenen van de tweede set puntjes. Ik dacht, ik doe gewoon precies hetzelfde nog een keer (met een andere punt kleur en doorzichtige achtergrond natuurlijk), nadat ik het Graphics object met 1 pixel omhoog verschoven heb:
Visual Basic .NET:
1
2
3
4
5
6
7
8
9
Using b As New HatchBrush(HatchStyles.Percent20, punt1Color, backColor)
   e.Graphics.FillRectangle(b, rect)
End Using

Using b As New HatchBrush(HatchStyles.Percent20, punt2Color, Color.Transparent)
   e.Graphics.TranslateTransform(0, -1)
   e.Graphics.FillRectangle(b, rect)
   e.Graphics.ResetTransform()
End Using


Maar helaasch: dit werkt niet. Wat ik ook doe met het graphics object (roteren, transleren, uitrekken, etc), het patroon blijft altijd op dezelfde positie getekend. Het lijkt erop dat het hatch patroon zich niets aantrekt van de orientatie van het graphics object....


Kan ik op een of andere manier toch dit tweede patroon (zelfde patroon natuurlijk maar met een andere kleur) omhoog verschuiven? Of kan ik misschien mijn eigen patroon maken? De enige andere manier die ik zie is handmatig alle puntjes zetten mbv een dubbele loop, maar dat wordt wel heel lelijk en hoogstwaarschijnlijk enorm langzaam, dat zie ik echt niet zitten!


En voordat iemand WPF gaat aanraden: ik ga geen WPF gebruiken, ik heb deze set controls gemaakt voor winforms omdat ik dat uitsluitend gebruik. Ik weet dat dit in WPF waarschijnlijk 2 seconden werk was geweest, maar dat is nou eenmaal niet mogelijk.

Mijn iRacing profiel


Acties:
  • 0 Henk 'm!

  • Zeebonk
  • Registratie: Augustus 2005
  • Laatst online: 30-07 20:50
Ik weet niet of dit een optie is, maar bij controls kan je ook gewoon een background image setten. Omdat het een herhalend patroon is hoef je maar één klein plaatje als achtergrond te zettten en deze te tilen om de hele achtergrond te vullen. Is misschien ook wel qua preformance een verbetering.

Acties:
  • 0 Henk 'm!

  • NickThissen
  • Registratie: November 2007
  • Laatst online: 09-09 10:50
Dat is misschien wel een idee, maar ik denk dat dit niet werkt voor een TabControl. Ik heb het niet geprobeerd (zal vanavond even kijken), maar ik geloof niet dat je achter de tabs nog een plaatje kan zetten. Ik geloof zelfs dat je zelfs de kleur niet eens kan instellen. Voor zover ik me kan herinneren is de enige optie om het handmatig te tekenen.

Misschien kan ik dan wel zo'n plaatje handmatig tekenen, maar dan kan ik dat plaatje denk ik niet vanzelf laten 'tilen' en zal ik het weer met een loopje moeten oplossen...

Mijn iRacing profiel


Acties:
  • 0 Henk 'm!

  • pedorus
  • Registratie: Januari 2008
  • Niet online
Verzet RenderingOrigin met 1 pixel (new Point(0,1), en terugzetten). Verder ziet het er niet uit natuurlijk, maar ik weet niet waar je het voor wil gebruiken.. :p

Vitamine D tekorten in Nederland | Dodelijk coronaforum gesloten


Acties:
  • 0 Henk 'm!

  • NickThissen
  • Registratie: November 2007
  • Laatst online: 09-09 10:50
pedorus schreef op zaterdag 14 augustus 2010 @ 18:31:
Verzet RenderingOrigin met 1 pixel (new Point(0,1), en terugzetten). Verder ziet het er niet uit natuurlijk, maar ik weet niet waar je het voor wil gebruiken.. :p
Aaaahh, dat was het antwoord. Het staat er zelfs bij in de omschrijving van die property. Raar dat ik dat niet gevonden heb. Bedankt!!

En ik gebruik het, zoals ik al zei, om de VS2010 controls na te bouwen. Daarmee ben ik nu een soort van 'lightweight' visual studio IDE aan het maken en hoewel de controls daar niet origineel voor bedoeld waren past het wel mooi moet ik zeggen. Als je zo ingezoomd kijkt ziet het inderdaad niet uit, maar als geheel vind ik het wel mooi uit zien:
Afbeeldingslocatie: http://i35.tinypic.com/33consg.jpg

[ Voor 4% gewijzigd door NickThissen op 14-08-2010 18:53 ]

Mijn iRacing profiel