Accueil > FAQ | FAQ |
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.
Voici la liste des principales catégories et de leurs sous-catégories. Choisissez une catégorie pour voir les Q&R.
Ici, la liste des dernières Q&R publiées.
Demandé et répondu par R&B le 27-Sep-2004 12:14 (12101 Lectures)
Trouver le pilote ODBC Hyperfile
Pour trouver le driver ODBC sur les fichier HF
Version 7 :
http://www.pcsoft.fr/st/telec/windev7/index.html
et sélectionner la page de la dernière version
dans cette page aller en bas dans le paragraphe téléchargement :
"ODBC sur HF (optionnel)" et prendre le fichier
Version 5.5 :
contacter les services commerciaux PCSoft : pcsoft@pcsoft.fr
Précision : Les drivers ODBC HF sont en lecture seule !
Version 7 :
http://www.pcsoft.fr/st/telec/windev7/index.html
et sélectionner la page de la dernière version
dans cette page aller en bas dans le paragraphe téléchargement :
"ODBC sur HF (optionnel)" et prendre le fichier
Version 5.5 :
contacter les services commerciaux PCSoft : pcsoft@pcsoft.fr
Précision : Les drivers ODBC HF sont en lecture seule !
Demandé et répondu par R&B le 27-Sep-2004 12:14 (3225 Lectures)
WinDev devient fou
Si votre WinDev devient fou (comportements bizarre de l'environnement...) :
1. Fermez WD,
2. Ouvrez Regedit
3. Supprimez HKEY_CURRENT_USER/Software/PC SOFT/WinDev8.0 !
Il sera recréé tout propre au prochain redémarrage de WD, moyennant les quelques questions du nouveau produit.
(extrait du NG officiel)
1. Fermez WD,
2. Ouvrez Regedit
3. Supprimez HKEY_CURRENT_USER/Software/PC SOFT/WinDev8.0 !
Il sera recréé tout propre au prochain redémarrage de WD, moyennant les quelques questions du nouveau produit.
(extrait du NG officiel)
Demandé et répondu par KPiTN le 27-Sep-2004 12:14 (5146 Lectures)
Comment faire disparaitre l'alerte d'Outlook "Un programme tente d'accéder..."
Tout d'abord il faut télécharger un programme ici :
http://www.express-soft.com/mailmate/clickyes.html
comme il est dit sur le site, Outlook Express ne fait pas apparaître cette fenêtre si on change cela dans les options.
Ce code permet de lancer le logiciel qui va faire disparaître la fenêtre d'alerte, le temps que vous fassiez vos traitements.
Récupérer juste l'exécutable : ClickYes.exe
Que vous allez mettre dans votre répertoire du logiciel
----------------------------------------------------------------------
Ensuite dans l'initialisation de la fenêtre :
-----------------------------------------------------------------------
// Register a message to send
uClickYes = AppelDLL32("User32","RegisterWindowMessageA","CLICKYES_SUSPEND_RESUME")
// Find ClickYes Window by classname
wnd =AppelDLL32("USER32","FindWindowA","EXCLICKYES_WND",0)
SI wnd=0 ALORS
//appli non lancée
LanceAppli(RepDuLogiciel + "clickyes.exe", exeIconise, Faux)
Multitache(10)
// Register a message to send
uClickYes = AppelDLL32("User32","RegisterWindowMessageA","CLICKYES_SUSPEND_RESUME")
// Find ClickYes Window by classname
wnd =AppelDLL32("USER32","FindWindowA","EXCLICKYES_WND",0)
FIN
// Send the message to Resume ClickYes
Res = SendMessage(wnd, uClickYes, 1, 0)
----------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------
Dans le code de fermeture de la fenêtre
----------------------------------------------------------------------
SendMessage(wnd, uClickYes, 0, 0)
ExeTermine(RepDuLogiciel + "clickyes.exe")
-----------------------------------------------------------------
http://www.express-soft.com/mailmate/clickyes.html
comme il est dit sur le site, Outlook Express ne fait pas apparaître cette fenêtre si on change cela dans les options.
Ce code permet de lancer le logiciel qui va faire disparaître la fenêtre d'alerte, le temps que vous fassiez vos traitements.
Récupérer juste l'exécutable : ClickYes.exe
Que vous allez mettre dans votre répertoire du logiciel
----------------------------------------------------------------------
Ensuite dans l'initialisation de la fenêtre :
-----------------------------------------------------------------------
// Register a message to send
uClickYes = AppelDLL32("User32","RegisterWindowMessageA","CLICKYES_SUSPEND_RESUME")
// Find ClickYes Window by classname
wnd =AppelDLL32("USER32","FindWindowA","EXCLICKYES_WND",0)
SI wnd=0 ALORS
//appli non lancée
LanceAppli(RepDuLogiciel + "clickyes.exe", exeIconise, Faux)
Multitache(10)
// Register a message to send
uClickYes = AppelDLL32("User32","RegisterWindowMessageA","CLICKYES_SUSPEND_RESUME")
// Find ClickYes Window by classname
wnd =AppelDLL32("USER32","FindWindowA","EXCLICKYES_WND",0)
FIN
// Send the message to Resume ClickYes
Res = SendMessage(wnd, uClickYes, 1, 0)
----------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------
Dans le code de fermeture de la fenêtre
----------------------------------------------------------------------
SendMessage(wnd, uClickYes, 0, 0)
ExeTermine(RepDuLogiciel + "clickyes.exe")
-----------------------------------------------------------------
Demandé et répondu par R&B le 27-Sep-2004 12:14 (3190 Lectures)
Graver des CD
Information reportée ici car lue régulièrement.
Sous Windows XP, La simple présence d'un disque dans le graveur suffit. La copie de fichiers est alors possible vers le lecteur. Windows XP gère l'écriture normalement grâce à HighMat).
Sinon installer INCD de Nero qui est un composant ad hoc à votre sytème et permet donc aussi la copie simple sur le graveur.
Sous Windows XP, La simple présence d'un disque dans le graveur suffit. La copie de fichiers est alors possible vers le lecteur. Windows XP gère l'écriture normalement grâce à HighMat).
Sinon installer INCD de Nero qui est un composant ad hoc à votre sytème et permet donc aussi la copie simple sur le graveur.
Demandé et répondu par Mbsl le 27-Sep-2004 12:14 (4687 Lectures)
Utilisation de mailto avec des RC dans le corps
Windev 7.5
Outlook 2000
WK 2000 PRO
Dans la codification suivante :
LanceAppliAssociée("mailto: "+...
"?subject=" + W_C_Sujet + ...
"&body=" + W_C_Corps)
si w_c_corps contient des rc, il ne sont pas pris en compte. Il faut les remplacer par %0A.
Voir dans la Base de connaissances Microsoft - 192341
Mickael
Outlook 2000
WK 2000 PRO
Dans la codification suivante :
LanceAppliAssociée("mailto: "+...
"?subject=" + W_C_Sujet + ...
"&body=" + W_C_Corps)
si w_c_corps contient des rc, il ne sont pas pris en compte. Il faut les remplacer par %0A.
Voir dans la Base de connaissances Microsoft - 192341
Mickael
Demandé et répondu par R&B le 27-Sep-2004 12:14 (4053 Lectures)
Mise à jour automatique des données 'facile'
Source : NG fcdaw
Voici une ligne de commande trés utile pour proposer une mise à jour automatique des données quand on n'utilise pas WDSetup.
Voici une ligne de commande trés utile pour proposer une mise à jour automatique des données quand on n'utilise pas WDSetup.
LanceAppli("WdmodFic.exe -nobacjup /WDD=MonAnalyse.wdd /DIR=fNomCourt(ls_NomRepertoire), exeActif, exeBloquant)
Demandé et répondu par R&B le 27-Sep-2004 12:14 (5687 Lectures)
Magenta des bmp et boutons
L'affectation d'un BMP en image à un bouton en utilisant le parcours de fichiers ou en saisissant nom complet du fichier (description>Général>image), il arrive que le magenta (transparent) du bmp ne soit pas ignoré.
Solution :
Utiliser le bouton 'Catalogue' et sélectionner la collection 'Répertoire'.
Y sélectionner une des images de votre projet et valider.
Cette méthode permet de palier au problème de transparence du magenta pour les bmp.
Solution :
Utiliser le bouton 'Catalogue' et sélectionner la collection 'Répertoire'.
Y sélectionner une des images de votre projet et valider.
Cette méthode permet de palier au problème de transparence du magenta pour les bmp.
Demandé et répondu par R&B le 27-Sep-2004 12:14 (3474 Lectures)
5.5 ressources basses
Emis par Kristian Paradis sur le forum daussy.org
"Bonjour a tous,
Je suis sur que je ne suis pas le seul qui lorsqu'il démarre l'application en mode test se fait souvent dire par windev qu'il reste moins de 25% de ressources gdi et user blablabla....
J'ai essayé cette astuce que j'ai trouvé sur un site de hardware (http://www.inpact-hardware.com/)
et ca semble bien fonctionner. (je n'ai pas eu le message depuis)
dans win.ini section windows ajouter la ligne:
GDIMaxHeapSize=32767
ATTENTION! 32768 a la valeur UserMaxHeapSize rend impossible le démarrage de windows... même en mode sans échec!!!
Ne pas mettre plus, j'ai essayé et windows refuse de démarrer GDI.exe et on me demande de réinstaller windows (même chose avec 32768).
J'espère que ca réglera les ennuis de plusieurs
Bon développement
Kristian Paradis
"Bonjour a tous,
Je suis sur que je ne suis pas le seul qui lorsqu'il démarre l'application en mode test se fait souvent dire par windev qu'il reste moins de 25% de ressources gdi et user blablabla....
J'ai essayé cette astuce que j'ai trouvé sur un site de hardware (http://www.inpact-hardware.com/)
et ca semble bien fonctionner. (je n'ai pas eu le message depuis)
dans win.ini section windows ajouter la ligne:
GDIMaxHeapSize=32767
ATTENTION! 32768 a la valeur UserMaxHeapSize rend impossible le démarrage de windows... même en mode sans échec!!!
Ne pas mettre plus, j'ai essayé et windows refuse de démarrer GDI.exe et on me demande de réinstaller windows (même chose avec 32768).
J'espère que ca réglera les ennuis de plusieurs
Bon développement
Kristian Paradis
Demandé et répondu par R&B le 27-Sep-2004 12:14 (4403 Lectures)
Simuler clic sur un bouton dans une autre application
Question postée sur le forum de daussy.org
réponse pas freddyp@wanadoo.fr :
réponse pas freddyp@wanadoo.fr :
lpBName est chaine asciiz de 128
lpBClass est chaine asciiz de 128
lpBName='Titre Fenetre' // Titre de la fenetre contenant le bouton
lpBClass='#32770' // Classe de la fenetre
NumFen est entier long=Appeldll32('USER32','FindWindowExA',Null,Null,&lpBClass,&lpBName)
si NumFen>0 alors
lpBName='Bouton' // Nom du bouton
lpBClass='Button' // Class Button
NumBtn est entier long=Appeldll32('USER32','FindWindowExA',NumFen,null,&lpBClass,&lpBName)
si NumBtn>0 alors
Post3 =postmessage(NumBtn,245,null,null) // BM_CLICK
fin
fin
Demandé et répondu par R&B le 27-Sep-2004 12:14 (5946 Lectures)
Modifier la résolution ecran
Auteur du code : Philippe RAMIN
Voila, un grand merci à Philippe Ramin pour cette trouvaille
Déclaration de la structure DEVMOD dans le code du projet
DEVMODEA est une structure
dmDeviceName est une chaîne fixe sur 32 //Type C : BYTE
dmSpecVersion est un entier sur 2 octets //Type C : WORD
dmDriverVersion est un entier sur 2 octets //Type C : WORD
dmSize est un entier sur 2 octets //Type C : WORD
dmDriverExtra est un entier sur 2 octets //Type C : WORD
dmFields est un entier //Type C : DWORD
dmOrientation est un entier sur 2 octets //Type C : short
dmPaperSize est un entier sur 2 octets //Type C : short
dmPaperLength est un entier sur 2 octets //Type C : short
dmPaperWidth est un entier sur 2 octets //Type C : short
dmScale est un entier sur 2 octets //Type C : short
dmCopies est un entier sur 2 octets //Type C : short
dmDefaultSource est un entier sur 2 octets //Type C : short
dmPrintQuality est un entier sur 2 octets //Type C : short
dmColor est un entier sur 2 octets //Type C : short
dmDuplex est un entier sur 2 octets //Type C : short
dmYResolution est un entier sur 2 octets //Type C : short
dmTTOption est un entier sur 2 octets //Type C : short
dmCollate est un entier sur 2 octets //Type C : short
dmFormName est une chaîne fixe sur 32 //Type C : BYTE
dmLogPixels est un entier sur 2 octets //Type C : WORD
dmBitsPerPel est un entier //Type C : DWORD
dmPelsWidth est un entier //Type C : DWORD
dmPelsHeight est un entier //Type C : DWORD
dmDisplayFlags est un entier //Type C : DWORD
dmDisplayFrequency est un entier //Type C : DWORD
dmICMMethod est un entier //Type C : DWORD
dmICMIntent est un entier //Type C : DWORD
dmMediaType est un entier //Type C : DWORD
dmDitherType est un entier //Type C : DWORD
dmICCManufacturer est un entier //Type C : DWORD
dmICCModel est un entier //Type C : DWORD
dmPanningWidth est un entier //Type C : DWORD
dmPanningHeight est un entier //Type C : DWORD
FIN
CONSTANTE DM_BITSPERPEL=262144
CONSTANTE DM_PELSWIDTH=524288
CONSTANTE DM_PELSHEIGHT=1048576
CONSTANTE DM_DISPLAYFREQUENCY=4194304
CONSTANTE CDS_TEST=2
CONSTANTE CDS_UPDATEREGISTRY=1
CONSTANTE CDS_TEMP=0
Listage des résolutions dans un tableau
// code de la fenetre :
dm est une DEVMODEA
iModeNum est un entier
TANTQUE API('USER32','EnumDisplaySettingsA',Null,iModeNum,&dm)
TableAjouteLigne(TableResolutions,dm:dmDeviceName,dm:dmBitsPerPel,dm:dmPelsW
idth,dm:dmPelsHeight,dm:dmDisplayFrequency)
iModeNum++
FIN
Bouton1 = Check si la résolution est Ok (ne modifie rien)
SI TableSelectOccurrence(TableResolutions)=0 ALORS RETOUR
dmtemp est une DEVMODEA
dmtemp:dmBitsPerPel=TableResolutions.dmBitsPerPel
dmtemp:dmPelsHeight=TableResolutions.dmPelsHeight
dmtemp:dmPelsWidth=TableResolutions.dmPelsWidth
dmtemp:dmDisplayFrequency=TableResolutions.dmDisplayFrequency
dmtemp:dmFields=OUBinaire(dmtemp:dmFields,DM_BITSPERPEL)
dmtemp:dmFields=OUBinaire(dmtemp:dmFields,DM_PELSWIDTH)
dmtemp:dmFields=OUBinaire(dmtemp:dmFields,DM_PELSHEIGHT)
dmtemp:dmFields=OUBinaire(dmtemp:dmFields,DM_DISPLAYFREQUENCY)
dmtemp:dmSize=Dimension(dmtemp)
SI API('user32','ChangeDisplaySettingsA',&dmtemp, CDS_TEST)<>0 ALORS
Erreur(ErreurInfo())
FIN
Bouton2 = Modification temporaire de la résolution
// Idem que le bouton 1 mais mettre le flag à 0 //
SI TableSelectOccurrence(TableResolutions)=0 ALORS RETOUR
dmtemp est une DEVMODEA
dmtemp:dmBitsPerPel=TableResolutions.dmBitsPerPel
dmtemp:dmPelsHeight=TableResolutions.dmPelsHeight
dmtemp:dmPelsWidth=TableResolutions.dmPelsWidth
dmtemp:dmDisplayFrequency=TableResolutions.dmDisplayFrequency
dmtemp:dmFields=OUBinaire(dmtemp:dmFields,DM_BITSPERPEL)
dmtemp:dmFields=OUBinaire(dmtemp:dmFields,DM_PELSWIDTH)
dmtemp:dmFields=OUBinaire(dmtemp:dmFields,DM_PELSHEIGHT)
dmtemp:dmFields=OUBinaire(dmtemp:dmFields,DM_DISPLAYFREQUENCY)
dmtemp:dmSize=Dimension(dmtemp)
SI API('user32','ChangeDisplaySettingsA',&dmtemp, CDS_TEMP)<>0 ALORS
Erreur(ErreurInfo())
FIN
Bouton3 = Modification permanente (maj de la base de registre)
// Idem que le bouton 1 mais mettre le flag à 1 //
SI TableSelectOccurrence(TableResolutions)=0 ALORS RETOUR
dmtemp est une DEVMODEA
dmtemp:dmBitsPerPel=TableResolutions.dmBitsPerPel
dmtemp:dmPelsHeight=TableResolutions.dmPelsHeight
dmtemp:dmPelsWidth=TableResolutions.dmPelsWidth
dmtemp:dmDisplayFrequency=TableResolutions.dmDisplayFrequency
dmtemp:dmFields=OUBinaire(dmtemp:dmFields,DM_BITSPERPEL)
dmtemp:dmFields=OUBinaire(dmtemp:dmFields,DM_PELSWIDTH)
dmtemp:dmFields=OUBinaire(dmtemp:dmFields,DM_PELSHEIGHT)
dmtemp:dmFields=OUBinaire(dmtemp:dmFields,DM_DISPLAYFREQUENCY)
dmtemp:dmSize=Dimension(dmtemp)
SI API('user32','ChangeDisplaySettingsA',&dmtemp, CDS_UPDATEREGISTRY)<>0
ALORS
Erreur(ErreurInfo())
FIN
Conclusion
Voila, un grand merci à Philippe Ramin pour cette trouvaille
Demandé et répondu par R&B le 27-Sep-2004 12:14 (4939 Lectures)
Lister les processus NT
Merci à DrCharly93 pour ce post sur le NG PCSoft:
Comment lister les processus et modules en cours
Comment lister les processus et modules en cours
Voici un bout de code trouver il y a longtemps sur internet
Procédure ProcesNT()
// Liste des process et modules sous NT
// Ce module pour fonctionner correctement doit être lancer dans une
// fenêtre disposant d'une table 'TABLE1' composer de 5 colonnes
// id numérique entier (index dans la liste)
// cProcessID texte
// cProcessName texte
// cModuleName texte
// cPathName texte
// Un interrupteur 'INTMODULE' permet de n'afficher
// que les process (INTMODULE=0)
// ou les process et modules correspondants (INTMODULE=1)
//
LOCAL
idTabProcess est un tableau de 200 entiers longs
Cb est un entier long=800 // taille en octets du tableau idTabProcess
CbNeeded est un entier long
NumElements est un entier long
hTabModule est un tableau de 200 entiers longs
Cb2 est un entier long=800 // taille en octets du tableau hTabModule
CbNeeded2 est un entier long
NumModules est un entier long
Pname est une chaine
FileName est une chaine fixe sur 260
BaseName est une chaine fixe sur 260
nSize est un entier long=260 // taille de FileName et BaseName
lret,l1,l2 est un entier long
hProcess est un entier long
i,i2 est un entier long
NumDll est un entier long
NumDll=chargedll('PSAPI.DLL')
si NumDll=0 alors
erreur('La dll PSAPI n'a pas été chargée')
renvoyer faux
fin
//
// The EnumProcesses function retrieves the process identifier
// for each process object in the system.
//
// BOOL EnumProcesses(
// DWORD * lpidProcess, // array to receive the process identifiers
// DWORD cb, // size of the array
// DWORD * cbNeeded // receives the number of bytes returned
// );
Lret=appeldll32('PSAPI.DLL','EnumProcesses',&idTabProcess,Cb,&CbNeeded)
NumElements=CbNeeded/4 // Taille renvoyée divisée par la taille d'un
entier long (4 octets)
Pour i=1 a NumElements
//
// The OpenProcess function returns a handle to an existing process object.
//
// HANDLE OpenProcess(
// DWORD dwDesiredAccess, // access flag
// BOOL bInheritHandle, // handle inheritance flag
// DWORD dwProcessId // process identifier
// );
//
HProcess=appeldll32('KERNEL32.DLL','OpenProcess',oubinaire(1024,16),0,idTabP
rocess[i])
si HProcess<>0 alors // On a un processus. On va rechercher ses modules.
//
// The EnumProcessModules function retrieves a handle for each module
// in the specified process.
//
// BOOL EnumProcessModules(
// HANDLE hProcess, // handle to the process
// HMODULE * lphModule, // array to receive the module handles
// DWORD cb, // size of the array
// LPDWORD lpcbNeeded // receives the number of bytes returned
// );
// Process_Query_Information=1024
// Process_All_Access=16
//
Lret=Appeldll32('PSAPI.DLL','EnumProcessModules',Hprocess,&hTabModule,Cb2,&C
bNeeded2)
si LRet<>0 alors
NumModules=CbNeeded2/4
SI INTMODULE=0 alors NumModules=1
Pour i2=1 a NumModules
// The GetModuleBaseName function retrieves the base name of the
specified module.
//
//DWORD GetModuleBaseName(
// HANDLE hProcess, // handle to the process
// HMODULE hModule, // handle to the module
// LPTSTR lpBaseName, // buffer that receives the base name
// DWORD nSize // size of the buffer
//);
L1=Appeldll32('PSAPI.DLL','GetModuleBaseNameA',HProcess,hTabModule[i2]
....
,&BaseName,nSize)
SI L1=0 alors BaseName=''
Si i2=1 alors Pname=minuscule(BaseName[[1 à L1]])
//
// The GetModuleFileNameEx function retrieves the fully qualified path
// for the specified module.
//
// DWORD GetModuleFileNameEx(
// HANDLE hProcess, // handle to the process
// HMODULE hModule, // handle to the module
// LPTSTR lpFilename, // buffer that receives the path
// DWORD nSize // size of the buffer
// );
//
L2=Appeldll32('PSAPI.DLL','GetModuleFileNameExA',HProcess,hTabModule[i2] ...
,&FileName,nSize)
Si L2=0 alors FileName=''
TABLEAJOUTE('TABLE1',i+i2/1000+TAB+idTabProcess[i]+TAB+PName+...
TAB+Minuscule(BaseName[[1 à L1]])+...
tab+Minuscule(FileName[[1 a L2]]))
fin
fin
LRet=Appeldll32('KERNEL32.DLL','CloseHandle',HProcess)
FIN
fin
si NumDll<>0 alors
dechargedll(NumDll)
fin
Demandé et répondu par Bassy le 27-Sep-2004 12:14 (3436 Lectures)
Vider la Corbeille Windows
Le code d'utilisation d'API Windows pour vider la Corbeille est :
LA_CONFIR=0x00000000 // Avec message de confirmation
LA_CONFIR=0x00000001 // Sans confirmation
LA_CONFIR=0x00000000 // Sans jauge
LA_CONFIR=0x00000000 // Sans les effets sonores
LA_CONFIR est un entier sur 8 octets=0x00000000
AppelDLL32( "shell32.dll" , "SHEmptyRecycleBinA" , Handle() , Null ,&LA_CONFIR)
LA_CONFIR=0x00000000 // Avec message de confirmation
LA_CONFIR=0x00000001 // Sans confirmation
LA_CONFIR=0x00000000 // Sans jauge
LA_CONFIR=0x00000000 // Sans les effets sonores
Demandé et répondu par KPiTN le 27-Sep-2004 12:14 (4100 Lectures)
Partager un repertoire windows
On va utilisez l'api netapi32.dll
plus d'info : NetShareAdd et SHARE_INFO_2
plus d'info : NetShareAdd et SHARE_INFO_2
//partage d'un repertoire
STYPE_DISKTREE est un entier = 0
//permissions
ACCESS_READ est un entier = 0x1
ACCESS_WRITE est un entier = 0x2
ACCESS_CREATE est un entier = 0x4
ACCESS_EXEC est un entier = 0x8
ACCESS_DELETE est un entier = 0x10
ACCESS_ATRIB est un entier = 0x20
ACCESS_PERM est un entier = 0x40
SHARE_INFO_2 est une structure
shi2_netname est un entier
shi2_type est un entier
shi2_remark est un entier
shi2_permissions est un entier
shi2_max_uses est un entier
shi2_current_uses est un entier
shi2_path est un entier
shi2_passwd est un entier
FIN
si2 est un SHARE_INFO_2
Nom_Partage est une chaîne UNICODE = AnsiVersUnicode("test") //nom du partage
Description_Partage est une chaîne UNICODE = AnsiVersUnicode("description de mon partage") //Description du partage
Chemin_Partage est une chaîne UNICODE = AnsiVersUnicode("c:test") //Chemin du partage
Password_Partage est une chaîne="pitleda" // Mot de passe du partage
ServeurName_Partage est une chaîne UNICODE = AnsiVersUnicode("\monpc") //Nom du serveur
success est un entier
si2:shi2_netname=&Nom_Partage // nom du partage
si2:shi2_type=STYPE_DISKTREE //Partager koi ? ici un repertoire
si2:shi2_remark=&Description_Partage //&Description_Partage // commentaire
si2:shi2_permissions=ACCESS_READ //acces en lecture
si2:shi2_max_uses=-1 //illimlité
//si2:shi2_current_uses=
si2:shi2_path=&Chemin_Partage
si2:shi2_passwd=&Password_Partage
success=API("netapi32.dll","NetShareAdd",&ServeurName_Partage,2,&si2,Null)
MessageErreur est une chaîne
SELON success
CASE 0
MessageErreur="Partage Effectué"
CASE 5
MessageErreur="ERREUR: Vous n'avez pas acces à la fonction demandé."
CASE 50
MessageErreur="ERREUR: Le partage n'est pas supporté."
CASE 53
MessageErreur="ERREUR: Le chemin du partage n'est pas correct."
CASE 87
MessageErreur="ERREUR: Un Paramètre est invalide."
CASE 123
MessageErreur="ERREUR: Le nom n'est pas valide."
AUTRE CAS
MessageErreur="ERREUR inconue"
FIN
Demandé et répondu par R&B le 27-Sep-2004 12:14 (3368 Lectures)
Hyperfile sur Samba
Source : NG officiel (Adrien)
il y a des paramètres a modifier dans le fichier smb.conf qui se trouve communément sous /etc/samba.
redémarrer le service !
il y a des paramètres a modifier dans le fichier smb.conf qui se trouve communément sous /etc/samba.
[global]
locking = yes
strict locking = yes
share modes = yes
oplocks = no
kernel oplocks = no
blocking locks = no
fake oplocks = no
level2 oplocks = no
redémarrer le service !
Demandé et répondu par R&B le 27-Sep-2004 12:14 (5036 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 (6956 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 (4700 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
Demandé et répondu par R&B le 27-Sep-2004 12:14 (3767 Lectures)
Imprimer une page de site internet
Merci à Firetox pour cette soumission :
pour ceux qui comme moi on chercher un moment comment imprimer une page Web sans passer par un activeX.
l'interet etant d''utiliser en WD7.5 le iapercu(ihtml,MonFic.htm) et ensuite transferer ce fichier . Mais un beau jour vouloir l'imprimer sans qu'aucune question soit poser etc .....
voici le bout de code :
Penser à liberer l'objet dynamique après impression....
Complément de drCharly
Après moulte recherche, je me suis apercu que l'on pouvait imprimer une page internet sans faire apparaitre la boite de propriété de l'impresssion
Cela devrait éviter plusieurs jour de recherche.
pour ceux qui comme moi on chercher un moment comment imprimer une page Web sans passer par un activeX.
l'interet etant d''utiliser en WD7.5 le iapercu(ihtml,MonFic.htm) et ensuite transferer ce fichier . Mais un beau jour vouloir l'imprimer sans qu'aucune question soit poser etc .....
voici le bout de code :
NomFic est une chaine = 'D:TestRTF.HTM'
monIe est un objet ole dynamique
si monie = null alors monie = allouer un objet OLE 'InternetExplorer.application'
si monie <> NULL ALORS
monie>>visible=olefaux
// on charge le document Word
monie>>navigate(nomfic)//,olefaux,olevrai)
tantque monIe>>busy
// attente de la fin du chargement de la page
FIN
monIe>>ExecWB(6,2)
FIN
Penser à liberer l'objet dynamique après impression....
liberer MonIe
Complément de drCharly
Après moulte recherche, je me suis apercu que l'on pouvait imprimer une page internet sans faire apparaitre la boite de propriété de l'impresssion
monIe>>ExecWB(6,2,0,0)
Cela devrait éviter plusieurs jour de recherche.
Demandé et répondu par R&B le 27-Sep-2004 12:14 (3571 Lectures)
Lire un champ appartenant à une autre fenêtre
Question récurente s'il en est.... et la solution est pourtant si simple
Prenons deux fenêtre (fen1 et fen2), la première contient un table dont je veux récupérer des valeur dans du code de la seconde.
Les deux fenêtres doivent évidement être ouvertes.
Pour utiliser des champs d'autres fenêtres actives il faut utiliser l'indirection (consulter l'aide sur le sujet, c'est une des notions puissantes de windev) :
nb, la seconde syntaxe interprète la chaine pour construire le nom du champ. on peut donc construire le nom d'un champs avec des variables... trés utile pour économiser du code .
Prenons deux fenêtre (fen1 et fen2), la première contient un table dont je veux récupérer des valeur dans du code de la seconde.
Les deux fenêtres doivent évidement être ouvertes.
Pour utiliser des champs d'autres fenêtres actives il faut utiliser l'indirection (consulter l'aide sur le sujet, c'est une des notions puissantes de windev) :
// code dans FEN2
// syntaxe 1 : accès direct en utilisant le 'chemin' du champ
MaVal = fen1.table.colonne[indice]
// syntaxe 2 : on construit le nom du champ (son 'chemin') à partir d'une chaine, les signes {} activnt l'indirection
MaVal = {'fen1.table.colonne['+indice+']',indChamp}
nb, la seconde syntaxe interprète la chaine pour construire le nom du champ. on peut donc construire le nom d'un champs avec des variables... trés utile pour économiser du code .
Demandé et répondu par R&B le 27-Sep-2004 12:14 (3886 Lectures)
Appeler un traitement par une touche
Il est parfois nécessaire de ne rendre disponible des traitement que par une combinaison de touches.
Pour ce faire, la méthode la plus simple est de mettre le code dans un bouton, lequel est simlplement positionné en dehors de l'espace visible de la fenêtre. Evidement il ne faut pas omettre, dans la description du bouton d'affecter la lettre d'appel correspondante (les ALT et CRTL en combinaison sont utilisable).
La disponibilité de la touche de fonction est équivalente à celle du bouton. Attention donc au multifenêtrage et aux plans.
Pour les plans, si le bouton est affecté à un plan, la touche ne sera disponible que lorsque le plan sera actif...
Pour ce faire, la méthode la plus simple est de mettre le code dans un bouton, lequel est simlplement positionné en dehors de l'espace visible de la fenêtre. Evidement il ne faut pas omettre, dans la description du bouton d'affecter la lettre d'appel correspondante (les ALT et CRTL en combinaison sont utilisable).
La disponibilité de la touche de fonction est équivalente à celle du bouton. Attention donc au multifenêtrage et aux plans.
Pour les plans, si le bouton est affecté à un plan, la touche ne sera disponible que lorsque le plan sera actif...