Un catalogue sur un seul formulaire avec des "Imprimer ligne"
Date de publication : Novembre 2005
Par
Bertrand Soubeyrand
Les commandes 4D afférentes à l'impression ont beaucoup évoluées depuis la version 4D 6.8.1. Cette Note
technique met en exergue des changements étalés tout au long de ces mises à jour, jusqu'à la version actuelle,
4D 2004.3.
Introduction
Les modifications apportées par 4D 2004
Une base exemple
Codes pas à pas
Codes complets
Trois syntaxes pour "Imprimer ligne"
Text2Array
Conclusion
Base exemple
Introduction
Cette note techniquue vient en complément de la note réf. 4D-200303-08-FR : "Remplacez vos IMPRIMER
SELECTION par un module générique".
Les commandes 4D afférentes à l'impression ont beaucoup évoluées depuis la version 4D 6.8.1. Cette Note
technique met en exergue des changements étalés tout au long de ces mises à jour, jusqu'à la version actuelle,
4D 2004.3.
Le tableau qui suit représente le thème « Impression » de 4D 2004. Il vous dresse un panorama de l'évolution
de l'impression. Le premier numéro de version qui suit le nom de la commande correspond à sa version de
création et les suivants aux versions de révisions.
(en rouge les commandes modifiées en 4D 2004)
| Nom de la commande |
Version de création |
Version de révision |
Version de révision |
| Lire taquet impression |
6.8.1 |
2003.0 |
|
| FIXER TAQUET IMPRESSION |
6.8.1 |
2003.0 |
|
| Lire hauteur imprimee |
6.8.1 |
|
|
| LIRE MARGE IMPRESSION |
6.8.1 |
|
|
| FIXER MARGE IMPRESSION |
6.8.1 |
|
|
| LIRE ZONE IMPRESSION |
6.8.1 |
|
|
| Imprimer ligne |
5.0 |
2003.0 |
2004.0 |
| SAUT DE PAGE |
5.0 |
2003.0 |
|
| LISTE IMPRIMANTES |
2003.0 |
2004.2 |
|
| FIXER IMPRIMANTE COURANTE |
2003.0 |
|
|
| Lire imprimante courante |
2003.0 |
|
|
| VALEURS OPTION IMPRESSION |
2003.0 |
|
|
| FIXER OPTION IMPRESSION |
2003.0 |
2004.0 |
2004.3 |
| LIRE OPTION IMPRESSION |
2003.0 |
2004.0 |
2004.3 |
| IMPRIMER ETIQUETTES |
5.0 |
2004.0 |
|
| IMPRIMER SELECTION |
5.0 |
2004.0 |
|
| IMPRIMER ENREGISTREMENT |
5.0 |
2004.0 |
|
| FIXER IMPRIMANTE COURANTE |
5.0 |
|
|
| IMPRESSION ECRAN |
5.0 |
|
|
| Niveau |
5.0 |
|
|
| NIVEAUX DE RUPTURES |
5.0 |
|
|
| Page impression |
5.0 |
|
|
| PARAMETRES IMPRESSION |
5.0 |
|
|
| Sous total |
5.0 |
|
|
| UTILISER PARAMETRES IMPRESSION |
5.0 |
|
|
Les modifications apportées par 4D 2004
Imprimer ligne
Cette commande peut désormais être exécutée sur 4D Server dans le cadre d'une procédure stockée.
Dans ce contexte :
• Il faut veillez à ce qu'aucune boîte de dialogue n'apparaisse sur le poste serveur (sauf besoin spécifique)
Pour cela, il est nécessaire d'appeler la commande avec le paramètre * ou >.
• En cas de problème sur l'imprimante (plus de papier, imprimante déconnectée, etc.), aucun message
d'erreur n'est généré.
LISTE DES IMPRIMANTES
Sous MacOS, le deuxième paramètre de cette commande retourne désormais pour chaque imprimante son
nom personnalisé, modifiable par l'utilisateur. Ce nom peut être utilisé par exemple dans des boîtes de
dialogue.
FIXER OPTION IMPRESSION, LIRE OPTION IMPRESSION
2004.0. Introduction d'un nouveau paramètre : Option mode impression Mac
• Option mode impression Mac (13) : passez 0 pour fixer l'impression en mode PDF (valeur par défaut) et 1
pour "forcer" l'impression en mode Postscript dans valeur1. Cette option modifie également le mode
d'impression des plug-ins 4D Write, 4D View et 4D Draw. En revanche, elle n'a pas d'effet sous Windows.
 |
