Programmation visuelle - Pages de Michel Deloizy
Transcription
Programmation visuelle - Pages de Michel Deloizy
Histoire…
1945 : John Von Neumann propose l'architecture interne d'un
calculateur universel (ordinateur)
1946 : construction de l'ENIAC à l'Université de Pennsylvanie
Programmation visuelle
Borland C++ Builder
Visual Basic
VBA
1949 : construction de l'EDVAC
1959 : conception de COBOL
1960 : conception de ALGOL (ALGOrithmic Language)
1965 : conception du langage BASIC (Beginners' All-purposes
Symbolic Instruction Code)
1969 : invention du langage PASCAL
1972 : conception du langage C
1975 : Bill Gates commercialise le langage BASIC. Création
de la société Microsoft.
1983 : conception du langage ADA (extension du PASCAL)
1984 : Le McIntosh d'Apple introduit une interface graphique
(menus, icônes...) et la souris
1984 : conception du langage C++
1995 : Windows 95 généralise l'interface graphique sur PC
architecture de Von Neumann
stockage des données sur disques magnétiques
1958 : IBM 7044
Langages
30 tonnes
160m2
mémoire constituée de 18 000 tubes à vide
puissance est équivalente à celle d'une petite calculette
actuelle
64 Koctets de mémoire
Programmation fonctionnelle
Découpage du programme en fonctions
Programme exécuté de manière séquentielle
Fonction principale (main)
Fonctions appelées
Analyse descendante du problème
1 point d’entrée
Parcours du programme par étapes successives dans
l’ordre défini par le programmeur
1 point de sortie
Interactivité faible
Adapté aux interfaces de type texte
1
Interfaces en mode texte
Interpréteur de commande attend la saisie de « mots »
L’interpréteur l’analyse
Le programme correspondant est cherché
Le programme est exécuté
Retour à l’interpréteur de commandes
Interpréteur de commandes masqué
Gestion disques
Gestions périphériques (imprimantes, réseaux, …)
Programmation d’une interface graphique
Complexe
Gestion des fenêtres
Gestion de la souris
Détection / Traitement des actions
Scrutation permanente des entrées
Forte dépendance du matériel
… à réaliser en plus de l’application
Faible portabilité
Utilisation d’icônes
Utilisation d’un dispositif de pointage (souris)
Utilisation réduite du clavier
L’utilisateur communique au système d’exploitation les
commandes grâce à des « clics », « double clics », « clic
droit », « glisser-déplacer », …
Le système d’exploitation exécute des tâches annexes en
parallèle :
mode com1:9600,n,8,1,p
cat readme.txt | more
Quand une commande est tapée et validée :
Interfaces en mode graphique
Traduit par l’interpréteur de commandes comme :
Sélectionner
Exécuter
Fonctions supplémentaires
Prendre le nom du fichier et …
Apports d’un système graphique
Pour l’utilisateur :
Confort
Visibilité
Comportement « généralisé » des programmes
Pour le programmeur :
Prise en charge de l’interface graphique
Prise en charge des organes de pointage
Chaque élément graphique peut recevoir ou communiquer
des informations
Gestion par le système d’exploitation
Exemples :
Clic sur un bouton
Mouvement d’une fenêtre, …
2
Principe de Windows
Toute action génère un ou plusieurs messages
File d’attente de Windows
Files d’attente de l’application (1 par thread)
hwnd :HWnd;
message:word;
wParam:word;
lParam : LongInt;
time : Longint;
pt:TPoint;
fenêtre destinataire
const. du message permet de l'identifier
paramètre codé sur un mot
paramètre codé sur un entier long
heure de la création du message
position de la souris en coord. écran
Déclenchement d’événements
Programmation événementielle
Structure d’un message :
L’application scrute en permanence les messages
Déplacement de la souris
Click gauche
Redimensionner une fenêtre
Top horloge
…
Les messages sont placés dans des files d’attente (FIFO)
Message
Messages traités par l’application
Événements
Associés aux objets
Déclenchés par messages
Exemple : Objet Button
OnClick
OnDoubleClick
…
=> fonctions associées aux objets
=> en C++ : méthodes de la classe
Conception d’une application
Définition de l’interface (ergonomie)
Feuilles
Boutons
Cases à cocher
Boites de dialogue
…
Paramétrage initial des objets
Événements à prendre en compte pour chaque objet
Écriture des fonctions correspondant
Un programme est constitué d’un ensemble de méthodes
appelées automatiquement lors de la réception des messages
3
Exemple : un convertisseur francs/euros
On souhaite réaliser un convertisseur Francs/Euros
Création de la fiche
Fichier -> Nouvelle application
Présentation :
Une acquisition dans la zone « Francs » entraîne une
conversion immédiate dans la zone « Euros » et vice versa
On quitte le programme en cliquant sur « Quitter » (après
confirmation de l’utilisateur)
Propriétés de la feuille
Name
Caption
BorderStyle
bsDialog
bsNone
bsSingle
bsSizeable
BorderIcons
biSystemMenu
biMinimize
biMaximize
biHelp
Project1
Form1
Unit1.cpp
Redimensionner la feuille (Form1)
Depuis la palette standard :
Mettre 2 Edit (zone d’édition)
Mettre 2 Label (texte)
Mettre un bouton
Outils de conception
Propriétés principales des objets
TEdit
TLabel
Name
Text
OnChange, OnKeyPress, OnExit (événements)
Name
Caption
TButton
Name
Caption
OnClick (événement)
4
Propriétés générales
TabStop
ShowHint
void SetFocus() :
void SendToBack() :
void BringToFront() :
void Close() :
L’élément est visible ou caché
Enabled
Permet l’affichage d’un menu contextuel lorsque la souris
est sur l’élément
Hint contient le texte à afficher
Visible
Autorise la sélection des éléments successifs d’une fenêtre
par l’appui de la touche TAB
TabOrder indique l’ordre du parcours
Méthodes
Donne le focus à l’objet désigné (fenêtre ou contrôle)
Envoie la fenêtre en arrière-plan
Amène la fenêtre au premier plan
Ferme une fenêtre
Appelle tout d’abord CloseQuery()
Termine le programme s’il s’agit de la fenêtre principale
L’élément peut déclencher un événement ou non
Exemple :
EdInput->Enabled = true;
Affichage de messages (erreurs, infos, …)
Affichage d’une nouvelle fenêtre
int MessageBox(char * Text, char * Caption, int Flags);
Flags :
MB_ABORTRETRYIGNORE
MB_OK
MB_OKCANCEL
MB_RETRYCANCEL
MB_YESNO
MB_YESNOCANCEL
Renvois :
IDOK
IDCANCEL
IDABORT
IDRETRY
IDIGNORE
IDYES
IDNO
Fenêtre créée sous l’IDE BCB (Nouvelle fiche) -> FormX
Faire apparaître la fenêtre (bloque l’application en cours) :
Revenir à la fenêtre initiale :
Res = FormX->ShowModal()
Mettre dans ModalResult une valeur non nulle
=> renvoyée dans Res
Les constantes suivantes sont définies :
mrNone (=0) par défaut, lors de l’appel de ShowModal
mrOk, mrCancel
mrAbort, mrRetry
mrIgnore
mrYes, mrNo
Exemple :
Application->MessageBox("Valeur incorrecte" , "Erreur", MB_OK);
5
Autre application : Tirage du Loto
Compléments au programme
On veux réaliser un programme réalisant un tirage de Loto
(aléatoire) avec une animation pendant le tirage :
Les 6 boules sont initialement rouges
À partir du lancement du tirage, les boules deviennent
vertes successivement, façon chenillard (une seule boule
verte à un instant donné, pendant 100 ms).
Chaque seconde, un numéro est tiré.
Lorsqu’un numéro est tiré, il est mis dans une boule qui
devient fixe, verte et contient la valeur du tirage.
Le processus continue jusqu’à l’obtention des 6 numéros.
Comment autoriser ou interdire un nouveau tirage pendant le
déroulement d’un tirage ?
Mettre un menu permettant :
de paramétrer la vitesse du chenillard
de paramétrer l’intervalle entre deux sorties de numéros
d’enregistrer le résultat dans un fichier texte
d’autoriser ou non un nouveau tirage
exemple
Travaux pratiques :
Faire un programme permettant de trouver le nombre
d’occurrences d’un mot se trouvant dans un fichier
Le mot sera communiqué dans une zone de texte
Le fichier sera choisi grâce à une boite de dialogue
Le résultat sera porté dans une Memo
On fera apparaître une barre de progression pendant la
recherche
L’utilisateur pourra choisir
De distinguer les minuscules/majuscules ou non
De prendre en compte uniquement les mots complets ou non
Graphiques
Utilisation de Canvas
Objet associé aux fenêtres ou au imprimantes
Écriture de texte (TextOut, TextRect, TextHeight, TextWidth)
Dessin de lignes (MoveTo, LineTo, …)
Définit les styles de traits, les couleurs, les polices
Affichage d’images
Le dessin peut être réalisé dans un Canvas associé à une
fenêtre, puis être reproduit sur imprimante en utilisant le
même code
Limites de dessin : (0,0) en haut à gauche
Form : ClientWidth, ClientHeight
Printer : PageWidth, PageHeight
6
Redessiner une fenêtre
Événement OnPaint :
La fenêtre a été masquée ou modifiée (partiellement ou
totalement) :
Par une autre fenêtre
Par une réduction ou agrandissement
Par un déplacement
Les contrôles sont redessinés automatiquement
Imprimante
Utilisation de Printer
TPrinter Prntr = Printer();
TRect r=Rect(200,200,Prntr->PageWidth–200,
Prntr->PageHeight–200);
Prntr->BeginDoc();
Prntr->Canvas->TextRect(r,200,200,Memo1->Lines->Text);
Prntr->EndDoc();
Repaint() : (méthode)
Force le réaffichage immédiat
Exécutable autonome
Projet->Options->Paquets :
Lieur :
Ne pas construire avec les paquets d’exécution
Ne pas inclure les informations de débogage
Ne pas utiliser la RTL dynamique
Compilateur :
Désactiver CodeGuard
Visual Basic
Version « Finale » (optimisation)
De Microsoft
7
Basic : Historique
Basic :
« Beginner's All-purpose Symbolic Instruction Code »
Inventé en 1964 par J.G. Kemeny et T.H. Kurtz
Langage généraliste dérivé du Fortran
But : permettre aux étudiants des filières non scientifiques
d'utiliser les ordinateurs
Fourni dans les premiers µOrdinateurs des années 1980 :
Basic interprété
Visual Basic : évolution 1
Basica
GW Basic
QBasic
Début du « RAD » (Rapid Application Development)
Grande facilité de développement
Construction graphique
Visual Basic 2 & 3 :
Basics Microsoft (versions DOS) :
1991 : Visual Basic 1
Grilles de propriétés
Programmation de bases de données DAO (objets d’accès
aux données)
OLE (Objet Linking and Embedding)
1995 : Visual Basic 4
Exécutables 32 bits
Contrôles active X
Bibliothèques de Classes
Visual Basic : évolution 2
1995 : Explosion d’Internet
Visual Basic 5 & 6 :
Développement pour le WEB
WebClasses
documents ActiveX
Dynamic HTML (DHTML)
2001 : Visual Basic .NET
Pas compatible avec les versions précédentes
Suppression de GOTO, GOSUB
Déclaration obligatoire des données
Langage objet
Perte de la simplicité initialement voulue par les concepteurs
8