Здравствуйте уважаемые эксперты. Помогите разобраться, пожалуйста (и извините моего русского языка
!)
Как я могу програмно дабавит Generic Text Driver (если его нет)? (В приложение - как я вижу список драйверов и как удаляю из списка выбраной драйвер)
Приложение:
{}procedure TFormMain_PrinterDriver.Button_ListDrvClick(Sender: TObject);
var
i, bytesNeeded: DWORD;
xDriverInfo: pDriverInfo2;
NumDrivers: DWORD;
begin
ListBox_PrinterDrivers.Clear;
// get number of installed drivers
Numdrivers := 0;
bytesNeeded := 0;
EnumPrinterDrivers(nil, nil, 2, nil, 0, bytesNeeded, NumDrivers);
if bytesNeeded = 0 then begin
ShowMessage('No printer drivers installed!');
Exit;
end;
FreeAndNil( xEnumDriversData);
// allocate memory for the driver data
GetMem( xEnumDriversData, bytesNeeded);
// fetch driver data
if EnumPrinterDrivers(nil, nil, 2, xEnumDriversData, bytesNeeded, bytesNeeded, NumDrivers) then begin
// add drivers to ListBox_PrinterDrivers
xDriverInfo := xEnumDriversData;
for i := 1 to NumDrivers do begin
ListBox_PrinterDrivers.Items.AddObject( xDriverInfo^.pName, TObject(xDriverInfo));
Inc(xDriverInfo); // Note: Inc increments a pointer by the size of its base type!
end;
ListBox_PrinterDrivers.ItemIndex := 0;
ListBox_PrinterDriversClick( ListBox_PrinterDrivers);
end else begin
RaiseLastWin32Error;
end;
end;
{}procedure TFormMain_PrinterDriver.ListBox_PrinterDriversClick(Sender: TObject);
var
xDriverInfo: pDriverInfo2;
begin
with Sender as TListbox do begin
if ItemIndex >= 0 then begin
Memo_PrinterInfo.Clear;
xDriverInfo := PDriverInfo2(Items.Objects[ItemIndex]);
with Memo_PrinterInfo.Lines, xDriverInfo^ do begin
Add(Format('cVersion: %d', [ cVersion]));
Add(Format('pName: %s', [ pName]));
Add(Format('pEnvironment: %s', [ pEnvironment]));
Add(Format('pDriverPath: %s', [ pDriverPath]));
Add(Format('pDataFile: %s', [ pDataFile]));
Add(Format('pConfigFile: %s', [ pConfigFile]));
end;
end;
end;
end;
{}procedure TFormMain_PrinterDriver.Button_DelDriverClick(Sender: TObject);
var
xDriverInfo: pDriverInfo2;
begin
if ListBox_PrinterDrivers<>nil then begin
if ListBox_PrinterDrivers.ItemIndex >= 0 then begin
xDriverInfo := PDriverInfo2( ListBox_PrinterDrivers.Items.Objects[ ListBox_PrinterDrivers.ItemIndex]);
end;
end;
if DeletePrinterDriver( '', xDriverInfo.pEnvironment, xDriverInfo.pName) then begin
StatusBar1.SimpleText := 'OK';
StatusBar1.ParentColor := true;
ListBox_PrinterDrivers.Items.Delete( ListBox_PrinterDrivers.ItemIndex);
end else begin
StatusBar1.Color := $C0C0FF;
StatusBar1.SimpleText := IntToStr( GetLastError)+': '+SysErrorMessage( GetLastError);
end;
end;