Accueil > FAQ FAQ
Bienvenue dans la FAQ Dans cet espace, vous trouverez les réponses aux questions fréquemment posées, ainsi que les réponses à 'Comment je fais' et les questions 'Le saviez-vous'. Merci de nous faire part de vos commentaires sur ces Q&R.
Concernant vos proposition de Q&R, nous vous invitons à nous les soumettre par les formulaires de contact en spécifiant la question et la réponse à publier.

Merci de ne pas confondre FAQ et Forum. La première étant un extrait du second. Préférez alors les forums pour poser les questions sans réponses.

 Liste des catégories
Voici la liste des principales catégories et de leurs sous-catégories. Choisissez une catégorie pour voir les Q&R.
Catégorie Q&R Dernières Q&R publiées
 WinDev API
Q/R relatives à l'utilisation des API Windows avec WinDev.
22 Savez vous comment programmer une fonction Wake On Lan avec windev ?
 WinDev Codes
Q/R relatives au wLanguage et à la codification WinDev.
39 Comment récupérer la liste des sous répertoires en une seule ligne
 WinDev Codes HF
Q/R relatives aux ordres HyperFile du wLangage.
7 Comment affecter, modifier et supprimer le contenu d'un champ mémo bimair...
 WinDev Etats
Q/R relatives aux états WinDev et à WDEtat Utilisateurs
3 Appliquer les modifications iParametre() pour changer de bac
 WinDev Fenêtres
Q/R relatives aux fenêtres WinDev, à leur gestion et à leur contenus.
12 Dans un superchamp, mes sous-champs ne sont pas disponible en saisie alors qu&#...
 WinDev Projets
Q/R relatives aux projets WinDev.
3 Connaitre le répertoire des données en installation réseau
 WinDev Divers
Q/R sur les autres sujets WinDev.
10 Comment Renseigner la propriété RecordSelectionFormula de crystal report XI a...
 WinDev Gabarits/Design
Q/R relatives au design et aux gabarits WinDev
1 Magenta des bmp et boutons
 Le saviez-vous ?
Memoires sur les fonctions et utilisations de WinDev
12 Comment contrôler ou non la structure à l'ouverture d'un fichier Hy...

 Dernières Q&R publiées
Ici, la liste des dernières Q&R publiées.
<1...3456
Demandé et répondu par Thernius le 27-Sep-2004 12:14 (4614 Lectures)
Comment supprimer rapidement un fichier HF par programmation ?
A l'heure actuelle, il n'existe pas de commande permettant de supprimer directement le contenu entier d'un fichier HF. Alors comment faire pour supprimer tout le contenu d'un tel ficher, surtout lorsque celui ci contient des milliers et à fortiori des millions d'enregistrements.

Un parcours un par un des enregistrement couplé à la fonction HSupprime est à proscrire pour des problèmes évidents de temps d'exécution.

Une méthode bien plus rapide et propre consiste à utiliser le code suivant :

HFerme(<fichier>)
FSupprime(<fichier>.fic)
FSupprime(<fichier>.ndx)
HCreationSiInexistant(<fichier>)


Ce code marchera très bien pour une application monoposte, il est conseillé par contre de prendre des précautions dans le cas d'une application réseau. Il serait bon au préalable de vérifier la présence d'utilisateur connecté et éventuellement de prévoir un code leur demandant de quitter l'application (avec un timer à 60 secondes par exemple qui exécute automatiquement l'action au bout du délai).


Demandé et répondu par R&B le 27-Sep-2004 12:14 (5585 Lectures)
Transferer le contenu d'un fichier HyperFile (F1) vers un autre (F2)
Mieux que le hcopieEnreg, voici une solution pour transférer rapidement le contenu d'un fichier HyperFile (F1) dans un autre (F2) de même structure, hors contrôles HyperFile évidemment.

