Windows GUI applicatie met Borland C++ Builder 6.

© Harry Broeders.

Deze pagina is bestemd voor studenten van de Haagse Hogeschool - Academie voor Technology, Innovation & Society Delft.

Met behulp van C++ Builder kun je twee soorten windows applicaties ontwikkelen:

Tot nu toe hebben we bij dit practicum console applicaties gemaakt. Ik zal jullie op deze pagina laten zien hoe eenvoudig het is om een Windows applicatie (inclusief menu, knoppen enz) in elkaar te zetten met behulp van Borland C++ Builder 6.

Inhoud.

Het Windows operating systeem.

Voordat we kunnen beginnen moet ik jullie eerst enkele dingen vertellen over het Windows OS (operating systeem). Zoals je wel weet is het operating systeem verantwoordelijk voor alle beheerszaken in de PC. Het operating systeem is onder andere verantwoordelijk voor:

Een applicatie kan (moet) dus voor al deze zaken gebruik maken van het operating systeem. De vraag is nu hoe communiceert jouw Windows-applicatie met het Windows OS. Dit gaat door middel van functie-aanroepen. Alle functies die aan te roepen zijn in het Windows operating systeem vormen een zogenaamde API (Application Programmers Interface). Als we gebruik maken van de zogenaamde win32 API dan draaien onze applicaties op Windows95, Windows98, Windows2000 en WindowsXP. Het aantal functies in deze API is heel groot en het gebruik van deze API is zeker niet eenvoudig. Behalve dat onze applicatie met het Windows OS moet communiceren moet het Windows OS ook events (gebeurtenissen) aan onze applicatie kunnen doorgeven. Denk daarbij aan dingen zoals:

Als z'n event optreedt dan stuurt het Windows OS een message naar het Window waarop dit event betrekking heeft. Een applicatie kan bestaan uit meerdere windows. Het OS ziet een knop of een scrollbar overigens ook als een apart "window". Elk window moet daarom bij het opstarten het adres van een zogenaamde messagehandler opgeven aan het OS. Als er dan een event optreedt dan zal het Windows OS de messagehandler van het betreffende window aanroepen. Als argument geeft Windows dan een message datastructuur mee. Deze message bevat het message-id en enkele parameters. De messagehandler van een window bestaat dus uit een groot switch statement waarin bepaald wordt welke message het OS naar dit window stuurt en welke actie het window daarop moet ondernemen.

Samengevat kunnen we dus zeggen:

De meeste windows applicaties zullen nadat ze opgestart zijn niets anders doen dan wachten op messages van het OS en afhankelijk van deze message's bepaalde acties uitvoeren. Omdat de events die optreden het gedrag van z'n programma bepalen noemt men zulke programma's event-driven.

Het Windows operating systeem heeft dus geen object georiënteerde interface maar een procedurele interface. Het ligt natuurlijk voor de hand om een groep met classes te ontwikkelen die de complexiteit van de win32 API voor ons verbergen. Een verzameling bij elkaar behorende classes die gebruikt kunnen worden om bepaalde applicaties te ontwikkelen (in dit geval GUI = Graphical User Interface applicaties) wordt een framework genoemd. Er zijn meerdere bekende frameworks voor het ontwikkelen van Windows applicaties:

Behalve de frameworks bieden zowel Microsoft als Borland ontwikkeltools die het gebruik van deze frameworks aanzienlijk vereenvoudigen. Microsoft noemt deze hulptools Wizards. Zo heeft de Microsoft C++ ontwikkelomgeving een ClassWizard en een ApplicationWizard. De C++ Builder ontwikkelomgeving heeft vergelijkbare tools.

Je eerste windows GUI programma met behulp van C++ Builder.

Als je een applicatie ontwikkelt met behulp van het VCL framework maak je (bijna zonder dat je er erg in hebt) gebruik van overerving. Om een GUI applicatie te kunnen maken moet je het volgende doen:

Reageren op de muis.

Laten we het programma nu eens zodanig aanpassen dat dit programma reageert op bepaalde events die veroorzaakt worden door de gebruiker. Bijvoorbeeld op een muisklik. We willen het volgende:

Om dit mogelijk te maken moeten we een eventhandler schrijven de juiste acties uitvoert als op een muisknop wordt gedrukt:

Toevoegen van menubalk, knoppenbalk en statusbalk.

VCL bevat (zoals de naam al aangeeft) een groot aantal kant en klare componenten. Laten we eens kijken hoe je deze componenten kunt gebruiken om je programma van een menubalk, knoppenbalk en een statusbalk te voorzien. De menubalk en de knoppenbalk kunnen we gebruiken om commando's naar het programma te sturen. De statusbalk gebruiken we om informatie (hints) over deze commando's te laten zien.

Het toevoegen van de statusbar gaat als volgt:

Bepaalde commando's zullen zowel in de knoppenbalk als in de menubalk voorkomen. Om deze reden bied C++ Builder de mogelijkheid om commando's te definiëren in een ActionList. Later kun je deze commando's dan bij het definiëren van menu-items en knoppen gebruiken.

Hieronder volgt een overzicht van de commando's die we willen toevoegen:

Commando Menu In knoppenbalk? Beschrijving

Afsluiten

-

Nee

Sluit de applicatie.

Blauw

Kleur

Ja

Kleur het kruis blauw.

Groen

Kleur

Ja

Kleur het kruis groen.

Rood

Kleur

Ja

Kleur het kruis rood.

Voordat we deze commando's gaan toevoegen gaan we eerst de plaatjes voor de knoppen tekenen:

Deze plaatjes moet je opslaan in een zogenaamde ImageList component. Dit gaat als volgt:


De commando's kun je nu als volgt invoegen:

We kunnen nu de menubalk als volgt toevoegen:

We kunnen nu de knoppenbalk als volgt toevoegen:

Helaas staan de knoppenbalk en de statusbalk over het kruis heen getekend. Dit kunnen we oplossen door het kruis niet rechtstreeks op de TForm te tekenen maar gebruik te maken van de PaintBox component:

Het aanpassen van de kleur door op de muisknoppen te klikken is nu een beetje overbodig.

Toevoegen van dialog schermen.

Windows kent een aantal zogenaamde "common dialogs". Dit zijn standaard in Windows beschikbare dialogs. Laten we ons programma eens uitbreiden met de standaard dialog om een kleur te kiezen.

Het is ook mogelijk om zelf dialog schermen te ontwerpen.

Tips en Trucs.

Bij het gebruik van Builder zijn er een aantal dingen die heel handig zijn om te weten:

Meer informatie.

Op de volgende plaatsen vind je meer informatie over het gebruik van C++ Builder.