Announcement

Collapse
No announcement yet.

Fach 2 des Druckers ansteuern?

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Fach 2 des Druckers ansteuern?

    Fach 2 des Druckers ansteuern!
    Habe schon die Beiträge über "Druckerschächte" im Forum gelesen und ausprobiert.
    Funktionierent aber nicht.
    Kann mir jemand weiterhelfen?

  • #2
    Hallo,

    wenn das folgende Beispiel (getestet mit Delphi 5.01 unter NT 4) nicht geht, ist der Drucker (Treiber) kaputt ;-)

    <pre>
    unit Unit1;

    interface

    uses
    Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
    StdCtrls, ComCtrls, Printers, WinSpool, ExtCtrls;

    type
    TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    TreeView1: TTreeView;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    private
    { Private declarations }
    public
    { Public declarations }
    end;

    var
    Form1: TForm1;

    function MyDocumentProperties(hWnd: HWND; hPrinter: THandle; pDeviceName: PChar;
    const pDevModeOutput: PDeviceMode; pDevModeInput: PDeviceMode;
    fMode: DWORD): Longint; stdcall;

    implementation

    {$R *.DFM}

    const
    winspl = 'winspool.drv';

    function MyDocumentProperties; external winspl name 'DocumentPropertiesA';

    procedure TForm1.Button1Click(Sender: TObject);
    const cchBinName = 24;
    var Index1,
    Index2,
    Needed : Integer;
    ADeviceMode : THandle;
    RootNode,
    PrinterNode,
    TempNode : TTreeNode;
    ADevice,
    ADriver,
    APort : array[0..255] of char;
    BinIDArray,
    BinNameArray : PChar;
    BinID : Word;
    BinName : array[0..24] of Char;
    begin
    TreeView1.Items.Clear;
    RootNode := TreeView1.Items.Add(nil, 'Printers');
    for Index1 := 0 to Printer.Printers.Count - 1 do
    begin
    Printer.PrinterIndex := Index1;
    PrinterNode := TreeView1.Items.AddChild(RootNode, Printer.Printers[Index1]);
    PrinterNode.Data := Pointer(LongInt(Index1));
    Printer.GetPrinter(ADevice, ADriver, APort, ADeviceMode);
    Needed := DeviceCapabilities(ADevice, APort, dc_binnames, nil, nil);
    GetMem(BinNameArray, cchBinName * Needed);
    GetMem(BinIDArray, 2 * Needed);
    FillChar(BinNameArray[0], cchBinName * Needed, 0);
    FillChar(BinIDArray[0], 2 * Needed, 0);
    try
    DeviceCapabilities(ADevice, APort, dc_binnames, BinNameArray, nil);
    DeviceCapabilities(ADevice, APort, dc_bins, BinIDArray, nil);
    for Index2 := 1 to Needed do
    begin
    move(BinNameArray[cchBinName * (Index2 - 1)], BinName[0], cchBinName);
    move(BinIDArray[2 * (Index2 - 1)], BinID, 2);
    TempNode := TreeView1.Items.AddChild(PrinterNode, String(BinName));
    TempNode.Data := Pointer(LongInt(BinID));
    end;
    finally
    FreeMem(BinIDArray, 2 * Needed);
    FreeMem(BinNameArray, cchBinName * Needed);
    end;
    end;
    Printer.PrinterIndex := -1;
    end;

    procedure TForm1.Button2Click(Sender: TObject);
    var ANode : TTreeNode;
    PrinterID : Integer;
    BinID : Word;
    ADevice,
    ADriver,
    APort : array[0..255] of char;
    ADeviceMode : THandle;
    DevMode : PDeviceMode;
    begin
    ANode := TreeView1.Selected;
    if ANode <> nil then
    if ANode.Parent <> nil then
    if ANode.Parent.Text <> 'Printers' then
    begin
    BinID := Word(ANode.Data);
    PrinterID := Integer(ANode.Parent.Data);

    Printer.PrinterIndex := PrinterID;
    Printer.GetPrinter(ADevice, ADriver, APort, ADeviceMode);
    DevMode := GlobalLock(ADeviceMode);
    DevMode^.dmDefaultSource := BinID;
    Printer.SetPrinter(ADevice, ADriver, APort, ADeviceMode);
    GlobalUnlock(ADeviceMode);

    Printer.Title := 'Hello World!';
    Printer.BeginDoc;
    Printer.Canvas.TextOut(200, 200, 'Hello World!');
    Printer.EndDoc;
    Printer.PrinterIndex := -1;
    end;
    end;

    end.
    </pre>
    Zur Sicherheit werden alle Druckerschächte in der TreeView-Instanz angezeigt, so dass man den gewünschten Schacht per Mausklick auswählen muss

    Comment


    • #3
      Vielen Dank für die Lösung

      Comment

      Working...
      X