Форум: "Основная";
Текущий архив: 2005.06.29;
Скачать: [xml.tar.bz2];
ВнизКак определить, что принтер не установлен ? Найти похожие ветки
← →
Fanny (2005-06-08 09:10) [0]собственно, сабж.
вызов диалогов Печать и Установка печати происходит нормально, если в системе установлен хоть один принтер.
если принтера нет, то программа подвисает.
как определить, что принтер есть ?
← →
Digitman © (2005-06-08 09:13) [1]Printer.Printers.Count ?
← →
Коля (2005-06-08 09:16) [2]Вывести список установленных принтеров и установить принтер по умолчанию
Автор: Xavier Pacheco
unit MainFrm;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;
type
TMainForm = class(TForm)
cbPrinters: TComboBox;
lblPrinter: TLabel;
procedure FormCreate(Sender: TObject);
procedure cbPrintersChange(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
MainForm: TMainForm;
implementation
uses IniFiles, Printers;
{$R *.DFM}
procedure TMainForm.FormCreate(Sender: TObject);
begin
{ Copy the printer names to the combobox and set the combobox to
show the currently selected default printer }
cbPrinters.Items.Assign(Printer.Printers);
cbPrinters.Text := Printer.Printers[Printer.PrinterIndex];
// Update the label to reflect the default printer
lblPrinter.Caption := Printer.Printers[Printer.PrinterIndex];
end;
procedure TMainForm.cbPrintersChange(Sender: TObject);
var
IniFile: TIniFile;
TempStr1, TempStr2: string;
S: array[0..64] of char;
begin
with Printer do
begin
// Set the new printer based on the ComboBox"s selected printer
PrinterIndex := cbPrinters.ItemIndex;
// Store the printer name into a temporary string
TempStr1 := Printers[PrinterIndex];
// Delete the unnecessary portion of the printer name
System.Delete(TempStr1, Pos(" on ", TempStr1), Length(TempStr1));
// Create a TIniFile class
IniFile := TIniFile.Create("WIN.INI");
try
// Retrieve the device name of the selected printer
TempStr2 := IniFile.ReadString("Devices", TempStr1, "");
// Change the default printer to that chosen by the user
IniFile.WriteString("windows", "device", TempStr1 + "," + TempStr2);
// Tell all windows that the default printer changed.
StrCopy(S, "windows");
SendMessage(HWND_BROADCAST, WM_WININICHANGE, 0, LongInt(@S));
finally
IniFile.Free;
end;
end;
// Update the label to reflect the new printer selection
lblPrinter.Caption := Printer.Printers[Printer.PrinterIndex];
end;
end.
← →
Fanny (2005-06-08 09:29) [3]сенкс
буду пробовать
← →
Fanny (2005-06-08 10:23) [4]а при вызове Printers[PrinterIndex], если принтер НЕ УСТАНОВЛЕН в системе, всё равно подвисает :(
← →
Amoeba © (2005-06-08 11:18) [5]Проверяй на условие
Printer.Printers.Count > 0
← →
Vlad Oshin © (2005-06-08 12:45) [6]enumprinters
или
function GetCurrentPrinterHandle: THandle;
var
Device, Driver, Port: array[0..255] of Char;
hDeviceMode: THandle;
begin
Printer.GetPrinter(Device, Driver, Port, hDeviceMode);
if not OpenPrinter(addr(Device), Result, nil) then
RaiseLastWin32Error;
end;
потому что если есть текущий, значит есть
← →
Fanny (2005-06-09 08:32) [7]спсаибо
← →
Anatoly Podgoretsky © (2005-06-09 08:45) [8]Fanny (08.06.05 10:23) [4]
А ты так больше не делай.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2005.06.29;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.085 c