===================================== DOCUMENTATION DE L'UNITE OGENVIEW.PAS ===================================== L'unité OGenView utilise les unités Graph, UConst et Udrivers. GENERALITES =========== Objets de type TGenView ----------------------- Les objets graphiques utilisés sont dérivés du type TGenView; ils ont les caractéristiques suivantes : _ ils représentent une partie rectangulaire de l'écran; celle-ci est caractérisée par les coordonnées du coin supérieur gauche et ses dimensions (largeur et hauteur); _ ils font partie d'un arbre dont les éléments sont aussi de type TGenView; ainsi ils possèdent un père (Owner), des enfants (Child) et des frères et soeurs formant une structure de liste doublement chainée; _ ils réagissent à différents évènements par l'intermédiaire de la procédure HandleEvent; ils transmettent les évènements à leurs enfants; _ ils peuvent être sélectionnés. Evènements ---------- Les évènements décrits par le type TEvent (unité UDrivers) sont de 2 types : - soit provoqués par l'utilisateur, par l'intermédiaire du clavier ou de la souris - soit provoqués par le programme lui-même sous forme de commandes. Les évènements clavier renvoient un code de touche. Les évènements souris sont provoqués par la pression ou le relachement d'un bouton; ils contiennent alors les coordonnées du pointeur souris. Les évènements commandes sont caractérisés par un code numérique. Objet TGenApp ------------- Les objets dérivés du type TGenView sont destinés à faire partie d'une structure d'arbre; la racine de cet arbre va jouer le rôle d'application. Il s'agira d'un objet dérivé de TGenView qui aura plusieurs fonctions particulières: _ définir le mode vidéo utilisé; _ initialiser le driver souris; _ mettre en route la boucle d'acquisition et de gestion des évènements qui sera le déroulement du programme; _ terminer le programme proprement. Le type général correspondant à cette notion est le type TGenApp. ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ DESCRIPTION DETAILLEE DES OBJETS -------------------------------- ====================== Objet ancêtre TGenView ====================== Il s'agit de l'ancêtre commun à tous les objets affichables : il représente une zone rectangulaire de l'écran. Tout affichage à l'écran doit être réalisé par l'intermédiaire d'un objet dérivé du type TGenView. Les objets dérivés de TGenView sont destinés à faire partie d'une structure d'arbre. ++++++++++ + Champs + ++++++++++ Prec,Suiv : PGenView; Objets précédent et suivant dans la liste des enfants du père; initialisation à nil; Owner : PGenView; Objet parent ou propriétaire; initialisation à nil; ce champ est mis à jour au moment de l'insertion dans Owner par utilisation de la méthode Insert; Child : Tête de liste des enfants; Origin : TPoint; Coordonnées du coin supérieur gauche dans le parent; initialisation à l'aide du constructeur; Size : TPoint; Largeur et hauteur de la zone couverte; initialisation à l'aide du constructeur; Etat : Word; Indicateur d'état; initialisation à stSelectable; indique si l'objet est affiché ou s'il est sélectionné. ExitCode : Byte; Code de sortie; utilisé par les fenêtres de dialogue; initialisé à 0; ErrorFlag : Byte; Code d'erreur; initialisé à 0; MouseInView : Boolean; Indique si la souris pointe dans la zone recouverte; MouseAspect : PMouseAspect; Aspect de la souris lorsqu'elle passe sur l'objet. ++++++++++++ + Méthodes + ++++++++++++ _ Initialisation et destruction ----------------------------- Constructor Init(X,Y,L,H:Integer); Constructeur qui met à jour les champs Origin et Size. Destructor Done; Virtual; Destructeur qui retire l'objet de son groupe propriétaire après avoir appelé le destructeur des enfants; en cas de surcharge, cette méthode doit toujours être appelée. _ Affichage --------- Procedure BackGround; Virtual; Procédure virtuelle destinée à dessiner le fond; appelée par Draw lors du 1er affichage, quand Etat indique que l'objet n'est pas encore visible. Procedure Draw; Virtual; Procédure d'affichage; elle appelle BackGround si l'objet n'est pas encore visible, met le champ Etat à jour pour indiquer que l'objet est visible, puis appelle la méthode Draw de chaque enfant. Procedure DrawBegin; Efface le pointeur de la souris s'il est dans la zone couverte par l'objet. Institue des caractéristiques d'affichage par défaut : écran limité à la zone couverte par l'objet, police par défaut, remplissage en gris clair, .... A utiliser avant tout affichage. Procedure DrawEnd; Rétablit le pointeur de la souris et les caractéristiques d'affichage par défaut : écran complet. A utiliser après DrawBegin, à la fin de l'affichage. _ Coordonnées ----------- Function Contains(P:TPoint):Boolean; Indique si le point P est à l'intérieur de l'objet. Procedure MakeGlobal(Src:TPoint; Var Dst:TPoint); Procédure de conversion des coordonnées données dans l'espace du Parent en coordonnées globales, c'est à dire en coordonnées écran. _ Gestion des évènements ---------------------- Function Exec:Byte; Cette fonction permet de focaliser tous les évènements sur l'objet. Elle est utilisée par l'application elle-même et par les boites de dialogue. Elle réalise les opérations suivantes : - ExitCode mis à 0 - insertion dans l'application - sélection - affichage par Draw - boucle d'attente des évènements et exécution de HandleEvent jusqu'à ce que ExitCode soit différent de 0 - désélection - renvoie de ExitCode comme résultat de la fonction Procedure HandleEvent(Var Event:TEvent); Virtual; Procédure de gestion des évènements; doit presque toujours être surchargée pour définir les différentes réactions de l'objet. A ce niveau, la procédure effectue les opérations suivantes : - réaction aux mouvements de la souris par mise à jour du champ MouseInView lorsque le champ Etat indique que l'objet est visible; - sélection en cas de clic si le bit stSelClic du champ Etat est mis - transmission des évènements aux enfants en commençant par celui qui est sélectionné. Procedure GetEvent(Var Event:TEvent); Virtual; Procédure de récupération des évènements. En général, cette procédure fait appel à la procédure du même nom du groupe parent. Procedure SetCommand(Command : Word); Procédure créant un évènement de type evCommand; le champ InfoPtr de l'évènement contient @self, c'est à dire un pointeur sur l'objet. _ Echanges de données ------------------- Function DataSize:Integer; Virtual; Indique la taille des données échangées par l'intermédiaire des procédures SetData et GetData. Doit être redéfinie. Procedure GetData(Var Rec); Virtual; Permet de récupérer des données contenues dans l'objet. Doit être redéfinie. Procédure utilisée par les éléments des boites de dialogue. Procedure SetData(Var Rec); Virtual; Permet d'entrer des données. Doit être redéfinie. Procédure utilisée par les éléments des boites de dialogue. _ Gestion des erreurs ------------------- Function GetErrorMsg:String; Virtual; Renvoie un message d'erreur en fonction de ErrorFlag Function IsValid:Boolean; Virtual; Indique si une erreur s'est produite en consultant le champ ErrorFlag et le champ ErrorFlag des enfants. _ Gestion des enfants ------------------- Function FindSelect:PGenView; Renvoie un pointeur sur l'enfant sélectionné. Procedure Insert(V:PGenView); Insère V dans la liste des enfants en mettant à jour les champs Owner, Prec et Suiv de V; si V est le premier objet inséré, le champ Child devient égal à V. _ Sélection --------- Function EstActif:Boolean; Indique si l'élément et ses parents sont sélectionnés. Procedure Select; virtual; Fait passer à l'état sélectionné, après avoir désélectionné le frère sélectionné. Procedure UnSelect; virtual; Quitte l'état sélectionné. ============= Objet TGenApp ============= Cet objet dérivé de TGenView représente une application. Il représente la racine de l'arbre des objets qui forment le programme. ++++++++++ + Champs + ++++++++++ Hérite de tous les champs de TGenView. Ajoute le champ ModeEcran égal à EGA ou VGA. ++++++++++++ + Méthodes + ++++++++++++ Constructor Init(mode:Integer); Appelle le constructeur hérité de TGenView puis initialise les drivers (écran, souris,...). La variable globale Application prend la valeur @self. L'objet occupe tout l'écran. Destructor Done; Virtual; Appelle le destructeur hérité de TGenView, ce qui provoque la destruction de toute la structure d'arbre, puis ferme les drivers. Function GetErrorMsg:String; virtual; Gère le message d'impossibilité d'initialiser le mode graphique. Procedure GetEvent(Var Event : TEvent); Virtual; En général, les méthodes GetEvent de tous les objets inclus dans l'application feront appel à cette méthode. Elle lit les évènements de tout type en faisant appel à la procédure ReadEvent de l'unité UDrivers. En cas de non évènement, elle appelle la méthode TempsMort. Procedure HandleEvent(Var Event : TEvent); Virtual; Appelle la procédure HandleEvent de TGenView, puis gère la commande cmQuit et la combinaison de touches Alt-X qui permettent de fermer l'application. Procedure Quit; Virtual; Cette procédure est appelée en réponse à la commande cmQuit. Elle fixe ExitCode à cmQuit et provoque ainsi l'arrêt de l'application. Procedure TempsMort; Virtual; Procédure appelée en cas de non évènement. Elle ne fait rien dans cet objet abstrait, mais elle permet de définir une tâche de fond. Procedure VideoInit; virtual; Initialise le mode vidéo choisi, appelé par Init. Procedure VideoDone; virtual; Quitte le mode vidéo choisi, appelé par Done . =========================== Deux procédures importantes =========================== _ Function ExecView(W:PGenView; Data:Pointer):Byte; ------------------------------------------------- Permet de focaliser tous les évènements sur l'objet W (qui est en général une fenêtre de dialogue). Si le pointeur Data n'est pas égal à nil, il doit pointer sur une structure de données reproduisant les structures d'échanges de données des enfants de W. Cette fonction renvoie exOk ou exAnnule. Les données validées sont récupérables par l'intermédiaire de Data. _ Procedure InsertView(W:PGenView); Permet d'insérer un nouvel objet dans l'application pendant l'exécution du programme. L'objet est automatiquement affiché et sélectionné. ======================================================== Constantes utilisées par les objets dérivées de TGenView ======================================================== Toutes les constantes utilisables pour définir des états, des commandes, des pointeurs souris et des codes d'erreur sont regroupées dans l'unité UConst. ================================= Arbre des descendants de TGenView ================================= Plusieurs unités de la bibliothèque définissent des descendants du type TGenView. Ceux-ci sont soit 'abstraits', c'est à dire non utilisables directement, soit 'concrets', c'està dire prêts à l'emploi. TGenView ----- TGenAPP ¦ +-- TGrDialog ----- TGrMsgWin [ODIALOG] ¦ ¦ ¦ +-- TGrReadWin [ODIALOG] ¦ ¦ ¦ +-- TGrConfWin [ODIALOG] ¦ ¦ ¦ +-- TGrMenuWin [ODIALOG] ¦ ¦ ¦ +-- TGrDirWin [ODIALOG] ¦ ¦ ¦ +-- TFTextGrWin [OVTEXT] ¦ ¦ ¦ +-- TGrHelpWin [OVTEXT] ¦ ¦ ¦ +-- TGrCalc [OGRCALC] ¦ +-- TAbsButton ---- TGrButton [ODIALOG] ¦ +-- TGrInput [ODIALOG] ¦ +-- TSelView ------ TMenuView [ODIALOG] ¦ ¦ ¦ +-- TDirView [ODIALOG] ¦ +-- TScrollView ---- TGrHelpView [OVTEXT] K.B. avril 1996