21. september 2006 - 11:27Der er
8 kommentarer og 1 løsning
Printer bliver uanvendelig
Hej Eksperter
Jeg har et problem med en printertilkobling jeg ikke kan greje (for nu at sige det pænt). Programmet er lavet i Delphi 3. Når programmet starter "tjekkes" printertilknytningen:
Var PDc : HDC;
begin PDc := Printer.Handle; ...
"Standardprinteren" er herefter normalt tilgængelige i PDc og Printer, og rutiner som StartDoc og EndDoc kan bruges.
Problemet er at tilgængeligheden af Standardprinteren nogle gange forsvinder, selvom den stadig er markeret som Standard i "Printere og Fax-enheder". Officeprogrammerne skriver også stadigvæk fint ud. Printeren kan også "forsvinde" mens programmet kører og man har skiftet til Word/Excel undervejs. Den eneste løsning er tilsyneladende at vælge en anden standardprinter, og herefter "vælge tilbage" igen.
Har også prøvet at sætte Printer.PrinterIndex uden større held.
Printeren der ønskes brugt er Ricoh Aficio CL 3100 N, og printerdriveren er søgt opdateret.
Jeg har kun prøvet at sætte Printerindex som de (Borland) anbefaler i Hjælpen, men kan godt se at der foregår langt mere i SetPrinter.
Jeg vil derfor lave et lille testprogram som kan køres når problemet opstår. (Inden jeg begynder at rette for meget i koden :-)) ) Problemet opstår kun nogle gange om ugen, og kun hos en enkelt kunde ! ?
Det er uklart hvad du mener med at printeren "forsvinder"? Og hvorfor gemmer du Printer.Handle over i PDc? Hvorfor ikke bare fjerne PDc og bruge Printer.Handle de steder du skal bruge værdien? Det her er kun et vildt gæt, men kan værdien af Printer.Handle ændre sig undervejs, så den værdi du har gemt i PDc ikke længere er gyldig? Men det er lidt svært at hjælpe når jeg ikke ved hvad du mener med "forsvinder".
med "forsvinder" mener jeg følgende: Normalt virker progammet fint med print. Men ... efter man har været i f.eks. Word at arbejde, (stadig med mit prog. kørende) og går tilbage til mit prog, holder print nogle gange op med at virke. (Der kommer meddelelse om at printeren ikke kan bruges ) Det hjælper ikke at genstarte programmet, der meddeles nu at printeren ikke kunne tilknyttes.
Det hjælper heller ikke at genstarte computeren. Eneste kendte løsning er at genvælge den ønskede printer som Standard i "Printere og Fax-enheder". (Hvis ikke brugeren har valgt en printer i mit program anvendes Standard printeren)
Årsagen til anvendelsen a PDc, er et lævn fra fortiden. Jeg bruger en stribe rutiner (af ældre dato) som anvender windows-kald til udskriften. Jeg vil give dig ret i at det kan være noget "snask" med denne kopi af handlet, men den tildeles handlet hver gang jeg starter print (PrnStart). I øvrigt er problemet der også med rapporter lavet med QReport.
procedure PrnLine(X: Integer; PS: ShortString); var P: array[0..255] of Char; begin StrPCopy(P,PS); SetTextAlign(PDC,TA_Left+TA_NOUPDATECP); TextOut(PDc, X+offsetX, CurrentLine*LineHeight+offsetY, P, StrLen(P)); end; { PrnLine }
men det er ikke her hunden ligger begravet. Allerede ved programstart køres:
Procedure TilknytPrinter;
var i:integer; begin i:=0; try if aUsr.DefPrinterNdx>0 then Printer.PrinterIndex := aUsr.DefPrinterNdx-1; // except wMes('Tilknytning af printer nr. '+intToStr(aUsr.DefPrinterNdx-1)+' fejler ?'); end; wMes('Tilknytter printer....',continue); ...
og så er der noget kode som lidt mere stædigt forsøger at få fat i printeren, da en netværksprinter kunne være for længe om at melde klar ?
Det kode ser mystisk ud. Det ser ud som om du forventer at printeren har et bestemt index nr? Hvordan ved du at du bruger det rigtige index nr? Du er modig. Jeg turde ikke lave sådan noget... :-)
Alt det der vedrører 'tilknyt' var noget jeg byggede på til testformål. Tidligere brugte jeg altid Default Printer. Printertabellen er uforandret sålænge der ikke pilles i "printere og faxenheder", men jeg er helt enig i at det er tvivlsomt blot at bruge index. Så må hele printernavnet gemmes istedet, med indexet kunne jeg nøjes med en enkelt byte :-)
Stoney og Tolderlund - Hvis i vil have nogen point for jeres medvirken, så kast et svar snarest!
Jeg har iøvrigt opgivet at finde ud af hvad der skete. Kunden har fået nye maskiner, og fejlen forsvandt samtidig.
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.