IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
logo

FAQ WinDevConsultez toutes les FAQ

Nombre d'auteurs : 3, nombre de questions : 71, dernière mise à jour : 25 novembre 2018  Ajouter une question

 

Cette FAQ ne prétend pas traiter de tous les trucs & astuces ou de tous les problèmes rencontrés par les utilisateurs de WinDev : elle a été créée via l'analyse des questions les plus fréquentes posées sur le forum de ce site, et sur les connaissances des différents rédacteurs. Nous espérons voir le nombre de questions/réponses augmenter régulièrement, pour couvrir le plus de thèmes possibles. Pour y participer, suivez le mode d'emploi donné dans la 2ème question !

SommaireConcepts, WLangage et environnementW-Langage (12)
précédent sommaire suivant
 

Pour faire une copie d'objet il suffit de faire une simple affectation :

Code windev : Sélectionner tout
1
2
3
4
5
  
Objet1 est un Classe 
Objet2 est un Classe 
  
Objet2 = Objet1

Mis à jour le 13 décembre 2008 Emmanuel Lecoester

Exemple avec le constructeur d'une classe dérivée :

Code windev : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
14
  
PROCEDURE Constructeur(Param1,Param2) 
// Appel du constructeur de la classe ancêtre (si nécessaire) 
// Si le constructeur de la classe ancêtre n'a pas de paramètre 
// L'appel est automatique, il n'y a rien à faire 
// À mettre impérativement au début avant les autres initialisations 
Ancêtre:Constructeur(Param1) 
// OU 
Constructeur Ancêtre(Param1) 
// OU 
// En cas d'héritage multiple, ou pou être plus explicite on peut nommer la classe ancêtre : 
ClasseAncêtre:Constructeur(Param1) 
// OU 
Constructeur ClasseAncêtre(Param1)

Mis à jour le 13 décembre 2008 Emmanuel Lecoester

Il suffit de le comparer avec NULL.
Exemple :

Code windev : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
14
  
// Objet1 est un objet dynamique 
Objet1 est un objet dynamique 
  
// Traitement qui alloue ou non l'objet 
  
// Ici comment savoir si l'objet Objet1 est alloué ? 
SI Objet1=Null ALORS 
    // On est dans ce cas : Objet non alloué 
    // Ici on alloue l'objet 
Objet1 = allouer un objet MaClasse 
SINON 
    // On est dans le cas : Objet déjà alloué 
FIN

Mis à jour le 13 décembre 2008 Emmanuel Lecoester

Code windev : Sélectionner tout
1
2
3
NomFenetreAffichée est une chaîne = "MaFenetre" 
champ_onglets_en_cours est une chaîne = "MonOnglet" 
volet_en_cours est un entier = 1
La commande

Code windev : Sélectionner tout
{NomFenetreAffichée+"."+champ_onglets_en_cours, indChamp}[volet_en_cours]..Visible = Vrai
est équivalente à

Code windev : Sélectionner tout
MaFenetre.MonOnglet[4]..Visible = Vrai

Mis à jour le 5 mars 2009 Emmanuel Lecoester

Les indirections sont très intéressantes avec quelques limitations dont celle-ci : les indirections ne sont pas utilisables pour des accès à une propriété

Code windev : Sélectionner tout
1
2
prop est une chaîne = "Libellé" 
BTSEL..{prop}="Rechercher"
Pour contourner cela rien ne vaut de passer par la compilation dynamique :

Code windev : Sélectionner tout
1
2
Compile("traduction", "BTSEL.."+prop+"=""Rechercher""") 
ExécuteTraitement("traduction", trtProcédure)

Mis à jour le 5 mars 2009 Emmanuel Lecoester

Soit en doublant les doubles quotes, soit en ajoutant le caractère ascii correspondant.

Code windev : Sélectionner tout
Info("Bonjour ""le monde""")
Code windev : Sélectionner tout
Info("Bonjour "+caract(34)+"le monde"+caract(34))

Mis à jour le 5 mars 2009 Emmanuel Lecoester

Code windev : Sélectionner tout
1
2
3
4
  
