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