Accueil > FAQ > WinDev Codes FAQ
 Résumé de la catégorie
Voici les informations en lien avec cette catégorie.
Catégorie Q&R Dernières Q&R publiées
 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

 
Demandé et répondu par Thernius le 28-Sep-2004 11:19 (4218 Lectures)
Comment changer le libellé d'option d'un interrupteur ?
Lorsque l'on parcourt les propriétés associées à ce type de champ, on ne trouve pas la propriété Option, quant à l'option libellé, elle correspond en fait au libellé du groupe d'option (qu'il y ait une ou plusieurs options).

Après ce petit état des lieux, voici la solution :

<InterrupteurNom>[NumeroOrdre]..libellé = <LaChaineQueVousSouhaitez>


Remarque :
A savoir que le 'NumeroOrdre' commence à 1.
Vous pouvez connaître le nombre d'options d'un interrupteur en effectuant :

eOptionsNombre est un entier = 0
eOptionsNombre = <InterrupteurNom>..Occurence


Voilà.


Demandé et répondu par R&B le 05-Oct-2004 15:47 (5651 Lectures)
Comment connaitre le nom d'une option de menu à partir de son identifiant
L'énumération des élements apparue avec WinDev 7 permet bien des choses...

Dans le cas présent une procédure pour connaitre le nom d'une option de menu à partir de son identifiant (pratique pour en constituer une liste)

// Retourne le nom d'une option de menu à partir de son N° ID
PROCEDURE MenuNom(sParent,nNumOption, nNiveau=0)
// L'appel est du type :
//	MenuNom(NomFenêtre,NumOption)
//		NomFenêtre	= Nom de la fenêtre contenant le menu à parcourir
//		NumOption	= Numéro de l'option recherchée
sRetour est une chaîne		// nom de l'option ayant pour ID nNumOption
// énumération des options de menu
sOption est une chaîne=EnumèreSousElément(sParent,enumPremier+enumMenuPrincipal)

// il ne faut pas mettre le nom du menu
SI nNiveau=0 ET sOption<>"" ALORS
	sRetour=MenuNom(sParent+"."+sOption,nNumOption,nNiveau+1)
FIN
TANTQUE sOption<>"" ET sRetour=""
	// nom complet de l'option de menu
	sNomComplet est une chaîne=sParent+"."+sOption
	SI {sNomComplet}..Valeur=nNumOption ALORS
		sRetour=sNomComplet
	SINON
		// remplit les options du niveau supérieur
		sRetour=MenuNom(sParent+"."+sOption,nNumOption,nNiveau+1)
	FIN
	// option suivante
	sOption=EnumèreSousElément(sParent)
FIN
RENVOYER sRetour


Exemple d'utilisation :
// copie la liste des options du menu dans le presse papier (pour excel)
i est un entier
ss,sm,sf sont des chaines
sf = FenEnExécution()
Sablier
POUR i=1 A 200
	Jauge(i,200)
	ss+=i+TAB+MenuNom(sf,i)+RC
FIN
Jauge
VersPressePapier(ss)

donne un résultat comme suit :
Citation :
1 Menu._Menu.Fichier
2 Menu._Menu.Fichier.Config
3 Menu._Menu.Fichier.Quitter
4 ...


Demandé et répondu par Floman321 le 23-Apr-2007 16:56 (4012 Lectures)
Comment changer l'image de fond d'un répertoire par programmation très simplement
Windows permet de changer l'image de fond d'un dossier en créant
via WinDev un fichier 'Desktop.ini' qui contiendra les paramètres nécessaires.

PROCEDURE Modifier_fonddossier(chemin_dossier,chemin_img est chaîne)

// on creer un fichier desktop.ini qui permet de personnaliser l'affichage du dossier
idfichier est un entier = fOuvre(chemin_dossier+"\desktop.ini",foCréationSiInexistant+foCréation)

// on lui met les paramètres voulu 
SI idfichier > 0 ALORS
fEcritLigne(idfichier,"[{BE098140-A513-11D0-A3A4-00C04FD706EC}]")
fEcritLigne(idfichier,"Attributes=1")
fEcritLigne(idfichier,"IconArea_Image="+chemin_img)

fFerme(idfichier)

