Comment recuperer dynamiquement le nom des bacs d une imprimante (message de JCP sur le forum de pcsoft) ?
L ecran de parametrage des impressions (non affiche ici) permet de choisir les
imprimantes et bacs corespondant pour les 1ères et copies suivantes. Il est
compose de 2 combos et de 2 listes. Les combos affichent les imprimantes
presentes sur le poste (voir iListeImprimante()). Les listes affichent les bacs
des imprimantes selectionnees dans les combos grace à la procedure
Charge_Bacs(). La variable nCopie m indique de façon simple (et à ameliorer)
laquelle des combos est cliquee (1 ou 2) ce qui permet d effectuer les
traitements adequats (il serait egalement possible de passer en paramètre le
nom de la fenêtre et le nom des objets à traiter...).
PROCEDURE Charge_Bacs(nCopie)
// Declaration des variables
nbBac est un entier sur 4
sNomImp est une chaîne
sNomPort est une chaîne
nBoucle est un entier
sNomBac est chaîne
nCodeBac est entier
nPositionNull est un entier
tabNumerosBacs est un tableau dynamique de 1 entiers sur 2
sListeBacs est une chaîne
sNomImprimante est une chaîne
SI nCopie = 1 ALORS
sNomImprimante = COMBO_Imprimantes_PremiereCopie..ValeurAffichee
ListeSupprimeTout(LISTE_Bacs_PremiereCopie)
SINON
sNomImprimante = COMBO_Imprimantes_DeuxiemeCopie..ValeurAffichee
ListeSupprimeTout(LISTE_Bacs_DeuxiemeCopie)
FIN
// Constantes A DECLARER dans l initialisation du projet
//Constante
// API_NUMEROS_BACS = 6
// API_NOMS_BACS = 12
//FIN
// Selectionner l imprimante
iConfigure(sNomImprimante,Vrai)
sNomImp = iInfoImprimante(Vrai,iNomImprimante)
sNomPort = iInfoImprimante(Vrai,iNomPort)
// Chercher le nombre de bacs
nbBac = AppelDLL32("winspool.drv", "DeviceCapabilitiesA", sNomImp, sNomPort, API_NUMEROS_BACS, Null, 0)
SI nbBac ALORS
Dimension(tabNumerosBacs,nbBac)
nbBac = AppelDLL32("winspool.drv", "DeviceCapabilitiesA", sNomImp, sNomPort, API_NUMEROS_BACS, &tabNumerosBacs, 0)
sListeBacs = Repète(0,24 * nbBac)
nbBac = AppelDLL32("winspool.drv", "DeviceCapabilitiesA", sNomImp, sNomPort, API_NOMS_BACS, sListeBacs, 0)
POUR nBoucle = 1 TO nbBac
sNomBac = Milieu(sListeBacs, 24 * (nBoucle - 1) 1, 24)
nPositionNull = Position(sNomBac, Null)
SI nPositionNull ALORS
sNomBac = Gauche(sNomBac,nPositionNull-2)
FIN
nCodeBac = tabNumerosBacs[nBoucle]
SI nCopie = 1 ALORS
ListeAjoute(LISTE_Bacs_PremiereCopie,sNomBac
gLien(NumeriqueVersChaîne(nCodeBac)))
SINON