Note : Sous MacOS X, les impressions sont effectuées par défaut en mode PDF. Or, le pilote d'impression
PDF ne prend pas en charge les images PICT encapsulant des informations Postscript -ces images sont
générées notamment par des logiciels de dessin vectoriel. Pour résoudre ce problème, cette option permet de
modifier le mode d'impression sous MacOS X pour la session courante. Attention, l'impression en mode
Postscript peut entraîner des effets de bords indésirables.
|
Une fois fixée à l'aide de cette commande, une option d'impression sera conservée durant toute la session
pour l'application 4D entière. Elle sera utilisée par les commandes IMPRIMER SELECTION,
IMPRIMER ETIQUETTES, IMPRIMER ENREGISTREMENT, Imprimer ligne, QR ETAT et par
toutes les impressions de 4ème Dimension, y compris en mode Structure.
2004.3. Introduction d'un nouveau paramètre : Option masquer progression impr
• Option masquer progression impr (14). Cette nouvelle option permet de masquer toutes les fenêtres
système de progression d'impression pour le process courant. Passez 1 dans valeur1 pour masquer les
fenêtres de progression et 0 pour rétablir leur affichage (fonctionnement par défaut). Cette option est
particulièrement utile dans le cadre des impressions en PDF sous Mac OS X.
 |