// on met le fichier en mode caché
fAttribut("D:\Mes Projets\Dragmail\Exe\mails\desktop.ini","H")

// on met le repertoire en mode system
fRepAttribut("D:\Mes Projets\Dragmail\Exe\mails","S")


Demandé et répondu par R&B le 13-Oct-2004 14:10 (3617 Lectures)
Comment ajouter un guillement dans une chaine ?
Plusieurs manière sont disponibles :
- la première est de doubler chaque guillement comme suit :
info("hello ""word""")

- la seconde est d'insérer le caractère ascii correspondant
info("hello "+caract(34)+"word"+caract(34))


Demandé et répondu par Drcharly93 le 13-Dec-2004 18:08 (6346 Lectures)
Message d'attente pendant un traitement long ..Comment faire ?
Comment remplir une table avec un Thread ?
utiliser un simple Thread dans lequel vous effectuez une boucle sur vos données
Exemple avec une Source de Donnéées nommé Rs
La procédure appelée par le Thread : RemplieTable
Exécution du Thread
ThreadExécute("MonThread",threadNormal,"RemplieTable")
ThreadAttend("MonThread")

Code de la procédure RempliTable
PROCEDURE RemplieTable()
Sql est une Chaine = "SELECT ......."
Rs est une source de donnees

TableSupprimeTout(<MaTable>)
SI PAS HExecuteRequeteSql(Rs,HRequeteDefaut,Sql) Alors
  Retour
