Announcement

Collapse
No announcement yet.

Printer.Printers

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

  • Printer.Printers

    Hallo Delphianer

    Versuche über Printer.Printers[i] den Namen des Druckers auszulesen.
    Klappt auch bei Windows 2000. Bei 95 und 98 jedoch bekomme ich zusätlich noch den Text 'an LPT1' oder 'an COM1'. Ich brauche nur den Druckernamen.
    Kann mir jemand helfen oder ist das ein BUG.

    Danke vorab für Hilfe.

  • #2
    Das ist kein Bug, sondern Absicht. Wenn Du in den Delphi-Source schaust, wirst Du sehen, dass Borland unter Win9x dies mutwillig macht. Warum? Keine Ahnung.<br>Ich habe mir für den Fall aber eine eigene Routine geschrieben bzw. vom Borland-Source abgeleitet, welche die "normale" Printerliste zurückgibt:<p>
    <pre class="sourcecode"><code>
    <b>PROCEDURE</b> GetPrinterList(Printerlist: TStrings);
    <b>VAR</b>
    Buffer, PrinterInfo: PChar;
    Count, NumInfo: DWORD;
    I: Integer;
    <b>begin</b>
    Count := 0;

    EnumPrinters(PRINTER_ENUM_LOCAL + PRINTER_ENUM_CONNECTIONS, <b>nil</b>, 1, <b>nil</b>, 0, Count, NumInfo);
    <b>if</b> Count = 0 <b>then</b> Exit;
    GetMem(Buffer, Count);
    <b>try</b>
    <b>if</b> <b>not</b> EnumPrinters(PRINTER_ENUM_LOCAL + PRINTER_ENUM_CONNECTIONS, <b>nil</b>, 1, PByte(Buffer), Count, Count, NumInfo)
    <b>then</b> Exit;
    PrinterInfo := Buffer;
    <b>for</b> I := 0 <b>to</b> NumInfo - 1 <b>do</b>
    <b>with</b> PPrinterInfo1(PrinterInfo)^ <b>do</b>
    <b>begin</b>
    Printerlist.Add(pName);
    Inc(PrinterInfo, sizeof(TPrinterInfo1));
    <b>end</b>;
    <b>finally</b>
    FreeMem(Buffer, Count);
    <b>end</b>;
    <b>END</b>;</code></pre><p>
    Schöne Grüße, Mario Noac
    Schöne Grüße, Mario

    Comment


    • #3
      Danke. Funktioniert prima

      Comment

      Working...
      X