Over knopjes.

Door sanderev66 op zondag 08 augustus 2010 21:19 - Reacties (10)
Categorie: -, Views: 3.139

Sinds de uitvinding van de computermuis zie je ze overal: knopjes. Knopjes om een programma te starten, knopjes om ze weer te sluiten. Er zijn zelfs knopjes waarmee een automatisch wapen afgaat. Er zijn knopjes waar je op drukt om de rekening te betalen, er zijn knopjes waar je op drukt om geld te verdienen. Knopjes zijn tegenwoordig belangrijk.

Knopjes zijn er in verschillende vormen en maten. Sommige knopjes zijn rond, zoals bv de Start-orb uit Windows Vista en Windows 7. Andere knopjes zijn vierkant of rechthoekig (en sommigen met afgeronde hoekjes) Welk OS je ook hebt, je hebt wel een soort van knopjes tot je beschikking.

Meeste mensen zijn alleen maar bezig met wat knopjes doen, waar ik het interessant vind om knopjes te maken. In Windows Vista en nieuwer heb je over het algemeen 2 soorten knopjes. De gewone pushbutton die je echt overal ziet, en de Command Button welke een uitgebreidere uitleg verschaft.

Nou de .NET programmeurs onder jullie weten allemaal dat een PushButton als Button in de Windows.Forms namespace zit. Velen van jullie weten ook dat er een PushButton genaamd StyleButton in het MicroSE Framework zit. Deze biedt o.a. ook ondersteuning om als dropdownbutton te werken. Deze is links op de bovenstaande afbeelding te zien.

Het rechter knopje is een CommandButton, welke geheel afwezig is in het .NET Framework. Of wacht... Toch niet!

System.Windows.Forms.VisualStyles.VisualStyleRenderer is een klasse waarmee je UI elementen op je GUI kan tekenen. Dat is dus: voortgangsbalken, menu's, scrollbalken, vensters, etc.. en natuurlijk ook Knopjes!

C#:
1
2
3
4
5
6
Graphics g = //graphicsobject...
Rectangle rect = new Rectangle(...)
var element = VisualStyleElement.CreateElement("BUTTON"61);
var vsr = new VisualStyleRenderer(element);
vsr.DrawParentBackground(grectthis);
vsr.DrawBackground(grect);


Dit is al genoeg om een CommandButton te tekenen. Dit doet natuurlijk nog niets, maar als je de getallen op de derde regel aanpast kan je een ander knopje / status krijgen. Daarna moet je er tekst en eventueel een plaatje op renderen en natuurlijk een OnClick event en DialogResult er aan koppelen en dan kan je het als een gewoon knopje gebruiken.

Er zijn alleen twee kleine probleempjes.
1. De bovenstaande code werkt alleen als je een visueel thema gebruikt in Windows. Dus niet de Classic stijl.
2. De bovenstaande code werkt enkel in Windows Vista en nieuwer. (De gewone Button werkt via deze renderer wél op XP)

Om aan dit probleem te ontkomen moet je eerst een controle inbouwen:

C#:
1
2
3
4
if (!VisualStyleRenderer.IsSupported || !VisualStyleRenderer.IsElementDefined(element))
{
      element = null;
}

Als je dat gedaan hebt, moet je een fallback-methode inbouwen. Hiervoor hebben we ButtonRenderer (System.Windows.Forms) uitgevonden. Hiermee kan je het knopje als een gewoon knopje renderen. En dit werkt ook als je de klassieke Windows weergave hebt.

En dan heb je, als het goed is, een nieuwe Control gemaakt. En dit knopje zit vanaf de volgende versie in MicroSE Connect. Gaaf hé :D

Volgende: 1 GB is 1024 MB of 1000 MB? 08-'10 1 GB is 1024 MB of 1000 MB?
Volgende: Wat krijg je als je Tetris mixed met een Physics engine? 07-'10 Wat krijg je als je Tetris mixed met een Physics engine?

Reacties


Door Tweakers user Sir Vega, zondag 08 augustus 2010 22:20

er zit veel achter zon knopje!

Door Tweakers user afraca, zondag 08 augustus 2010 22:38

Welk OS je ook hebt, je hebt wel een soort van knopjes tot je beschikking
[smartassmode] Een CLI-only OS, een Linux distributie bijvoorbeeld, ook? [/]

Door Tweakers user TheJVH, zondag 08 augustus 2010 22:48

Jammer dat het rechterknopje een gigantische interaction design fail is :) .

Door Tweakers user sanderev66, zondag 08 augustus 2010 22:56

Killzone schreef op zondag 08 augustus 2010 @ 22:48:
Jammer dat het rechterknopje een gigantische interaction design fail is :) .
Het is zoals MS ze gedesigned heeft.. Dus echt "fail" kan ik het niet noemen.
Je ziet ze bv als je je computer aan een nieuw netwerk hangt. Het zijn echt knoppen voor wanneer je de gebruiker 2/3/4 specifieke keuzes wilt bieden en niet voor het gewone knopgebruik, daarvoor is het linker knopje.

Dus als je bv een Installatie gaat verrichten kies je beter voor het rechter knopje, maar als je een instelling gaat veranderen is het linker knopje een betere keuze. In Connect houd ik me dan ook aan die simpele regel.
afraca schreef op zondag 08 augustus 2010 @ 22:38:
[...]


[smartassmode] Een CLI-only OS, een Linux distributie bijvoorbeeld, ook? [/]
Als ze muisgestuurde interfaces bieden (en die heb je ook met een CLI) dan wel.

[Reactie gewijzigd op zondag 08 augustus 2010 23:04]


Door Tweakers user nIghtorius, zondag 08 augustus 2010 23:23

afraca schreef op zondag 08 augustus 2010 @ 22:38:
[...]


[smartassmode] Een CLI-only OS, een Linux distributie bijvoorbeeld, ook? [/]
[smartassreply]
zie: http://upload.wikimedia.o...a/commons/c/c5/Fdedit.png
[/]

yup.. Zelfs in CLI only kun je knopjes te zien krijgen.

Door Tweakers user Blokker_1999, maandag 09 augustus 2010 07:16

In CLI kan je ze idd krijgen, maar je hebt geen muis nodig om ze te bedienen. En het gaat vaak ook simpelweg sneller met een toetsenbord dan een muis.

Ik ben niet alergisch aan een muis, maar ik vind het zelf prettiger en sneller werken in een omgeving die goed is opgezet om met enkel het toetsenbord bediend te worden.

Door Tweakers user sanderev66, maandag 09 augustus 2010 09:18

Dan zal je blij zijn met mn nieuwe knopjes, die hebben ook een goede toetsenbord ondersteuning :P

Door Tweakers user Alex), maandag 09 augustus 2010 11:06

Heb je al eens gekeken naar het Windows API Code Pack? Dit ding bevat veel wrappers voor de functionaliteit die jij hier beschrijft... waaronder ook bijvoorbeeld Task Dialogs met die mooie knopjes :)

Door Tweakers user sanderev66, maandag 09 augustus 2010 11:31

Die knopjes zijn dan weer 100% P/Invokes, wat ik doe is 100% Managed code. ;) Ook kan je ze niet in de Designer gebruiken.

Door Tweakers user wheez50, maandag 09 augustus 2010 13:49

Wat betreft een CLI: Mijn toetsenbord heeft geen knopjes |:(

Reageren is niet meer mogelijk