La lettre technique électronique Visual dBASE

Un service du Réseau mondial des développeurs (World Wide Developer Network)

Août 1996

Vol. 1 No. 3

Éditeur: http://www.wji.com/vdb/homepage.html - ftp.wji.com

Version langue française: http://www.fghoche.com/lettre_f.htm


Dans ce numéro


Table des matières

** Enquête lecteurs - Faites-vous entendre !
Avons-nous besoin d'une version 16 bits du prochain VdB ?
** De l'Editeur - par A.A.Katz
Un nouveau Visual dBASE à la Borland Developers' Conference
** Nouvelles d'Anaheim
Un nouveau Patch attendu?
Un nouveau produit Intranet compatible VdB
Notre Newsgroup UseNet bien à nous
** Les sessions - par Charles Overbeck
L'explication ultime sur les Sessions et comment les utiliser, par l'un des développeurs de Visual dBASE.
** Un contrôle personnalisé bien pratique - par Romain Strieff
Le contrôle personnalisé de Romain donne accès au pointeur de souris en forme de main.
** Ressources - par Bill Gilmore
Livre : un livre non-VdB intéressant !
** La filière interne - par Charles Miedzinski
Participez à la bêta Visual dBASE 6.0
Informations complémentaires

Enquête lecteurs

Voici l'occasion de vous faire entendre sur des sujets qui sont importants pour nous tous. Ceci est la première enquête du VdDN. Si vous ne participez pas, vous ne pourrez pas vous plaindre que votre avis a été ignoré ! Les résultats de l'enquête seront publiés dans le prochain numéro. Ils seront également transmis à Borland.

Le sujet : 32 bits uniquement ? Quand ?

La plupart des éditeurs de logiciels ont un dilemme à résoudre: Le marché des PC se dirige inexorablement vers le 32-bit. Si un éditeur investit de grandes sommes d'argent en R&D dans le développement d'outils 16 bit, ils risquent de se retrouver coincés avec un produit dépassé. Mais en même temps, si les systèmes d'exploitation 32 bits ne s'imposent pas assez vite, ils risquent de mettre sur le marché un produit pour des applications qui ne peuvent être déployées.

Question : Dans combien de temps (en nombre de mois) estimez-vous être en mesure de ne livrer que des applications 32-bits-uniquement (Win 95, Win NT) à vos clients actuels ? Répondez "0" si vous pouvez le faire actuellement.

Nombre de mois : ___

Commentaires:

____________________________________________

____________________________________________

____________________________________________

Vos commentaires sont les bienvenus !



Éditorial - Alan Katz

A.A.Katz, éditeur de la Lettre technique VdDN, est le CEO de KSoft, Inc., et développeur de progiciels et logiciels applicatifs. Il forme des programmeurs Visual dBASE, écrit pour plusieurs publications et est membre de TeamB/Visual dBASE.

Borland Developers Conference

WOW!! La prochaine Version of VdB.

Si vous n'avez pas participé à BDC, à Anaheim, en Californie, la dernière semaine de juillet, vous avez manqué un moment exceptionnel. Le contenu était très riche, avec notamment des présentations par François Ghoche, Alan Frazier, Jim Sare, Keith Chuvala, Craig diGeorgi, Mike Antonovich, Marilyn Price, Ken Chan, Len Dozois, Ken Mayer, et quelques autres (y compris votre éditeur).

Je doute que Visual dBASE n'ait jamais été représenté à la BDC avec une telle variété de sujets, ou une telle profondeur. Le contingent Borland comprenait les "génies résidents", Randy Solton, Mike Gardner, Robert Pirani, Charles Johnson, Ken Chan, Key Mayer, Charles Miedzinski and Paul Mahar (l'auteur du livre : Visual dBASE Unleashed). VdDN est fier de noter au passage que beaucoup de ces noms ont figuré parmi les auteurs de notre magazine online.

Sur une note plus personnelle, je voudrais remercier tous les développeurs Visual dBASE qui ont assisté à la conférence. Cela a été fantastique de passer un moment avec Dan Bernard, John Fried, John Staub, Mike Titsch, Sharon Phillips et tous les autres participants dont les noms nous étaient si familiers sur le forum CompuServe. Ce que je n'avais pas prévu, c'était tous ces développeurs talentueux, et impliqués, que nous avons rencontrés pour la première fois. Avant BDC, je ne m'étais pas rendu compte à quel point la communauté online Visual dBASE était devenue une grande famille.

La grande nouvelle

Trêve de discours. Sans aucun doute, l'événement le plus important de la conférence a été la présentation en avant-première de Visual dBASE 6.0 (ou Visual dBASE 32 - les deux appellations ayant été employées). lors de deux présentations - par Ross Dembecki et Robert Pirani - les participants ont pu avoir une idée des époustouflantes nouvelles fonctionnalités prévues pour la prochaine version de Visual dBASE.

