![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как определить, что принтер не установлен ? [D6, Win95/98, WinXP]
Fanny © (2005-06-08 09:10:00)собственно, сабж.
вызов диалогов Печать и Установка печати происходит нормально, если в системе установлен хоть один принтер.
если принтера нет, то программа подвисает.
как определить, что принтер есть ?
Anatoly Podgoretsky (2005-06-09 08:45:00) [1]Fanny (08.06.05 10:23) [4]
А ты так больше не делай.
Fanny (2005-06-09 08:32:00) [2]спсаибо
Vlad Oshin (2005-06-08 12:45:00) [3]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;
потому что если есть текущий, значит есть
Amoeba (2005-06-08 11:18:00) [4]Проверяй на условие
Printer.Printers.Count > 0
Fanny (2005-06-08 10:23:00) [5]а при вызове Printers[PrinterIndex], если принтер НЕ УСТАНОВЛЕН в системе, всё равно подвисает :(
Fanny (2005-06-08 09:29:00) [6]сенкс
буду пробовать
Коля (2005-06-08 09:16:00) [7]Вывести список установленных принтеров и установить принтер по умолчанию
Автор: 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.
Digitman (2005-06-08 09:13:00) [8]Printer.Printers.Count ?