Fin
HLitPremier(Rs)
TANTQUE Pas HEndehors(Rs)
  TableAjoute(<MaTable>,HRécupèreEnregistrement(Rs)
  HLitSuivant(Rs)
FIN


Demandé et répondu par Drcharly93 le 13-Dec-2004 21:20 (6587 Lectures)
Comment détecter un clic sur une colonne d'une table ?
Créer un Evenement
Créer un Evenement() sur la table voulue avec le N° de message 1529
Evenement('Nom de la procédure','Nom de la table', 1529)

Créer la procédure
Dans cette exemple de code le nom des deux colonne de la table se nomment _COL1 et _COL2
Le tri est effectué ascendant sur _COL2 et descendant sur _COL1
Procédure 'Nom de la procedure' (pMessage,wParam,lParam)
//wParam contient le numéro de la colonne cliquée
SI .wParam = <N° de la colonne de la table> ALORS
    // cette affectation permet de ne pas activer le tri par défaut 
    _eve.Retour = 0
    TableTri("_COL2"+TAB+"-_COL1")
FIN


Demandé et répondu par Sogestion le 13-Jun-2005 08:02 (3999 Lectures)
Comment faire pour insérer, sous l'éditeur de code, une chaine en y intégrant les sauts de ligne ?
L'éditeur de code autorise l'utilisation des crochets [ ... ] pour encapluser une chaine dans le code comme dans l'exemple suivant concernant le texte de la requête :
SELON nType
CAS 6 : sIDCpte = "( '61', '62', '63', '64', '65', '66', '67', '68', '69' ) "
CAS 7 : sIDCpte = "( '70', '71', '72', '73', '74', '75' ) "
FIN

// [< Code requête >]
sReqSQL = [
SELECT SUM ( TotDébit ) AS TotalDébit , SUM ( TotCrédit ) AS TotalCrédit
FROM BalCompte
WHERE Exercice = '%1'
AND BalCompte.IDCompte IN %2
]

// [< Construire requête >]
sReqSQL = ChaîneConstruit(sreqSQL, sExerc, sIDCpte)

SI PAS HExécuteRequêteSQL(SrcReq, sReqSQL) ALORS



Demandé et répondu par R&B le 19-Jul-2005 22:55 (3992 Lectures)
POO : Comment manipuler l'instance en cours d'une classe dans celle-ci ?
Utiliser le mot-clé Objet
Voici donc enfin l'équivalent du This connu par ailleur.
Une classe peut donc retourner sont instance par une simple méthode :
PROCEDURE This()
RENVOYER objet

Idéal pour dupliquer les instances. Les membres privées sont bien copiés dans le nouvel objet et si l'un des membres publiques ou privées du premier objet sont modifiés ils ne le sont pas dans le deuxième.

On a donc bien une copie de l'instance dans une nouvelle instance et non deux intances qui pointent sur le meme objet.


Demandé et répondu par R&B le 14-Oct-2005 11:44 (5878 Lectures)
Comment télécharger un fichier Zip disponible sur Internet ?
Merci à PopCorn pour la trouvaille.

Voici le code pour télécharger : http://www.monsite.com/fichier.zip

// Définition des variables
ResAppel est un booléen
IdFichier est un entier

// Ouverture du fichier 
IdFichier = fOuvre("C:\test.zip", foCréation )
SI IdFichier <> -1 ALORS
	// Récupération du fichier zip
	ResAppel= HTTPRequête("http://www.monsite.com/fichier.zip")
	SI ResAppel = Vrai ALORS
		// Enregistrement du fichier zip
		fEcrit(IdFichier, HTTPDonneRésultat (), Taille( HTTPDonneRésultat ()))
	FIN
	// Fermeture du fichier
	fFerme(IdFichier)
FIN


Demandé et répondu par Totof le 04-Nov-2005 10:58 (5046 Lectures)
Comment éviter qu'un Thread soit bloqué par un appel à Info(), erreur() ou autres ?<br />
Dans l'aide windev il est indiqué :

Citation :
...
Les appels aux fonctions Info , Erreur , ... bloquent tous les threads en cours d'exécution.
...


OUI, mais il existe une solution pour éviter qu'ils ne soient bloqués.
- Allez dans Projet -> Description du projet -> Style
- Cochez la case : Appliquer le thème de gabarit sur les fenêtres d'informations système

A partir de maintenant, plus rien ne bloquera l'exécution de vos threads

bon threads,

Totof


Demandé et répondu par Drcharly93 le 10-Nov-2005 23:16 (4479 Lectures)
Comment convertir une valeur Hexadécimal en réel 32 bits
str4 est une structure
octet4 est un entier sans signe sur 1 octet
octet3 est un entier sans signe sur 1 octet
octet2 est un entier sans signe sur 1 octet
octet1 est un entier sans signe sur 1 octet
FIN

R est un réel sur 4 octets

vstr4 est un str4

vstr4:octet4 = 0x00
vstr4:octet3 = 0x00
vstr4:octet2 = 0xE8
vstr4:octet1 = 0x41

Transfer(&R, &vstr4, 4)

Info(R, "CQFD") // Affiche 29

Merci à Patrick Biker


Demandé et répondu par R&B le 30-Nov-2005 08:37 (5058 Lectures)
Comment obtenir la liste des répertoires d'un répertoire ?
// Les fichiers présents dans le répertoire courant
// sont affichés dans la liste "ListeFichiers"
ResFichier = fRep(completeRep(fRepEnCours())+"*.*", frRepertoire)
TANTQUE ResFichier <> ""
   ListeAjoute(ListeFichiers, ResFichier)
   ResFichier = fRep("", frFichier)
FIN


Demandé et répondu par Drcharly93 le 20-Aug-2007 10:47 (6582 Lectures)
Comment récupérer la liste des sous répertoires en une seule ligne
Sur une compil de plusieurs astuces concoctée par Florent MARULAZ
sRepertoire est une chaine = "c:\temp\*.*"
ListeAjoute(ListeFichiers,Remplace(ExtraitChaîne(NetListeRep (sRepertoire),1,RC),TAB,RC))


Demandé et répondu par Drcharly93 le 13-Jun-2007 15:13 (4151 Lectures)
Comment convertir un texte à la norme iso 89_50 ?
Suite à poste de Robert BuathierFabien sur ce sujet je retranscrit la réponse faite par COULLOMB sur news.pcsoft

PROCEDURE ConvertirVersISO89_50(text)

texteàconvertir est une chaîne = text
texteàconvertir = Remplace(texteàconvertir,"%","%25")
texteàconvertir = Remplace(texteàconvertir,"+","%2B")
texteàconvertir = Remplace(texteàconvertir," ","+")
texteàconvertir = Remplace(texteàconvertir,RC,"%0A")
texteàconvertir = Remplace(texteàconvertir,"$","%24")
texteàconvertir = Remplace(texteàconvertir,"&","%26")
texteàconvertir = Remplace(texteàconvertir,"'","%27")
texteàconvertir = Remplace(texteàconvertir,"(","%28")
texteàconvertir = Remplace(texteàconvertir,")","%29")
texteàconvertir = Remplace(texteàconvertir,",","%2C")
texteàconvertir = Remplace(texteàconvertir,"/","%2F")
texteàconvertir = Remplace(texteàconvertir,":","%3A")
texteàconvertir = Remplace(texteàconvertir,";","%3B")
texteàconvertir = Remplace(texteàconvertir,"<","%3C")
texteàconvertir = Remplace(texteàconvertir,"=","%3D")
texteàconvertir = Remplace(texteàconvertir,">","%3E")
texteàconvertir = Remplace(texteàconvertir,"?","%3F")
texteàconvertir = Remplace(texteàconvertir,"@","%40")
texteàconvertir = Remplace(texteàconvertir,"é","%E9")
texteàconvertir = Remplace(texteàconvertir,"è","%E8")
texteàconvertir = Remplace(texteàconvertir,"ù","%F9")

RENVOYER texteàconvertir


Demandé et répondu par Drcharly93 le 02-Apr-2007 15:15 (5413 Lectures)
Comment scroller un ascenseur horizontal dans une table par programmation ?
Le principe est d’envoyer un message à Windows concernant l’ascenseur :
//WM_HSCROLL est la constante Windows qui gére les ascenseurs
WM_HSCROLL est un entier   = 0x0114
ehandle est un entier
eNumMessage est un entier 
//Envoi du message
ehandle = Handle(Table)
eNumMessage = 7 
SendMessage(ehandle,WM_HSCROLL,eNumMessage,0)

//Voici les différentes valeurs que eNumMessage peut prendre pour WM_HSCROLL (horizontal) et WM_VSCROLL (vertical)
//SB_LINEUP           0
//SB_LINELEFT         0
//SB_LINEDOWN         1
//SB_LINERIGHT        1
//SB_PAGEUP           2
//SB_PAGELEFT         2
//SB_PAGEDOWN         3
//SB_PAGERIGHT        3
//SB_THUMBPOSITION    4
//SB_THUMBTRACK       5
//SB_TOP              6
//SB_LEFT             6
//SB_BOTTOM           7
//SB_RIGHT            7
//SB_ENDSCROLL        8


Origine de la source :
CodeWinDev.com.free.fr


Demandé et répondu par Drcharly93 le 10-Aug-2007 13:06 (5616 Lectures)
Comment détecter le clic droit sur un entête de colonne d'une table ?
Evenement('DetecteClicEnTete','Quelle table', 1529)

Donne
DetecteClicEnTete(locMessage,wParam,lParam)

on obtient dans wParam le n° de la colonne cliquée.

Marche très bien aussi


Demandé et répondu par Drcharly93 le 12-Mar-2008 17:02 (6890 Lectures)
Comment récupérer à partir d'un combo dans une table , la valeur retournée par gLien
Lorsqu'une colonne combo d'une table est chargée par programmation avec "ListeAjoute", et que chaque élément a un identifiant donné avec "gLien", la récupération de cet identifiant n'est pas immédiate.

D'abord il ne faut pas cocher l'option "retourner la valeur spécifiée avec la fonction gLien" dans le détail de la description de la colonne combo.

Ensuite il faut utiliser dans le code la syntaxe suivante :
  Info(NomTable.NomColonneCombo[NuméroLigne][NomTable.NomColonneCombo[NuméroLigne]]
//ou 
NomTable.NomColonneCombo[NuméroLigne][ListeSelect(NomTable.NomColonneCombo)]

Merci à
Elian Lacroix
http://elianlacroix.blogspot.com/2007/05/colonne-combo-dune-table-syntaxe-de.html
veDengaG


Demandé et répondu par R&B le 27-Sep-2004 12:14 (4964 Lectures)
hImporteTexte() sans délimiteur de chaînes
Souvent les fichiers à importer ne comportent que des délimiteurs de colonnes et de lignes.
Les chaînes ne sont pas encadrées par un délimiteur.

Pour exploiter ces fichier avec la hImporteTexte (plus performante qu'un parcours), il faut définir la chaine des délimiteur comme suit :

cSep est une chaine
cSep=TAB+caract(127)+RC
// intégration d'un fichier avec TAB en séparateur de colonnes et RC pour saut de lignes
//Ensuite utiliser l'option hImpSansDélimiteur :
hImporteTexte(fichier,rubriques,cSep,hImpSansDélimiteur)

Ainsi les colonnes seront correctement interprétées


Demandé et répondu par R&B le 27-Sep-2004 12:14 (6821 Lectures)
Fichier externe : lire le contenu hexadécimal
La lecture de la chaine hexa d'un fichier binaire peut être réalisée par la fonction flit() et moyennant un petit subterfuge dans la lecture des caractères. en effet flit() est conçue nativement pour une lecture de fichier texte et propose directement une conversion en code ascii des caractères lus.

L'idée est alors de d'utiliser la résolution automatique des types et un entier non signé sur 1 octet (0...255) facile à convertir en hexa.

Ensuite, on peut faire ce que l'on veut...
Bon dev.

cFichier est une chaine // contenu hexa du fichier
// Ouverture du fichier
nIdfic est un entier = fOuvre(MonFichier, foLecture)
SI nIdfic=-1 ALORS
    Erreur('L'ouverture du fichier a échoué')
SINON
    // récupère le nombre d'octets à lire 
    nbcar est un entier = fPositionne(nIdfic,0,fpFin)
    ncar est un entier
    fPositionne(nIdfic,0,fpDébut)
    sCar est un entier sans signe sur 1 octet
    fLit(nIdfic,1,&sCar)    // nouvelle syntaxe : par adresse
    TANTQUE ncar<nbcar
        ncar++
        // taitement de l'octet
        // conversion de l'entier en valeur hexa
        cfichier+=NumériqueVersChaine(sCar,'02X')
        // octet suivant                        
        fLit(nIdfic,1,&sCar)
    FIN
    // Fermeture du fichier
    fFerme(nIdfic)
FIN


Demandé et répondu par R&B le 27-Sep-2004 12:14 (4625 Lectures)
Conversion Octet - Binaire
Arpès lecture d'un fichier en héxadécimal, voici la conversion des octets en binaire.

Bon dev.

nA,nB sont des entiers sans signe sur 1 octet
nA=64
nB=255
Info(Octet2Bin(nA),Octet2Bin(nB))

donne 01000000 et 11111111

avec

PROCEDURE Octet2Bin(sCar est un entier sans signe sur 1 octet)
// conversion de l'octet en hexa
sHexa est une chaîne fixe sur 2 = NumériqueVersChaine(sCar,'02X')
// conversion de l'octet (hexa) en binaire
sres est une chaîne fixe sur 8
i est un entier
BOUCLE
        i++
        SELON sHexa[[i]]
                CAS 0:
                        sres[[(4*(i-1))+1 A (4*i)]]='0000'
                CAS        1:
                        sres[[(4*(i-1))+1 A (4*i)]]='0001'
                CAS 2:
                        sres[[(4*(i-1))+1 A (4*i)]]='0010'
                CAS 3:
                        sres[[(4*(i-1))+1 A (4*i)]]='0011'
                CAS 4:
                        sres[[(4*(i-1))+1 A (4*i)]]='0100'
                CAS        5:
                        sres[[(4*(i-1))+1 A (4*i)]]='0101'
                CAS        6:
                        sres[[(4*(i-1))+1 A (4*i)]]='0110'
                CAS        7:
                        sres[[(4*(i-1))+1 A (4*i)]]='0111'
                CAS        8:
                        sres[[(4*(i-1))+1 A (4*i)]]='1000'
                CAS        9:
                        sres[[(4*(i-1))+1 A (4*i)]]='1001'
                CAS 'A':
                        sres[[(4*(i-1))+1 A (4*i)]]='1010'
                CAS 'B':
                        sres[[(4*(i-1))+1 A (4*i)]]='1011'
                CAS 'C':
                        sres[[(4*(i-1))+1 A (4*i)]]='1100'
                CAS 'D':
                        sres[[(4*(i-1))+1 A (4*i)]]='1101'
                CAS 'E':
                        sres[[(4*(i-1))+1 A (4*i)]]='1110'
                CAS 'F':
                        sres[[(4*(i-1))+1 A (4*i)]]='1111'
        FIN
        SI i=2 ALORS SORTIR
FIN
RENVOYER sres


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