Nous avons été prévenus qu'il s'agissait de logiciel en pré-bêta, et que la version finale pourrait ne pas inclure certaines des fonctionnalités envisagées, tout autant qu'elle pouvait en comprendre d'autres additionnelles.

Ces présentations ont marqué un changement de politique fondamental de la part de Borland, qui avait jusque là une politique stricte de non-annonce ou divulgation de fonctionnalités de nouveaux produits avant disponibilité.

Un dBASE arrivé à maturité industrielle

Ma première et plus forte impression a été que Visual dBASE va acquérir une nouvelle puissance remarquable, qui le propulsera au premier rang des plates-formes de développement (en particulier Client/Serveur) sans pour autant sacrifier la facilité et la vitesse auxquelles nous avons été habitués avec VdB.

Le modèle objet est complété, Crystal devient un souvenir, l'accès aux bases de données C/S devient partie intégrale du noyau du langage OO, de nouveaux contrôles permettent de combler les quelques failles restant dans VdB 5.5, et des possibilités importantes ont été ajoutées au niveau du langage et des fonctionnalités bases de données afin de faciliter la migration des développeurs Clipper et FoxPro à Visual dBASE.

Voici une liste partielle, de mémoire:

Classe Report...

Sans aucun doute la nouvelle fonctionnalité la plus importante VdB 6.0 sera la classe Report. Elle remplacera l'insuffisamment intégré Crystal Reports. La nouvelle classe vous propose de développer des états et rapports à l'aide d'outils similaires au Concepteur de Formulaires. Rien d'extérieur à VdB, vos rapports VdB 6.0 seront entièrement sous-classables, et construits à l'aide d'outils WYSIWYG bidirectionnels. Ils peuvent donc être modifiés visuellement, ou par le code source dBASE, et être entièrement intégrés à vos applications, tout comme les formulaires et les menus.

Autres classes...

La classe Data Grid remplace le Browse. entièrement programmable, vous pouvez adresser chaque cellule individuellement (couleur, par exemple), définir une colonne comme combobox, checkbox, radiobutton ou autre contrôle.

La classe Toolbar permet d'ajouter des barres d'outils à vos menus.

La classe Container : Cette classe imbricable permet de regrouper des pushbuttons, editfields ou autres contrôles, afin de créer de nouvelles classes complexes avec positionnement relatif et encapsulation de méthodes.

Exemple: Entourez au lasso vos zones de saisie clients, vos boutons Ajouter, Chercher, Sauvegarder, Abandonner, ainsi qu'une classe de requête clients, et même des rapports, le tout en un seul container "clients". Sous-classez le ensuite pour créer, par exemple, un container "étudiant" ou "distributeur".

Il vous suffit ensuite de faire un glisser/lâcher du composant sur un formulaire lui-même sous-classé, avec logo, boutons de navigation et menu. Un clic de souris, et vous avez un formulaire "client", "étudiant" ou "distributeur". Les possibilités en RAD (développement rapide d'applications) sont quasiment infinies.

Classe Notebook : une classe multipage à onglets de style Win 95. Caractéristique intéressante, le changement de page est automatique.

Classes List and Outline : Également familières aux utilissateurs Win 95, ces classes permettent différents types de sélection et navigation dans des arbres hiérarchiques, similaires aux arborescences de l'explorateur Win 95.

Tables and Données...

Un nouveau .DBF.
Mais oui, un tout nouveau format .DBF format, qui apporte un dictionnaire de données et l'intégrité référentielle au niveau du moteur, des clauses picture, des règles de validation, et même des calculs, le tout dans vos tables mêmes.

Lorsque vous établissez les datalinks, les contrôles de votre formulaire prennent en compte ces caractéristiques automatiquement par défaut, même si elles peuvent être contournées.

Ce qui est également remarquable, c'est que cette nouvelle structure est rétro-compatible. Cela veut dire que ces nouvelles tables devraient pouvoir être utilisées dans les versions précédentes de dBASE sans difficultés. Bien entendu, lorsqu'employées avec des versions antérieures de dBASE ou d'autres langages Xbase, vous ne pourrez pas accéder aux nouvelles fonctionnalités de la 6.0.

Classes Query et Rowset.
Visual dBASE 6.0 apporte l'OO à vos données. Les requêtes deviennent des classes héritables, de même que les Sessions et les "Rowsets" (le résultat d'une instruction Select sur le nouvel objet Query).

La plupart des commandes du langage de manipulation de données de Visual dBASE (DML - data manipulation language) aura également des équivalents en notation à point (tout comme les tableaux/arrays en 5.5), ce qui rendra la manipulation de données plus explicite et permettra de l'encapsuler avec vos données dans les requêtes, rapports et formulaires.

Cela a des implications importantes pour la portabilité SQL. Votre noyau de code peut (et devrait) être écrit pour utiliser de stables locales ou des serveurs SGBDR sans modification.