Note : Il existe déjà une option d'affichage Progression de l'impression accessible via la boîte de dialogue
des Préférences (page Application/Options). Toutefois, elle est globale à l'application et ne masque pas
toutes les fenêtres sous Mac OS X.
|
IMPRIMER ETIQUETTES
4D Server : cette commande peut être exécutée sur 4D Server dans le cadre d'une procédure stockée.
Dans ce contexte :
• Même mise en garde concernant les dialogues et l'absence de message d'erreur que pour les
commandes précédentes...
• La syntaxe faisant apparaître l'éditeur d'étiquettes ne fonctionne pas avec 4D Server, dans ce cas, la
variable système OK prend la valeur 0.
IMPRIMER SELECTION
4D Server : cette commande peut être exécutée sur 4D Server dans le cadre d'une procédure stockée.
Même mise en garde concernant les dialogues et l'absence de message d'erreur...
IMPRIMER ENREGISTREMENT
4D Server : cette commande peut être exécutée sur 4D Server dans le cadre d'une procédure stockée.
Attention également à ne pas afficher de dialogues et à l'absence de message d'erreur...
Une base exemple
La base qui accompagne cette note illustre la façon d'imprimer un catalogue de produits à partir d'un
formulaire unique.
Notons que l'entête de ce catalogue contient deux variables (l'heure et la date d'impression) et le corps
contient un champ qui détaille le produit.
La hauteur de ce champ s'adapte au texte contenu aussi nous devons prendre soin :
· d'ajuster l'objet sur le contenu texte
· déplacer les autres éléments situés sous l'objet
· déplacer les taquets d'impression pour le corps mais aussi celui de rupture et de pied
· veiller à la place restante avant de lancer l'Imprimer ligne
· ne pas recalculer l'heure et la date à chaque produit !
Codes pas à pas
Méthode formulaire : le principe est de ne pas calculer quand ce n'est pas utile.
La méthode print_catalogue lance l'impression et distribue les ordres d'Imprimer ligne. Imprimons
simplement l'entête du catalogue :
| code 4D |
$L_Size:=Imprimer ligne([TABLE_PRINT];"catalogue_demo";Entête formulaire ) |
La Méthode formulaire est exécutée et les variables Date et Heure sont renseignées :
| code 4D |
Au cas ou
: (Evenement formulaire=Sur impression corps )
D_Date:=Date du jour
H_Heure:=Heure courante
Fin de cas |
Maintenant n'imprimons que les produits :
| code 4D |
TOUT SELECTIONNER([TABLE_PRINT])
Tant que (Non(Fin de selection([TABLE_PRINT])))
$L_Size:=Imprimer ligne([TABLE_PRINT];"catalogue_demo";Corps formulaire )
ENREGISTREMENT SUIVANT([TABLE_PRINT])
Fin tant que |
La Méthode formulaire est exécutée et nous redimensionnons la zone de texte de la description.
| code 4D |
Au cas ou
: (Evenement formulaire=Sur impression corps )
LIRE RECT OBJET([TABLE_PRINT]Detail_T;$L_Gauche;$L_Haut;$L_Droite;$L_Bas)
$L_Max:=$L_Droite-$L_Gauche
$L_Hauteur:=$L_Bas-$L_Haut
TAILLE OBJET OPTIMALE([TABLE_PRINT]Detail_T;$L_LargeurOpti;$L_HauteurOpti;$L_Max)
$L_Augmentation:=$L_HauteurOpti-$L_Hauteur
` D'abord déplacer le taquet
` Notez * dans FIXER TAQUET IMPRESSION qui permet de déplacer les taquets suivants
$L_C:=Lire taquet impression(Corps formulaire )
FIXER TAQUET IMPRESSION(Corps formulaire ;$L_C+$L_Augmentation;*)
` Ensuite déplacer les objets
DEPLACER OBJET([TABLE_PRINT]Detail_T;0;0;0;$L_Augmentation) ` par le bas
DEPLACER OBJET(*;"ligne1";0;$L_Augmentation;0;0) ` par le haut
DEPLACER OBJET(*;"ligneVd";0;0;0;$L_Augmentation)
DEPLACER OBJET(*;"ligneVg";0;0;0;$L_Augmentation)
Fin de cas |
À l'issue de ces deux impressions nous constatons qu'il y a comme deux méthodes formulaire distinctes à
exécuter dans un formulaire unique "catalogue_demo". Nous avons convenu au démarrage que, lors du
calcul de l'heure et la date, on ne calcule pas la hauteur des produits et réciproquement.
Pour faire ce distinguo nous renseignons une variable process S020_ZoneTaquet qui indique à la méthode
formulaire les traitements à réaliser.
| code 4D |
Au cas ou
: (S020_ZoneTaquet="corps")
: (S020_ZoneTaquet="tete")
: (S020_ZoneTaquet="pied")
Fin de cas |
Retouchons la méthode print_catalogue :
| code 4D |
S020_ZoneTaquet:="tete"
$L_Size:=Imprimer ligne([TABLE_PRINT];"catalogue_demo";Entête formulaire )
Tant que (Non(Fin de selection([TABLE_PRINT])))
S020_ZoneTaquet:="corps"
$L_Size:=Imprimer ligne([TABLE_PRINT];"catalogue_demo";Corps formulaire )
ENREGISTREMENT SUIVANT([TABLE_PRINT])
Fin tant que |
La méthode formulaire devient :
| code 4D |
Au cas ou
: (Evenement formulaire=Sur impression corps )
Au cas ou
: (S020_ZoneTaquet="corps")
LIRE RECT OBJET([TABLE_PRINT]Detail_T;$L_Gauche;$L_Haut;$L_Droite;$L_Bas)
$L_Max:=$L_Droite-$L_Gauche
$L_Hauteur:=$L_Bas-$L_Haut
TAILLE OBJET OPTIMALE([TABLE_PRINT]Detail_T;$L_LargeurOpti;$L_HauteurOpti;$L_Max)
$L_Augmentation:=$L_HauteurOpti-$L_Hauteur
` D'abord déplacer le taquet
` Notez * dans FIXER TAQUET IMPRESSION qui permet de déplacer les taquets suivants
$L_C:=Lire taquet impression(Corps formulaire )
FIXER TAQUET IMPRESSION(Corps formulaire ;$L_C+$L_Augmentation;*)
` Ensuite déplacer les objets
DEPLACER OBJET([TABLE_PRINT]Detail_T;0;0;0;$L_Augmentation) ` par le bas
DEPLACER OBJET(*;"ligne1";0;$L_Augmentation;0;0) ` par le haut
DEPLACER OBJET(*;"ligneVd";0;0;0;$L_Augmentation)
DEPLACER OBJET(*;"ligneVg";0;0;0;$L_Augmentation)
: (S020_ZoneTaquet="tete")
D_Date:=Date du jour
H_Heure:=Heure courante
Fin de cas |
Nous touchons au but mais n'oublions pas qu'il faut calculer la place nécessaire pour imprimer notre
produit : si celle-ci est insuffisante nous redémarrons sur une nouvelle page avec les têtes des colonnes.
Pour réaliser cette tâche nous allons utiliser une autre syntaxe de la fonction Imprimer ligne. Au lieu de
désigner la portion de formulaire par son nom…
| code 4D |
$L_Size:=Imprimer ligne([TABLE_PRINT];"catalogue_demo";Corps formulaire ) |
… nous indiquerons quelles coordonnées numériques nous voulons imprimer.
| code 4D |
$L_Size:=Imprimer ligne([TABLE_PRINT];"catalogue_demo";1;1 ) |
Comme nous choisissons de la position 1 pixel à 1 pixel la zone de formulaire imprimée sera de 0 pixel…
mais la méthode formulaire sera executée. Nous en profitons pour créer une nouvelle valeur pour le tag
S020_ZoneTaquet.
| code 4D |
S020_ZoneTaquet:="calcul"
$L_Size:=Imprimer ligne([TABLE_PRINT];"catalogue_demo";1;1 ) |
La partie du code de la Méthode formulaire qui change devient :
| code 4D |
Au cas ou
: (Evenement formulaire=Sur impression corps )
Au cas ou
: (S020_ZoneTaquet="calcul")
` Le calcul va determiner la hauteur totale à imprimer
$L_E1:=Lire taquet impression(Entête formulaire1 )
$L_C:=Lire taquet impression(Corps formulaire )
LIRE RECT OBJET([TABLE_PRINT]Detail_T;$L_Gauche;$L_Haut;$L_Droite;$L_Bas)
$L_Max:=$L_Droite-$L_Gauche
$L_Hauteur:=$L_Bas-$L_Haut
TAILLE OBJET OPTIMALE([TABLE_PRINT]Detail_T;$L_LargeurOpti;$L_HauteurOpti;$L_Max)
$L_Augmentation:=$L_HauteurOpti-$L_Hauteur
L_HauteurNominale:=($L_C+$L_Augmentation)-$L_E1
: (S020_ZoneTaquet="corps")
: (S020_ZoneTaquet="tete")
Fin de cas
Fin de cas |
À l'issue de ce test nous avons renseigné la variable process L_HauteurNominale qui contient la hauteur en
pixel de la zone à imprimer. Cette variable est exploitée dans la méthode print_catalogue pour, si besoin,
générer une nouvelle page.
| code 4D |
LIRE ZONE IMPRESSION($L_HauteurImpression;$L_LargeurImpression)
Tant que (Non(Fin de selection([TABLE_PRINT])))
` Cette section"calcul" va nous permettre de savoir si la ligne de catalogue peut être imprimée
S020_ZoneTaquet:="calcul"
$L_Size:=Imprimer ligne([TABLE_PRINT];"catalogue_demo";1;1)
$L_HauteurDispo:=$L_HauteurImpression-Lire hauteur imprimee
Si ($L_HauteurDispo<L_HauteurNominale)
SAUT DE PAGE(*)
$L_Size:=Imprimer ligne([TABLE_PRINT];"catalogue_demo";Entête formulaire1 )
Fin de si
S020_ZoneTaquet:="corps"
$L_Size:=Imprimer ligne([TABLE_PRINT];"catalogue_demo";Corps formulaire )
ENREGISTREMENT SUIVANT([TABLE_PRINT])
Fin tant que |
Codes complets
Pour conclure, voici le code complet de la méthode print_catalogue et de la méthode formulaire, rationalisé,
afin de limiter les répétitions inutiles d'instructions.
• Méthode print_catalogue
En client/serveur elle s'exécutera sur le serveur (Nouveauté 2004) : dans ce cas
gare aux alertes intempestives.
| code 4D |
Si (Nombre de parametres=0)
$L_Process:=Executer sur serveur(Nom methode courante;1024*100;"test";"Dummy";*)
Sinon
` En client serveur c'est le serveur qui gère l'impression et non plus le client
` Attention aux alertes inattendues !
FIXER OPTION IMPRESSION(Option orientation ;1) ` verticale
FIXER OPTION IMPRESSION(Option échelle ;100) `a 100%
FIXER OPTION IMPRESSION(Option nombre copies ;1) ` 1 Copie
FIXER OPTION IMPRESSION(Option destination ;1) ` 1 Imprimante
FIXER OPTION IMPRESSION(Option nom document à imprimer ;"test impression")
FIXER OPTION IMPRESSION(Option papier ;"A4")
FIXER MARGE IMPRESSION(-1;-1;-1;-1)
LIRE ZONE IMPRESSION($L_HauteurImpression;$L_LargeurImpression)
IMPRESSION ECRAN(Faux)
` Impression de l'entête, pas de difficulté
` On considère qu'il y a de la place pour imprimer cette zone
S020_ZoneTaquet:="tete"
$L_Size:=Imprimer ligne([TABLE_PRINT];"catalogue_demo";Entête formulaire )
$L_Size:=Imprimer ligne([TABLE_PRINT];"catalogue_demo";Entête formulaire1 )
$L_HauteurDispo:=$L_HauteurImpression-Lire hauteur imprimee
TOUT SELECTIONNER([TABLE_PRINT])
REDUIRE SELECTION([TABLE_PRINT];10)
DEBUT SELECTION([TABLE_PRINT])
Tant que (Non(Fin de selection([TABLE_PRINT])))
`
` Cette section "calcul" va nous permettre de savoir si la ligne de catalogue peut être imprimée
S020_ZoneTaquet:="calcul"
$L_HauteurDispo:=$L_HauteurImpression-Lire hauteur imprimee
$L_Size:=Imprimer ligne([TABLE_PRINT];"catalogue_demo";1;1)
` L_HauteurNominale est renseignée dans la méthode formulaire du formulaire d'impression
Si ($L_HauteurDispo<L_HauteurNominale)
SAUT DE PAGE(>)
$L_Size:=Imprimer ligne([TABLE_PRINT];"catalogue_demo";Entête formulaire1 )
Fin de si
S020_ZoneTaquet:="corps"
$L_Size:=Imprimer ligne([TABLE_PRINT];"catalogue_demo";Corps formulaire )
ENREGISTREMENT SUIVANT([TABLE_PRINT])
Fin tant que
S020_ZoneTaquet:="pied"
$L_Size:=Imprimer ligne([TABLE_PRINT];"catalogue_demo";Pied de page formulaire )
SAUT DE PAGE
Fin de si |
• La Méthode Formulaire
| code 4D |
Au cas ou
: (Evenement formulaire=Sur impression corps )
Si (S020_ZoneTaquet="calcul") | (S020_ZoneTaquet="corps")
LIRE RECT OBJET([TABLE_PRINT]Detail_T;$L_Gauche;$L_Haut;$L_Droite;$L_Bas)
$L_Max:=$L_Droite-$L_Gauche
$L_Hauteur:=$L_Bas-$L_Haut
TAILLE OBJET OPTIMALE([TABLE_PRINT]Detail_T;$L_LargeurOpti;$L_HauteurOpti;$L_Max)
$L_Augmentation:=$L_HauteurOpti-$L_Hauteur
$L_C:=Lire taquet impression(Corps formulaire )
Fin de si
Au cas ou
: (S020_ZoneTaquet="calcul")
` Le calcul va determiner la hauteur totale à imprimer
$L_E1:=Lire taquet impression(Entête formulaire1 )
L_HauteurNominale:=($L_C+$L_Augmentation)-$L_E1
: (S020_ZoneTaquet="corps")
` D'abord déplacer le taquet
FIXER TAQUET IMPRESSION(Corps formulaire ;$L_C+$L_Augmentation;*)
` Ensuite les objets
DEPLACER OBJET([TABLE_PRINT]Detail_T;0;0;0;$L_Augmentation) ` par le bas
DEPLACER OBJET(*;"ligne1";0;$L_Augmentation;0;0)
DEPLACER OBJET(*;"ligneVd";0;0;0;$L_Augmentation)
DEPLACER OBJET(*;"ligneVg";0;0;0;$L_Augmentation)
: (S020_ZoneTaquet="tete")
D_Date:=Date du jour
H_Heure:=Heure courante
Fin de cas
Fin de cas |
Trois syntaxes pour "Imprimer ligne"
Pour terminer ce tour d'horizon, voici les trois syntaxes possibles de l'Imprimer ligne :
• Méthode : imprimer_ligne_syntaxe1
Syntaxe historique : on imprime la zone de Corps.
| code 4D |
` ----------------------------------------------------
` Nom utilisateur (OS) : Bertrand
` Date et heure : 03/01/06, 20:19:35
` ----------------------------------------------------
` Méthode : imprimer_ligne_syntaxe1
` Description
` C'est la syntaxe historique : la zone de corps est imprimée
`
` Paramètres
` ----------------------------------------------------
C_ENTIER($zone)
$zone:=Imprimer ligne([TABLE_PRINT];"demo_zone")
SAUT DE PAGE ` Déclenche l'impression |
• Méthode : imprimer_ligne_syntaxe2
Imprimer ligne reçoit la précision sur la zone formulaire à imprimer.
Ces zones sont intimement liées au formulaire.
| code 4D |
` ----------------------------------------------------
` Nom utilisateur (OS) : Bertrand
` Date et heure : 03/01/06, 20:18:34
` ----------------------------------------------------
` Méthode : imprimer_ligne_syntaxe2
` Description
` Imprimer ligne reçoit la précision sur la zone formulaire
`à imprimer. Ces zones sont intimement liées au formulaire
`
` Paramètres
` ----------------------------------------------------
C_ENTIER ($zone1;$zone2;$zone3;$zone4)
$zone1:=Imprimer ligne([TABLE_PRINT];"demo_zone";Entête formulaire )
$zone2:=Imprimer ligne([TABLE_PRINT];"demo_zone";Corps formulaire )
$zone3:=Imprimer ligne([TABLE_PRINT];"demo_zone";Rupture formulaire0 )
$zone4:=Imprimer ligne([TABLE_PRINT];"demo_zone";Pied de page formulaire )
SAUT DE PAGE ` Déclenche l'impression |
• Méthode : imprimer_ligne_syntaxe3
Vous passez une zone de début et une zone de fin.
| code 4D |
` ----------------------------------------------------
` Nom utilisateur (OS) : Bertrand
` Date et heure : 03/01/06, 20:21:45
` ----------------------------------------------------
` Méthode : imprimer_ligne_syntaxe3
` Description
` Vous passez une zone de début et une zone de fin
` les valeurs sont en pixels
`
` Paramètres
` ----------------------------------------------------
C_ENTIER($zone)
$zone:=Imprimer ligne([TABLE_PRINT];"demo_zone";42;155)
` avec ces valeurs nous rognerons dans le libellé "entête zone" et "rupture zone"
SAUT DE PAGE ` Déclenche l'impression |
Text2Array
La prochaine évolution majeure serait une fonction qui permettrait de découper un texte par lignes à placer
dans un tableau de type texte et ainsi rendre imprimables de longues zones de texte courant sur plusieurs
pages.
En attendant rappelons l'existence du plugin
Text2Array développé par Dave BATTON :
http://e-node.fr/redir/FR/produit_id_90.html
Conclusion
Les méthodes utilisées pour l'impression évoluent comme le montre notre tableau d'entrée et donnent aux
développeurs un nombre infini de possibilités.
Base exemple
__________________________________________________
Copyright © 1985-2009 4D SA - Tous droits réservés
Tous les efforts ont été faits pour que le contenu de cette note technique présente le maximum de fiabilité possible.
Néanmoins, les différents éléments composant cette note technique, et le cas échéant, le code, sont fournis sans garantie d'aucune sorte.
L'auteur et 4D S.A. déclinent donc toute responsabilité quant à l'utilisation qui pourrait être faite de ces éléments, tant à l'égard de leurs
utilisateurs que des tiers.
Les informations contenues dans ce document peuvent faire l'objet de modifications sans préavis et ne sauraient en aucune manière engager
4D SA. La fourniture du logiciel décrit dans ce document est régie par un octroi de licence dont les termes sont précisés par ailleurs dans la
licence électronique figurant sur le support du Logiciel et de la Documentation afférente. Le logiciel et sa documentation ne peuvent être
utilisés, copiés ou reproduits sur quelque support que ce soit et de quelque manière que ce soit, que conformément aux termes de cette
licence.
Aucune partie de ce document ne peut être reproduite ou recopiée de quelque manière que ce soit, électronique ou mécanique, y compris par
photocopie, enregistrement, archivage ou tout autre procédé de stockage, de traitement et de récupération d'informations, pour d'autres buts
que l'usage personnel de l'acheteur, et ce exclusivement aux conditions contractuelles, sans la permission explicite de 4D SA.
4D, 4D Calc, 4D Draw, 4D Write, 4D Insider, 4ème Dimension ®, 4D Server, 4D Compiler ainsi que les logos 4e Dimension, sont des marques
enregistrées de 4D SA.
Windows,Windows NT,Win 32s et Microsoft sont des marques enregistrées de Microsoft Corporation.
Apple, Macintosh, Power Macintosh, LaserWriter, ImageWriter, QuickTime sont des marques enregistrées ou des noms commerciaux de Apple Computer,Inc.
Mac2Win Software Copyright © 1990-2002 est un produit de Altura Software,Inc.
4D Write contient des éléments de "MacLink Plus file translation", un produit de DataViz, Inc,55 Corporate drive,Trumbull,CT,USA.
XTND Copyright 1992-2002 © 4D SA. Tous droits réservés.
XTND Technology Copyright 1989-2002 © Claris Corporation.. Tous droits réservés ACROBAT © Copyright 1987-2002, Secret
Commercial Adobe Systems Inc.Tous droits réservés. ACROBAT est une marque enregistrée d'Adobe Systems Inc.
Tous les autres noms de produits ou appellations sont des marques déposées ou des noms commerciaux appartenant à leurs propriétaires
respectifs.
__________________________________________________


Ce document est issu de http://www.developpez.com et reste la propriété exclusive de son auteur.
La copie, modification et/ou distribution par quelque moyen que ce soit est soumise à l'obtention préalable de l'autorisation de l'auteur.