cR = hlisterubrique(F1)
eF = fOuvre(cF, foCréation+foLectureEcriture)
HLitPremier(F1,C1)TANTQUE PAS HEnDehors(F1)
fEcritLigne(efic,HRécupèreEnregistrement(F1)) HLitSuivant(F1,C1)
FIN
fFerme(eF)
HImporteTexte(F2,cF,cR,TAB + Caract(127) + """" + Caract(127) + RC,hImpSansDélimiteur)
fSupprime(cF)


Demandé et répondu par R&B le 27-Sep-2004 12:14 (4330 Lectures)
Etat sur un tableau dynamique
Pour imprimer un Etat basé sur un tableau dynamique : 2 pièges simples à lever.
1/ La porté du tableau. Il faut que le tableau dynamique soit une globale de la fenêtre qui appelle l'état sinon la syntaxe 'NomFen.NomTableau' pose des problèmes.

2/ Le parcours de l'état.
La source de données de l'état doit être 'un fichier texte' et 'Je veux programmer la lecture du fichier'.
Enfin le code de votre état doit réaliser le parcours du tableau
// Initialisation de l'état
nIndice est un entier

// Après lecture 
nIndice++
si nIndice>dimension(NomFenetre.Nomtableau) alors renvoyer annuler

// Avant impression du corps
// Afectation des champs calculés
Champ1=nomFen.nomtableau[indice,1]
...

En Résumé, la source de données d'un état détermine l'execution des blocs de codes et notament ceux relatifs aux parcours. Cette configuration fichier texte et parcours programmé est la seule ou l'on peut fait ce que bon nous semble.


Demandé et répondu par R&B le 27-Sep-2004 12:14 (3009 Lectures)
Booléens, de belles coches et plus de carrés vides
WD7.x propose en standard de remplacer les booléens dans les état par des coches. C'est un excellente chose. Un détail, quand le booleen est à faux, un carré vide remplace le carré coché. Certain pourront ne pas apprécier la nuance.
La solution est fort simple, utiliser un champ calculé texte avec la police winding (détail>style>police) et afficher soit rien soit le caractère de coche (254 en police windings) :

// Code avant impression du champ
MoiMême=''
SI FICHIER.RUBRIQUE ALORS MoiMême=Caract(254)


Demandé et répondu par R&B le 27-Sep-2004 12:14 (5639 Lectures)
Appliquer les modifications iParametre() pour changer de bac
Modifier les paramètre d'une imprimante par programmation windev est possible. Reste qu'il faut faire prendre en compte ces modification à l'imprimante...

voici la marche à suivre :
lancer iParamètre
lancer une impression suivie d'un iRAZ

Exemple :
CONSTANT
IMP_BAC = 'HAUT'
IMP_DEFAUT = 'BAS'
FIN

// Procédure de changement de bac
Procédure ChangeBac(pcBac=IMP_HAUT)
iparametre('ALIMENTATIONPAPIER='+pcBac)
iparametre('DEFAUT=OUI')	// paramètre valable que pour l'impression en cours
// Impression pour forcer les paramètres
iimprime('COUCOU')
// Annulation de l'impression
iRAZ
Fin

// exemple d'utilisation
changebac(IMP_BAS)
iImprimeEtat(...)
ChangeBac()


Demandé et répondu par R&B le 27-Sep-2004 12:14 (3497 Lectures)
Onglets, ordre de navigation et touche Entrée
Dans une fenêtre de type fiche où tous les champs ne sont pas répartis dans les onglet, la navigation (au clavier par tab ou entrée) entre les champs qui ne sont pas dans l'onglet et ceux qui y sont pose des problèmes avec l navigation via la touche entrée.
La anvigation via la touche entrée est obtenue en n'ayant aucun bouton de type validation dans la fenêtre.
Si on positionne les champs hors onglet avant ceux de l'onglet, la navigation dans l'onglet n'est pas obtenue. On passe directement de l'onglet aux boutons (derniers dans l'ordres de navigation).

La solution est trés simple :
quand on arrive dans l'onglet on doit simuler l'appuis sur la touche tab qui va passer le curseur au premier champ de l'onglet !

Ajouter le code suivant dans le code de prise de focus de l'onglet :

 EnvoieTouche('{TAB}',Handle(MoiMême..Nom))


Demandé et répondu par R&B le 27-Sep-2004 12:14 (5869 Lectures)
Répertoires dans un treeview
Astuce de la part de Philippe RAMIN, Amélioration de l'idée de Laurent LOISELEUX. Code original sur le site de l'asso.

//Déclarations globales :
gEnroule est un entier
gImage1 est une chaîne=fRépertoireTemp()+'Image1.bmp' // Image d'une
disquette
gImage2 est une chaîne=fRépertoireTemp()+'Image2.bmp' // Image d'un disque
dur
gImage3 est une chaîne=fRépertoireTemp()+'Image3.bmp' // Image d'un CD
gImage4 est une chaîne=fRépertoireTemp()+'Image4.bmp' // Image du Répertoire
enroulé
gImage5 est une chaîne=fRépertoireTemp()+'Image5.bmp' // Image du Répertoire
déroulé

//Vous mettez ce que vous voulez dans les images moi j'ai créé 5 champs images
invisibles (Image1-->5) contenant le code init suivant :

Dc est un entier=dDébutDessin(MoiMême)
hIcon est un entier=0
API('SHELL32','ExtractIconExA','Shell32.dll',6,&hIcon,Null,1)
SI hIcon>1 ALORS
SI API('USER32','DrawIcon',Dc,1,1,hIcon)=0 ALORS
Erreur(ErreurInfo())
FIN
API('USER32','DestroyIcon',hIcon)
FIN
dSauveImageBMP(MoiMême,fRépertoireTemp()+MoiMême..Nom+'.bmp')

//( Dans l'ordre des images : Index=6, 8, 40, 3 et 4 (correspond à l'index de
l'icone dans le Shell32.dll) )

//Créer le treeview <MyLittleTree> bien sur...

//----------------------------------------------------------------------------
-------------
//Initialisation du treeview avec la liste des disques

//Attention :
Si vous utilisez la même méthode que moi pour les images il faut s'assurer
mettre le code suivant dans l'initialisation de la fenêtre (question de DC),
sinon vous pouvez le mettre dans l'init du treeview avec des images en dur :

TheString est une chaîne=NetListeDisque(-1)
cCpt est un entier=1
OneString est une chaîne=ExtraitChaîne(TheString,cCpt,RC)
FichierTemp est une chaîne=''
BOUCLE
   SELON SansEspace(ExtraitChaîne(OneString,2,TAB))
   CAS 'FD':
      ArbreAjoute(MyLittleTree,ExtraitChaîne(OneString,1,TAB)+':',gImage1,gImage1)
   CAS 'HD':
      ArbreAjoute(MyLittleTree,ExtraitChaîne(OneString,1,TAB)+':',gImage2,gImage2)
   CAS 'CD':
      ArbreAjoute(MyLittleTree,ExtraitChaîne(OneString,1,TAB)+':',gImage3,gImage3)
   FIN
   cCpt++
   OneString=ExtraitChaîne(TheString,cCpt,RC)
   SI OneString~='' ALORS
      SORTIR
   FIN
FIN


//----------------------------------------------------------------------------
-------------
//Code d'évènement du treeview

//Au double-clic:
SI gEnroule=aEnroule ALORS
MaSelection est une chaîne=ListeRep(ArbreSelect(MoiMême))
SI PAS MaSelection~='' ALORS
Info('Ma sélection : '+MaSelection)
FIN
FIN

//A l'enroulé/déroulé:
gEnroule=ArbreEtat(MyLittleTree,ArbreSelect(MoiMême))


//----------------------------------------------------------------------------
-------------
//Procédure de LISTEREP utilisée par le double-clic du tree

PROCEDURE ListeRep(xRepertoire)
// Listage de répertoire

cRepertoire est une chaîne=Remplace(xRepertoire,TAB,'')
cString est une chaîne=NetListeRep(cRepertoire+'*.')
cString=ExtraitChaîne(cString,1,RC)
SI cString~='' ALORS
RENVOYER cRepertoire
FIN
cCpt est un entier=1
cOneRep est une chaîne=ExtraitChaîne(cString,cCpt)
cDeroule est un booléen=Faux
TANTQUE cOneRep<>EOT
SI PAS cOneRep~='.' ET PAS cOneRep~='..' ALORS
ArbreAjoute(MyLittleTree,xRepertoire+TAB+cOneRep,gImage4,gImage5)
cDeroule=Vrai
FIN
cCpt++
cOneRep=ExtraitChaîne(cString,cCpt)
FIN
ArbreDéroule(MyLittleTree,xRepertoire)
SI cDeroule ALORS
RENVOYER ''
SINON
RENVOYER cRepertoire
FIN



//----------------------------------------------------------------------------
-------------
//Destruction (fermeture de la fenêtre)

// En option : Le nettoyage peut être fait avant mais pas dans le même
traitement que dDébutDessin...
dFinDessin(Image1)
dFinDessin(Image2)
dFinDessin(Image3)
dFinDessin(Image4)
dFinDessin(Image5)

// En option : supprime les bmp dynamiques
fSupprime(gImage1)
fSupprime(gImage2)
fSupprime(gImage3)
fSupprime(gImage4)
fSupprime(gImage5)


Demandé et répondu par R&B le 27-Sep-2004 12:14 (2997 Lectures)
Info/Erreur/Ouinon personnalisées
Posté à P. Burton sur ozdev.net et traduit ici bas, cette astuce ne vaut que pour wd7.5 :

Aller dans ProjetDescription du projet/Onglet Style
Cocher la dernière case : 'Appliquer le thème de gabarit sur les fenêtre d'information système...'
Voila
Une fenêtre est créée 'WindevMessageBox', lui appliquer le style que l'on veux. Mais NE PAS modifier le reste (codes icones...).
Maintenant elle sera appelée à chaque appel de Info() ou Erreur().


Merci Peter


Demandé et répondu par R&B le 27-Sep-2004 12:14 (5299 Lectures)
Supprimer un champ créé avec ChampClone()
ChampClone permet de créer une copie de champs existant dans une fenêtre.

L'inverse est possible par l'API
AppelDLL32('user32','DestroyWindow',handle(cNomChamp))


Limites (résolue avec WinDev 8 et ChampSupprime) :
- Pour les champs composés (tables, onglets...) cela ne marche pas ! il faudrait disposer du handle du composant (colonne, volet) et tester.
- Impossible de réutiliser un champ cloné puis supprimé. Si l'API supprime le contrôle dans la fenêtre, le contexte fenêtre de WinDev n'est pas rafraîchit (le champ existe encore).


<1...3456
Connexion
Menu
Chercher WDForge
Chercher Web
Partenaires
Visualiser tous les Partenaires...
WinDev, WebDev, WinDev Mobile et HyperFile sont des marques déposées par PCSoft. |  Voter |  Legal |  Contact |   XOOPS 2.0.13.2