Si vous le souhaitez, vous pouvez toujours continuer à utiliser le DML xbase traditionnel. Ces modifications ne devraient pas remettre en cause les programmes existants.

Nouveaux types de données.
Types de données Long, Double, Autoincrement et TimeStamp faciliteront les liaisons avec d'autres logiciels, effectuer des réplications de données et protéger contre les doublons.

Index CDX.
Pour les développeurs martyrs Clipper et FoxPro qui recherchent toujours la plate-forme de développement Windows idéale, Visual dBASE 6.0 proposera le support natif des index .CDX, compatible avec les index FoxPro, Comix, SIX et Apollo (Successware .CDX drivers). Les programmeurs Clipper et Fox pourront partager leurs données entre anciennes applications et nouvelles applications Visual dBASE...

Commandes obsoletes retirées.
Dites adieu aux @ SAY...GET et autres commandes obsolètes dBASE, qui n'ont plus rien à faire dans l'environnement Windows et celui ce la POO. Un petit effort contre l'inflation de commandes (dBloat) !

Nouveaux opérateurs de type Clipper et C

++,--
Opérateur d'incrémentation et décrémentation (x = x+1 devient x++)
:=
Operateur d'affectation. Permet de distinguer entre comparaison (if x = y) et affectation (Form.x := 1)
//
Commentaires de type C

Méthodes d'Accès/Affectation.
Les Méthodes d'Accès/Affectation permettent aux programmeurs de créer leurs propres événements. Lorsqu'une propriété est modifiée, une méthode est activée. Cette nouvelle fonctionnalité permet la création de vos propres contrôles personnalisés à partir de zéro.

Comme pour toutes les autres fonctionnalités décrites ici, il n'y a aucune garantie de la part de Borland que l es Méthodes d'Accès/Affectation figureront dans la version définitive. Cependant, si elles y sont, elles constitueront de puissants outils dans l'arsenal des développeurs VdB.

Support externe...

Support complet des OCX/Active-X, y compris les callbacks.

Support du format graphique JPG.

Aucune information de la part de Borland en ce qui concerne une version 16-bit équivalente à Visual dBASE 32. Nous savons que la possibilité en est sérieusement étudiée, mais il n'y a pas eu de décision définitive à ce sujet.

Communiquez votre avis à Borland. Répondez à notre enquête lecteurs dans ce numéro. Faites-nous savoir où en sont vos clients en termes de versions 16 et 32 bits, et nous feront passer l'information.



Nouvelles

Dateline: Anaheim California

24 juillet1996

Patch pour VdB

Ross Dembecki a annoncé lors d'une session à la BDC à Anaheim que Borland rendra disponible un patch 5.5b Visual dBASE. Il est probable que ce patch permettra au moins de remédier aux problèmes de fuite de ressources de la 5.5a, parmi d'autres items non spécifiés. Aucune date de disponibilité n'a été annoncée.

Nouveau produit Intra/Internet

Borland a présenté "IntraBuilder", un nouveau produit Intranet, lors de la Borland Developers' Conference. En tant qu'environnement de développement pour la saisie de données /requettage, IntraBuilder apporte des capacités RAD similaires à Visual dBASE, ainsi que la génération de code en Javascript, HTML en sortie et un module pour le côté serveur qui utilise NSAPI ou ISAPI pour des requêtes serveur Web live en temps réel et de la saisie de données.

Les développeurs Visual dBASE devraient y jeter un coup d'oeil. Ce produit partage le même moteur bases de données que VdB. Cela veut dire que nous avons une compatibilité à 100% au niveau des données entre les deux produits. IL s'agit d'une opportunité de synergie. Le langage de Netscape, JavaScript, a pas mal de syntaxe en commun avec Visual dBASE. A vrai dire, la rumeur court que certains des programmeurs Netscape qui ont développé JavaScript ont été membres de l'équipe de développeurs de dBASE 5.0 pour Windows. Il devrait s'agir d'une étude aisée pour les programmeurs Visual dBASE expérimentés.

Dateline : Internet.

Visual dBASE a son propre Newsgroup!

Visual dBASE possède à présent son propre Newsgroup UseNet, grâce aux efforts louables de Richard Hyatt. Il est actif et sérieusement international. Faites un tour à :

comp.databases.visual-dbase



Les sessions - par Charles Overbeck

