QuickReport jette “Il n'y a Pas de valeur par Défaut de l'Imprimante Actuellement Sélectionnée” Exception
J'ai créé un Delphi Service qui imprime TQuickReports. Tout fonctionne bien si compilé et exécuté comme une Application Windows. Mais lorsqu'ils sont convertis pour fonctionner comme un service pour essayer de créer un formulaire contenant un TQuickRep composant lève l'exception.
Ce service fonctionne très bien sur de nombreux autres boîtes, mais pas celui-ci en particulier. Voici quelques détails:
- À l'aide de QuickReport la version 4.07
- Box est un Serveur Windows 2008 système d'exploitation.
- À L'Aide De Delphi 2007
- De l'imprimante.Les imprimantes.Le comte est de retourner une valeur positive. En fait je liste de toutes les imprimantes.
- J'ai essayé de lancer le service à la fois en utilisant le Compte Système Local et Connecté en tant qu'Admin.
OriginalL'auteur M Schenkel | 2010-04-05
Vous devez vous connecter pour publier un commentaire.
Vous pouvez résoudre ce problème en créant une nouvelle valeur dword UserSelectedDefault avec la valeur: 1
HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Windows\SessionDefaultDevices\Session_ID
Assurez-vous que vous avez une imprimante sélectionnée.
Avoir une imprimante locale (même si il n'était pas physiquement un joint) le problème est réglé.
OriginalL'auteur Niek H.
Est il y a un jeu d'imprimante par défaut dans la session 0? Rappelez-vous que sous Vista /Server 2008 /Windows 7, les services s'exécutent dans une session séparée. Si oui ou non l'utilisateur connecté a un jeu d'imprimante par défaut n'est pas pertinent - c'est un par-paramètre de session et n'affecte pas la session 0.
Pouvez-vous réécrire le code pour traiter cette exception et de choisir l'imprimante à utiliser?
OriginalL'auteur Mihai Limbășan
Vous pourriez donner à l'utilisateur un moyen de sélectionner l'imprimante pour le service. Le service Windows n'est probablement pas un jeu d'imprimante par défaut.
Ensemble
TQuickRep.PrinterSettings.PrinterIndex
pour définir le numéro d'imprimante. Ensuite,TQuickRep.Print
pour imprimer le rapport.Schenkel, semble comme un bug, mais le travail est probablement à définir l'imprimante par défaut, avant la création de votre TQuickRep objet.
Pouvez-vous poster le code autour de l'endroit où l'erreur se produit? Nous avons mis en place une variation sur la solution proposée par Marcus Adams pour l'impression Rapide des Rapports des rapports par le biais d'un Service Windows et de ne pas voir l'erreur que vous faites sur Windows 2008.
OriginalL'auteur Marcus Adams
Un collègue fini par trouver la solution. J'aurais ajouté "réseau" imprimantes et de ne pas les imprimantes Locales (à l'époque je ne pense pas que c'était lié à ce problème). Si le service devait être installé avec "service réseau" que le compte d'utilisateur sous l'onglet connexion. De l'Aide de Windows:
OriginalL'auteur M Schenkel
Nous avons eu un similaires problème ici. À l'aide de serveurs terminal server, Citrix et Powerfuse 9.
Powerfuse avait toutes les imprimantes capitalisés, ils ont toutefois été partagé dans un cas mixte.
Cette combinaison causée Delphi/QReport crash
Lorsque toutes les imprimantes sont de printserver à powerfuse dans le même cas (pas important supérieures ou inférieures, ou même mixte), le problème avait disparu
OriginalL'auteur Han
En fait c'est un Delphi(5) problème. La comparaison des imprimantes disponibles et l'imprimante par défaut est sensible à la casse (Imprimantes.pas):
La modification de la comparaison:
si
lowercase(TPrinterDevice(Objects[I]).Device) = lowercase(Device)
résout le problème.
OriginalL'auteur Keesjan van Efferen
Si vous utilisez les services terminal server 2008, le même utilisateur pour plusieurs sessions, vous devriez regarder dans l':
au lieu de
OriginalL'auteur Akko
J'ai résolu un problème similaire: Si une application Delphi (ou service) utilise QuickReport, il s'exécute avant le chargement du système d'imprimante par défaut (ou imprimantes).
TQRPrinter.Init
, leprinter.printers.count
est zéro,printer.printers.count
est le nombre d'imprimantes,tqrprinter.int
a déjà été exécutée, de sorteTQRPrinter.FPrinterOK
est faux,La solution pour moi a été d'attendre jusqu'à ce que les imprimantes étaient chargés avant le lancement de l'application (dans citrix et terminal server). J'ai résolu ce problème de deux façons, soit par l'écrasement
tqrprinter
ou de retarder l'dpr
.OriginalL'auteur Rotary