Accueil > FAQ > WinDev Codes | FAQ |
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 (4257 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 :
Remarque :
A savoir que le 'NumeroOrdre' commence à 1.
Vous pouvez connaître le nombre d'options d'un interrupteur en effectuant :
Voilà.
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 (5684 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)
Exemple d'utilisation :
donne un résultat comme suit :
Citation :
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 (4046 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.
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 (3654 Lectures)
Comment ajouter un guillement dans une chaine ?
Plusieurs manière sont disponibles :
- la première est de doubler chaque guillement comme suit :
- la seconde est d'insérer le caractère ascii correspondant
- 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 (6381 Lectures)
Message d'attente pendant un traitement long ..Comment faire ?
Comment remplir une table avec un Thread ?
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
Code de la procédure RempliTable
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 (6636 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
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
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 (4034 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 (4028 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 :
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.
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 (5937 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
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 (5088 Lectures)
Comment éviter qu'un Thread soit bloqué par un appel à Info(), erreur() ou autres ?<br />
Dans l'aide windev il est indiqué :
Citation :
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
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 (4515 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
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 (5092 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 (6693 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 (4199 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 (5462 Lectures)
Comment scroller un ascenseur horizontal dans une table par programmation ?
Le principe est d’envoyer un message à Windows concernant l’ascenseur :
Origine de la source :
CodeWinDev.com.free.fr
//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 (5665 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 (7058 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 :
Merci à
Elian Lacroix
http://elianlacroix.blogspot.com/2007/05/colonne-combo-dune-table-syntaxe-de.html
veDengaG
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 (5008 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 :
Ainsi les colonnes seront correctement interprétées
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 (6904 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.
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 (4670 Lectures)
Conversion Octet - Binaire
Arpès lecture d'un fichier en héxadécimal, voici la conversion des octets en binaire.
Bon dev.
donne 01000000 et 11111111
avec
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