Charles Overbeck est un membre clé de l'équipe de développement de Visual dBASE. Bien qu'il en décline le mérite avec modestie (certains éléments existaient apparemment avant qu'il ne prenne cela en charge), Charles est la cheville ouvrière derrière la nouvelle classe report de dBASE 6.0. A notre avis, lorsque les programmeurs VdB auront eu l'occasion d'y mettre les doigts, Charles va devenir un garçon très populaire.

L'article suivant concerne les Sessions, l'une des fonctionnalités les plus évasives, bien que des plus puissantes de Visual dBASE. Les sessions ont été conçues pour fonctionner de manière tellement automatique et transparente que beaucoup d'entre nous ont du mal à les contrôler dans nos applications.

Les explications claires de Charles concernant CREATE SESSION devrait apporter quelque lumière sur la commande Visual dBASE la plus mal comprise.

Sessions dans Visual dBASE

Les Sessions constituent une fonctionnalité importante et puissante de Visual dBASE. Avec les sessions, vous pouvez facilement avoir plusieurs instances du même formulaire, chaque instance positionnée sur un enregistrement différent, et sans affecter les données affichées sur les autres instances du formulaire. En effet, vous pouvez ainsi simuler plusieurs utilisateurs en réseau sur une seule machine.

Cependant, en fonction des messages sur CompuServe et sur UseNet, il semble que les sessions restent une sorte de mystère pour de nombreux utilisateurs. Cet article va tenter de clarifier le fonctionnement des sessions et comment elles devraient être employées, vous permettant de mettre à profit leur puissance.

Qu'est-ce qu'une session?...

Une session est un objet comprenant :

  1. Un ensemble de zones de travail
  2. L'état de la plupart des commandes SET.

L'environnement de chaque session est complètement indépendant de l'environnement des autres sessions. Par exemple, si vous êtes dans la session #2, et que vous déplacez le pointeur d'enregistrement vers l'enregistrement #5 dans Customer.dbf, cela n'aura pas d'effet sur le pointeur d'enregistrement de Customer.dbf dans la session #1.

Autre exemple : si SET TALK est OFF en session #3, cela n'a absolument pas d'effet sur la valeur de TALK en session #1.

Il peut être utile de voir une session comme un utilisateur diffèrent sur un réseau local. Si vous verrouillez un enregistrement d'une table dans une session, vous ne pouvez pas verrouiller ce même enregistrement dans une autre session jusqu'à ce que la première session relâche le verrou.

L'aide en ligne de Visual dBASE fournit la liste des commandes SET qui sont mémorisées pour chaque session dans la rubrique "CREATE SESSION".

Pourquoi employer des Sessions?

Les sessions permettent d'encapsuler vos formulaires. Elles rendent chaque formulaire indépendant de tous les autres, facilitant ainsi la cohabitation de plusieurs instances de la même classe de formulaire. Vous pouvez avoir différents formulaires accédant à la même table, avec chaque formulaire positionné sur un enregistrement différent. En général, la navigation parmi les enregistrements dans l'un des formulaires n'affecte pas la navigation dans les autres formulaires.

Comment est créée une session ?

Lorsque Visual dBASE est lancé, vous êtes automatiquement dans une session. IL s'agit d'une session particulière, que nous appelleront la "Startup Session".

Cela est important car les nouvelles sessions créées par l'utilisateur dérivent leur environnement par défaut de la Startup Session (nous y reviendrons plus loin).

Vous pouvez générer une nouvelle session pour les formulaires et les rapports à l'aide d'une commande CREATE SESSION, ou bien en cochant la case Session dans l'écran des Propriétés du Bureau.

Que fait exactement la case Session dans l'écran des Propriétés du Bureau ?

Il s'agit de la représentation visuelle de la rubrique Sessions dans le fichier Dbasewin.ini. Si la valeur de la rubrique Sessions dans le fichier INI est différente de 0, alors les formulaires et BROWSEs lancés par le biais de l'interface utilisateur de Visual dBASE seront précédés d'une commande CREATE SESSION. Si la rubrique Sessions est à 0, alors la commande CREATE SESSION n'est pas générée avant les commandes concernées.

Exemple:

Avec la case Sessions cochée.

CREATE SESSION
DO C:\VISUALDB\SAMPLES\ANIMALS.WFM
CREATE SESSION
USE D:\VISUALDB\SAMPLES\ANIMALS.DBF
BROWSE

Si la case Sessions n'est pas cochée, alors dans les deux cas ci-dessus la commande CREATE SESSION n'est pas générée, mais les autres lignes le sont.

Comme la case à cocher Sessions n'affecte que les formulaires et BROWSE's générés par l'intermédiaire de l'interface utilisateur, cette case n'a absolument aucun effet sur les formulaires et rapports lancés à partir d'un programme. Lorsque vous lancez un formulaire à partir d'une application, le fait qu'il apparaisse dans une nouvelle session ou pas dépendra de la présence d'une commande explicite CREATE SESSION dans votre code.

Pour les rapports et états, néanmoins, les sessions n'ont pas d'effet même si vous lancez le rapport à partir d'un programme. Si la rubrique Sessions dans l' INI est différente de "0", la commande REPORT FORM lance le rapport dans une nouvelle session. Sinon, le rapport est lancé dans la session courante.

Ainsi, si vous voulez que les rapports dans applications compilées s'exécutent dans leurs propres sessions, vous pouvez ajuster en conséquence la rubrique Sessions dans le fichier INI de votre application. Par exemple, si votre application compilée s'appelle MYAPP.EXE, ajoutez alors les lignes suivantes dans un fichier MYAPP.INI :

[Settings]
Sessions=1

Si vous ne voulez pas que Visual dBASE crée une nouvelle session chaque fois qu'un rapport est lancé, ces lignes devraient alors être dans MYAPP.INI :

[Settings]
Sessions=0

Que se passe-t-il lorsqu'une session est créée ?...

  1. Un nouvel ensemble de zones de travail vides est disponible.
  2. La valeur des commandes SET est initialisée aux valeurs de la Startup Session (valeurs au démarrage initial de Visual dBASE)

Remarquez que ce ne sont pas nécessairement les mêmes valeurs SET que celles qui sont actives à ce moment.

Par exemple, supposons que TALK soit à ON par défaut lorsque vous lancez Visual dBASE. Alors :

? set('talk') && returns ON
set talk off && Startup Session's value of talk is now OFF
create session
? set('talk') && returns ON--the a copy of the initial value of the Startup Session

Compteurs de référence...

Les sessions sont des Compteurs de référence.

Lorsqu'une commande Create Session est émise, la session nouvellement créée a un Compteur de référence à 0 (il n'y a pas de formulaire, BROWSEs ou rapports qui puissent "référencer" cette session). Chaque fois que vous ouvrez un formulaire, lancez un rapport ou tapez un BROWSE (note : la commande, pas la classe Browse), un compteur est incrémenté de 1 dans la session. Lorsque les formulaires sont relâchés (released), les rapports terminés ou les BROWSEs refermés, le compteur de référence de la session est décrémenté de 1.

