02. januar 2003 - 22:43Der er
7 kommentarer og 1 løsning
Er standardprinteren tilsluttet og klar?
Jeg har været ude for, at mit program stoppede under indlæsning med en GPF i windows XP. Programmet er skrevet i Delphi 5 Enterprise og benytter QuickReport standard 3.5. Årsagen var, at standardprinteren ikke længere fandtes på netværket. Findes der en metode til at finde ud af, om standardprinteren stadig "er i live"? (Jeg kan sagtens finde ud af, om der er en standardprinter.) Jeg er ikke interesseret i en metode, der blot checker de lokale LPT-porte.
function GetDefaultPrinter: string; var ResStr: array[0..255] of Char; begin GetProfileString('Windows', 'device', '', ResStr, 255); Result := StrPas(ResStr); end;
procedure SetDefaultPrinter1(NewDefPrinter: string); var ResStr: array[0..255] of Char; begin StrPCopy(ResStr, NewdefPrinter); WriteProfileString('windows', 'device', ResStr); StrCopy(ResStr, 'windows'); SendMessage(HWND_BROADCAST, WM_WININICHANGE, 0, Longint(@ResStr)); end;
procedure SetDefaultPrinter2(PrinterName: string); var I: Integer; Device: PChar; Driver: PChar; Port: PChar; HdeviceMode: THandle; aPrinter: TPrinter; begin Printer.PrinterIndex := -1; GetMem(Device, 255); GetMem(Driver, 255); GetMem(Port, 255); aPrinter := TPrinter.Create; try for I := 0 to Printer.Printers.Count - 1 do begin if Printer.Printers = PrinterName then begin aprinter.PrinterIndex := i; aPrinter.getprinter(device, driver, port, HdeviceMode); StrCat(Device, ','); StrCat(Device, Driver); StrCat(Device, Port); WriteProfileString('windows', 'device', Device); StrCopy(Device, 'windows'); SendMessage(HWND_BROADCAST, WM_WININICHANGE, 0, Longint(@Device)); end; end; finally aPrinter.Free; end; FreeMem(Device, 255); FreeMem(Driver, 255); FreeMem(Port, 255); end;
procedure TForm1.Button1Click(Sender: TObject); begin label1.Caption := GetDefaultPrinter2; end;
//Fill the combobox with all available printers procedure TForm1.FormCreate(Sender: TObject); begin Combobox1.Items.Clear; Combobox1.Items.AddStrings(Printer.Printers); end;
//Set the selected printer in the combobox as default printer procedure TForm1.Button2Click(Sender: TObject); begin SetDefaultPrinter(Combobox1.Text); end;
>>Stone Dit forslag løser ikke mit problem. Jeg går ind og finder navnet på standarprinteren "Printer xx på PCxx", men hvis den pågældende printserver ikker er tændt eller på nettet længere, vil QuickReport stoppe programmet med en fejlmeddelelse. Men hvis siderne med QuickReport komponenten bliver created under indlæsning af programmer, kommer der bare en GPF. Derfor vil jeg gerne kunne checke om standardprinteren er klar før siderne bliver created.
har lige kigget på qusoft.com... her har de et forslag som du kan afprøve. SNIP "Q. I get a exception error when running our application on a machine without a default printer. A. QuickReport requires that a default printer be installed. The report is prepared using information from the printer driver. The following code shows one way to check and see if a default printer has been defined. "END SNIP
procedure TfrmReport.btnReportClick(Sender: TObject); var FDevice: PChar; FDriver: PChar; FPort: PChar; FHandle: THandle; CurrentPrinterName: string; begin GetMem (FDevice, 255); GetMem (FDriver, 255); GetMem (FPort, 255); Printer.GetPrinter (FDevice, FDriver, FPort, FHandle); CurrentPrinterName := FDevice; if FDevice <> nil then FreeMem (FDevice, 255); if FDriver <> nil then FreeMem (FDriver, 255); if FPort <> nil then FreeMem (FPort, 255);
if CurrentPrinterName <> '' then { Preview the report } QuickRep1.Preview else MessageDlg('You do not have a default printer defined.' + #13#13 + 'Please select a printer before running a report.', mtError,[mbOK],0); end;
>> Stone Tak for din indsats, men du ender stadig det samme sted, nemlig med at finde navnet på standardprinteren. Hvis du kikker i printerkataloget (under XP) kan du se printerens navn, antal sider i køen samt status på printeren (hvis du sætter visningen til Ikoner med filoplysninger). Det er denne status, som jeg gerne vil ha' fat i.
har igen kigget på qusoft vedrørende problemet,, når quickreport kører i netværk skal man selv definerer en printer manuel, ellers får man en GPF. Der er ikke umiddelbar en løsning på problemet. Som Qusoft siger" install a Printer" doo ja det bliver man jo klogere af *SS* Prøver at kigge videre..det er en hård nød.
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.