Résultat = LigneCommande() renvoie toute la ligne de commande 
Résultat = LigneCommande(indice) renvoie le contenu du paramètre ayant pour indice 
Résultat = LigneCommande(Nom du paramètre, Valeur par défaut) si le paramètre demandé n'existe pas, c'est la valeur par défaut qui est retournée

Mis à jour le 4 novembre 2008 Emmanuel Lecoester

Qui n'a jamais fait une boucle classique utilisant le nombre de lignes d'une table mémoire, par exemple :

Code windev : Sélectionner tout
1
2
3
4
  
POUR i=1 A TableOccurrence(TABLE1) 
    // traitement 
FIN
Depuis plusieurs versions, vous aviez donc comme moi, une information indiquant que cette syntaxe n'est pas conseillée car il est préférable de ne pas réévaluer à chaque fois le nombre de lignes et donc d'utiliser une variable avant, ce qui me semble judicieux. Donc, j'ai fait tout comme on me le suggérait :

Code windev : Sélectionner tout
1
2
3
4
5
  
nLignes est un entier = TableOccurrence(TABLE1) 
POUR i=1 A nLignes 
    // traitement 
FIN
Et bien, maintenant il est possible de faire beaucoup plus simple en utilisant le mot clé "_A_" dans la boucle (un peu comme les mots clés _ET_ et _OU_) qui permet de faire la même optimisation, donc en économisant la variable temporaire.

Code windev : Sélectionner tout
1
2
3
4
  
POUR i=1 _A_ TableOccurrence(TABLE1) 
    // traitement 
FIN

Mis à jour le 14 juillet 2009 Emmanuel Lecoester

L'instruction conditionnelle "SELON" permet de choisir d'exécuter une action ou une autre en fonction de la valeur d'une expression. Il est possible de tester une valeur comprise entre un minimum et un maximum, grâce à l'opérateur : min <*< max.

Code windev : Sélectionner tout
1
2
3
4
SELON nHeure 
   CAS 0<*<16>("Bonjour") 
   CAS 16<*<23>("Bonsoir") 
FIN

Mis à jour le 14 juillet 2009 Emmanuel Lecoester

WinDev, WebDev et WinDev Mobile proposent la propriété

Code windev : Sélectionner tout
1
2
  
..ImpressionAChaquePage
Cette propriété, très utile, découpe l'impression d'un état page par page. Cela permet par exemple de minimiser la taille du spooler d'impression ou d'envoyer les pages de l'état sur des bacs différents.

Vous trouverez tous les détails de cette propriété dans l'aide en ligne.

Mis à jour le 14 juillet 2009 Emmanuel Lecoester

Avec un point comme séparateur

Code windev : Sélectionner tout
VérifieExpressionRégulière(Saisie1, "([0-9]+[.][0-9]+)")
Avec une virgule comme séparateur

Code windev : Sélectionner tout
VérifieExpressionRégulière(Saisie1, "([0-9]+)|([0-9]+[,][0-9]+)")

Mis à jour le 15 août 2009 Emmanuel Lecoester

Souvent, en mode test, on accède aux données, mais une fois qu'on compile le programme, on se retrouve avec des fichiers vides.
Ca se produit quand on utilise Hyperfile Classic.

La fonction magique pour résoudre ça, c'est la fonction hChangeRep(), à mettre en principe dans le code d'initialisation du projet. Par défaut, en mode test, le programme va lire/écrire les fichiers HF dans un répertoire Windev23/Programmes/xxx ( là où Windev est installé).
Et quand on compile le programme, il va lire/écrire les données dans un autre répertoire... Donc il ne trouve généralement aucune donnée.

Avec hChangeRep(), vous prenez le contrôle de la situation. C'est vous qui décidez où le programme doit lire et écrire les données.

Ca solutionne le problème en local (le développeur accède aux mêmes données avec le bouton Test <Go> ou avec le programme compilé. Ca ne solutionne pas complètement le cas où vous devez déployer votre programme et ses données vers un autre ordinateur.

Mis à jour le 25 novembre 2018 tbc92

Proposer une nouvelle réponse sur la FAQ

Ce n'est pas l'endroit pour poser des questions, allez plutôt sur le forum de la rubrique pour ça


Réponse à la question

Liens sous la question
précédent sommaire suivant
 

Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2024 Developpez Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.