En fait, les sessions gardent la trace du nombre d'"objets" qui sont créés dans la session concernée.

Quand une session est-elle refermée ?...

une session est relâchée lorsqu'un changement de session intervient, et que le compteur de référence de la session concernée est à 0.

Exemple :

create session && New session has reference count of 0
f = new form()
f.open() && form references the new session, so new session has
&& reference count of 1
f.release() && session's reference count is decremented to 0.

La Startup Session n'est jamais refermée tant que Visual dBASE est actif. Elle n'est relâchée que lorsque vous quittez VdB.

Qu'est-ce qu'un changement de session ?...

Un changement de session se produit simplement lorsque vous basculez d'une session dans une autre session. Cela est important à comprendre, car c'est lorsqu'un changement de session se produit que le compteur de référence de la session active est évalué. Si le compteur de référence de la session courante est à 0, cette session est relâchée.

Quand est-ce qu'un changement de session se produit ?...

Il y a 3 possibilités pour qu'un changement de session se produise :

1. La commande CREATE SESSION.

Cette commande crée une nouvelle session, qui devient la session active. Puisque vous être dans une nouvelle session, un changement s'est donc produit.

2. Activer un formulaire/une fenêtre.

Puisque les formulaires référencent les sessions, il est logique que lorsqu'un formulaire a le focus, la session du formulaire devienne la session active.

Ainsi, si vous êtes sur Form1 qui référencie la Session1, et que vous cliquez sur Form2 qui référencie la Session2, un changement de session se produira, et Session2 deviendra la session courante.

Notez que le fait de cliquer à nouveau sur la fenêtre active ne provoquera pas d'autre changement de session. Le changement de session se produit seulement lorsque le focus passe d'un formulaire à un autre.

3. Exécuter une méthode/un événement d'un formulaire.

Puisqu'une méthode d'un formulaire peut accéder à des tables qui font partie de la session référencée par le formulaire, la session doit être active lorsque vous exécutez une méthode quelconque du formulaire. Après la fin de l'exécution de la méthode, la session précédente est restaurée. Ainsi, deux changements de sessions peuvent se produire lorsque vous exécutez une méthode d'un formulaire. Un premier changement lorsque vous exécutez la méthode du formulaire, et une autre lorsque la méthode termine son exécution.

Que se passe-t-il lorsqu'une session est relâchée ?

Toutes les tables ouvertes dans la session sont fermées. Vous n'avez pas besoin de fermer explicitement les tables.

Un exemple simple :

create session
f = new form()
f.view = 'animals.dbf'
f.open() && After the open, you are back in the Command window and
         && in the Startup Session
use animals exclusive && Fails, because Animals is open in
                      && another session.
f.close()
use animals exclusive && Still fails, because the session
                      && and its table are still open
f.release() && Session referencing f will be released.
use animals exclusuve && Works, because Animals was automatically
                      && closed when the other session was released

Déboguer les sessions...

J'estime que le l'outil le plus simple à utiliser pour déboguer les sessions est le Navigateur. Bien que le Navigateur référencie la Startup Session (cf. ci-dessous), le Navigateur indique quelles sont les tables ouvertes (dans n'importe quelle session) ou fermées. Si une table est ouverte, son nom est en italiques.

Par exemple:

create session
use animals && note how animals becomes italicized in the Navigator
use && Animals is no longer italicized in the Navigator
use animals && animals is italicized again
browse && animals is still italicized, even if you switch
       && to another window.

Cela veut dire que lorsque vous fermez le Browse, la session référencée par le Browse a été relâchée, et la table Animals a été fermée.

Le Navigateur et la fenêtre de Commande...

Le Navigateur et la fenêtre de Commande référencient la Startup Session. Lorsque vous cliquez sur l'une de ces deux fenêtres à partir d'une autre fenêtre, il se produit un changement de session et la Startup Session devient active.

Même si vous pouvez taper Create Session dans la fenêtre de Commande, cette nouvelle session n'est pas référencée dans la fenêtre de Commande. Les commandes que vous y tapez s'exécuteront toujours dans la Startup Session.

Cela explique le comportement suivant :

create session && creates a new session (call it Session1),
               && with a reference count of 0
use animals    && open a table

Rapports et sessions...

Les rapports et états peuvent être différents des formulaires par le fait qu'une session peut être automatiquement créée pour le rapport. Si la rubrique Sessions dans Dbasewin.ini (ou dans le fichier INI dont le nom correspond à celui de votre exécutable Visual dBASE) égale 1, alors lorsque vous lancez l'exécution d'un rapport à l'aide de la commande REPORT FORM, les tables du rapport seront ouvertes dans une nouvelle session.

Un bogue...

La version actuelle de Visual dBASE (5.5a) a un problème lorsque vous invoquez la méthode Release() d'un formulaire pendant l'exécution de la méthode ReadModal() du formulaire. Release() ne fera alors rien du tout (même pas fermer le formulaire). Si vous trouvez qu'une session est encore ouverte alors qu'elle ne le devrait pas, cela pourrait être la cause du problème. Pour vous assurer que la session est fermée (et que le formulaire est vraiment relâché), invoquez la méthode Release() du formulaire lorsque vous n'êtes plus dans ReadModal().

Exemple:

create session
f = new form()
p = new pushbutton(f)
p.onclick = {;form.release()}
f.readmodal() && Click on the pushbutton--nothing happens.
f.release() && form and session will now go away.

Notez qu'il n'y aurait pas eu de problème si vous aviez invoqué la méthode Open() du formulaire, au lieu de la méthode ReadModal().

Par Exemple :

Les exemples sont tapés interactivement dans la fenêtre de Commande.

create session
create session
create session

Combien de nouvelles sessions existent après avoir tapé les 4 commandes ci-dessus ?

Réponse : une seule (1).

Rappelez-vous que chaque Create Session provoque un changement de session. Et comme chaque session nouvellement créée à un compteur de référence de 0, cela veut dire que chaque Create Session relâche les sessions précédentes (sauf pour la Startup Session, qui n'est jamais relâchée).

Create session
f = new form
f.view = 'animals.dbf'
p = new pushbutton(f)
p.onclick = {;f2 = new form(); f.open()}
f.open()

Fermez le premier formulaire. Comme un autre formulaire référencie la session, cette dernière n'est pas fermée et Animals.dbf reste ouvert.

Fermez le second formulaire. Il ne reste plus de référence à la session, elle est donc relâchée, et Animals.dbf est fermée.

Note de l'Editeur : Si vous êtes nouvel utilisateur de Visual dBASE, vous n'êtes peut-être pas au courant du fait que le Concepteur de requêtes génère les commandes "Close Databases/Create Session". Si vous vous retrouvez dans une session inattendue, cela pourrait en être la cause. Éliminez la ligne Create Session de votre fichier .QBE, à moins que vous ne vouliez vraiment qu'une session soit créée chaque fois qu'un formulaire soit ouvert avec cette requête.



Un contrôle personnalisé bien pratique - par Romain Strieff

Dans son métier diurne, Romain contribue à la circulation efficace des trains dans son Luxembourg natal. Mais sa réelle passion réside dans son activité de consultant, réalisant des applications Visual dBASE. Romain peut être rencontré (en général à des heures inhabituelles pour les fuseaux horaires américains) lorsqu'il prodigue une assistance experte sur le forum CompuServe en tant que membre du TeamB.

Hand.Wfm

Coupez/collez le code suivant dans un nouveau fichier .WFM. A l'aide des appels futés de Romain à WinAPI, votre pointeur de souris va changer en fonction de sa position à l'écran.

--- Coupez ici -------------------------------------------------------------------------

extern CHANDLE LoadLibrary(CPTR) Kernel
extern CVOID FreeLibrary(CHANDLE) Kernel
extern CHANDLE SetCursor(CHANDLE) User
extern CLOGICAL DestroyCursor(CHANDLE) User
extern CHANDLE SetCapture(CHANDLE) User
extern CVOID ReleaseCapture() User
extern CHANDLE LoadCursorInt(CHANDLE, CLONG) User From "LoadCursor"

** END HEADER -- do not remove this line*
* Generated on 08.08.1996
*
parameter bModal
	local f
	f = new MPOINTERFORM()
	if (bModal)
		f.mdi = .F. && ensure not MDI
		f.ReadModal()
	else
		f.Open()
	endif

CLASS MPOINTERFORM OF FORM
	this.OnOpen = CLASS::FORM_ONOPEN
	this.OnClose = CLASS::FORM_ONCLOSE
	this.Text = "Mouse Pointer Test"
	this.Width = 49.333
	this.Height = 5
	this.Top = 0
	this.Left = 0

	DEFINE TEXT TEXT1 OF THIS;
	PROPERTY;
	Text "This is a test of a form with a clickable text object;
	that automatically changes the cursor to a hand when;
	moved over it.",;
	Width 47.834,;
	Height 2.7646,;
	Top 0.7051,;
	Left 1.332,;
	FontBold .F.,;
	Alignment 9

	DEFINE TEXT HAND1 OF THIS;
	PROPERTY;
	OnOpen {; this.hCursor = LoadCursorInt(FORM.hLibInst, 1)},;
	FontUnderline .T.,;
	OnLeftMouseUp CLASS::GOTOLINK,;
	ColorNormal "R+/BtnFace",;
	Text "hand",;
	Width 4.5,;
	Height 0.7656,;
	Top 1.4688,;
	Left 31.166,;
	FontBold .F.,;
	OnMouseMove CLASS::MOUSEMOVE

	Procedure MouseMove(nFlags, nCol, nRow)		
		&& If cursor is over control
		If nCol >= 0 .AND. nCol <= this.Width .AND.;
			nRow >= 0 .AND. nRow <= this.Height
			SetCursor(this.hCursor)
			SetCapture(this.hWND)
		Else && Revert to default cursor
			ReleaseCapture()
		EndIf

	Procedure FORM_OnOpen
		&& Specify your DLL here
		this.hLibInst = LoadLibrary("DB550009.DLL" + Chr(0))
		* If the cursor ID is a string, replace the above LoadCursorInt;
		call with LoadCusror and uncomment the LoadCursor EXTERN;
		statement in the form header.

	Procedure FORM_OnClose
		&& Must destroy loaded cursors on form close
		DestroyCursor(this.Hand1.hCursor)
		FreeLibrary(this.hLibInst) && Must free the DLL on form close

	Procedure GoToLink
		msgbox("Here would be the link")

ENDCLASS



** Ressources - par Bill Gilmore

Bill Gilmore est un ancien programmeur Clipper (ou plutôt comme pas mal d'entre nous, encore un programmeur Clipper) qui a choisi Visual dBASE comme environnement de développement principal sous Windows. Il vit dans la région de New York et est souvent présent sur le forum CompuServe.

Livre - Object Oriented Technology - A Managers' Guide par David A Taylor

La technologie orientée objet est entourée d'un halo de mystère, peut-être parcequ'il s'agit d'une idée relativement récente, peut-être à cause de son statut de "gouru". Ce livre est recommandé comme base pour la compréhension de la technologie sans être lié à un seul langage.

Un autre angle de vision...

Pour paraphraser une critique de David Trowbridge "Il est difficile de suffisamment louer ce livre. L'auteur guide pas à pas vers une compréhension solide des concepts sur lesquels repose la technologie orientée objet. Il explique la signification de ces concepts pour les utilisateurs potentiels et les intégrateurs de systèmes orientés objets. Il conclut par un tableau dépourvu de passion des avantages et des inconvénients de cette technologie."

Extrait de la table des matières...

Le livre a plus de 140 pages. Les marges importantes contienent des citations du texte. Vous pouvez avoir un avant-goût de style de ce livre à partir de certains extraits des citations en marge des des deux premiers chapitres

Beating the Software Crisis

Most software is delivered late and over budget
Small programs can be built as a single procedure
But this approach doesn't work for larger systems
Larger systems require modular programming
Subroutines support modular programming
But modular programming requires discipline
Structured programming provides that discipline
Functional decomposition plays a central role
Structured programming is useful but limited
CASE automates structured programming, ... but doesn't go far
enough
4GLs can generate programs automatically ... they work only form
simple and familiar problems
Modularization has focused on procedures
Subroutines can share small amounts of data,
But sharing too much data leads to problems,
The solution lies in hiding information

Le livre est rempli de diagrammes instructifs et d'exemples. Le meilleur se trouve au chapitre trois, Objects: natural Building Blocks. "The basic building block out of which all living things are composed is the cell. Cells are organic packages that, like objects, combine related information and behavior" Son modèle cellulaire est passionnant !

Deux sections importantes : Glossary et Summary of Key Concepts. Elles sont toutes les deux claires et concises

Le livre coûte $21.50. Achetez-le et gagnez en connaissance.



La filière interne - par Charles Miedzinski

Charles est le très respecté Wizop du forum Visual dBASE sur CompuServe. Il est Consulting Engineer en Visual dBASE Tech Support. C'est aussi un ancien d'Ashton Tate (il est avec dBASE depuis longtemps !) et il gère les field-tests, y compris les bêtas VdB.

Comment devenir Bêta Testeur

Borland conduit les Visual dBASE field tests dans des forums privés sur CompuServe. Si vous êtes intéressé à devenir site de bêta-test, envoyez-nous les informations suivantes :

Envoyez le tout par E-Mail à charlesm@borland.com. N'oubliez pas d'inclure vos numéros de téléphone et de Fax, ainsi que CompuServe ID.

Le nombre de sites de field test est, nécessairement, limité. Tout le monde ne pourra donc pas être inclus dans un field test donné. Si votre candidature est acceptée, vous serez prévenu directement par téléphone.



De l'éditeur - Les Squires

La lettre technique VdDN est sponsorisée par le World Wide Developer Network (WWDN) de Boston, Massachusetts, USA.

WdDN est consacré à l'information des développeurs professionnels en bases de données (tant les consultants que les salariés d'entreprises) en ce qui concerne les manifestations éducatives, les meetings, les opportunités professionnelles, les événements mondiaux, les bons articles, des conseils techniques, les produits nouveaux et indispensables, etc.

Constituant un réseau électronique, organisé par centre d'intérêt des développeurs, plutôt que régional, WdDN est également un centre d'échanges où les développeurs peuvent aborder des sujets d'importance mondiale avec leurs pairs dans le monde entier. Les destinataires sont d'accord pour répondre par courrier électronique de manière régulière à des sondages concernant leurs orientations, leurs opinions et besoins.

Pour ceux qui n'ont pas de club d'utilisateurs/développeurs dans leur région, WdDN constitue un véhicule où les individus peuvent se porter volontaires pour contribuer à quelque chose de plus vaste qu'eux-mêmes. Plus de 16,000 personnes dans le monde entier participent aux discussions sur Microsoft Access, CA-Clipper, Microsoft FoxPro, Visual dBASE, le Software Change Management, et Software Quality and Productive.

La lettre technique est distribuée mensuellement par courrier électronique CompuServe, Internet, FidoNet, et d'autres passerelles électroniques (pour la version anglaise - la version française est disponible en format HTML sur les sites Web du WdDN et de François Ghoche). Elle est gratuite pour les développeurs individuels. Des tarifs modestes sont applicables aux entreprises pour les offres d'emploi et les annonces de produits de tierce partie. Les opinions exprimées ne concernent que leurs auteurs respectifs. Tous les articles sont sous copyright WWDN, sauf indication contraire, mais ils sont libres de droits pour les groupes d'utilisateurs ou pour publication ou redistribution par les publications non commerciales, à la condition qu'une mention d'origine citant le WWDN soient incluse. (NdT: la traduction française est sous copyright spécifique François Ghoche)

Changement d'adresse:

  1. Envoyez un e-mail à partir de votre ancienne adresse.
  2. Indiquez la nouvelle adresse.

Ajouter des abonnés à la liste:

  1. Envoyez un E-mail à vdb@WJI.Com à partir de l'adresse e-mail destinataire de la newsletter.
  2. Incluez le texte VDB-YES dans le Sujet: ou le corps du Message.

Annuler des abonnés:

  1. Envoyez un E-mail à vdb@WJI.Com.
  2. Incluez le texte VDB-NO dans le Sujet: ou le corps Message.

Anciens numéros et téléchargements:

  1. FTP vers ftp.wji.com.
  2. Login comme FTP.
  3. Utilisez votre ID comme password.
  4. cd vdb.
  5. Copiez les anciens numéros et les fichiers à décharger en fonction de leur disponibilité.

Version française

La traduction et adaptation française est réalisée par François Ghoche (ATON consulting), qui propose notamment des prestations de formation / développement / assistance autour de Visual dBASE. Vous trouverez plus d'informations à ce sujet sur le site Web : http://ourworld.compuserve.com/homepages/FGhoche/

ATON, 33 Allée des Genêts, 78280 Guyancourt, France

Word Jenny, Inc. 48 Copeland Street, Watertown (Boston), Massachusetts USA LSquires@WJI.Com //-Checked real-time. 73020.3435@compuserve.com //-Checked once a week. www.wji.com 617-924-5401

© copyright 1996, World Wide Developer Network (WWDN)

version française © copyright 1996, François Ghoche


En savoir plus :


François Ghoche vous propose les services d'un expert, ou d'une équipe d'experts, pour un projet précis, ou bien pour un temps déterminé, ou encore pour un service spécifique réparti dans le temps.


* (® ATON et le logo ATON sont une marque déposée, ainsi que dBASE; tous droits réservés pour leurs détenteurs respectifs)

fg - dernière MàJ: 8 Sept 96