Announcement

Collapse
No announcement yet.

Papierformat einstellen -> dringend

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

  • Papierformat einstellen -> dringend

    Hallo,
    ich muss eine DLL schreiben mit nur einer Funktion. Je nach Parameter soll das Format des Standarddruckers auf Hoch/Querformat geändert werden. Mit Printer.orientation kann ich das zwar umstellen (scheinbar) jedoch ändert sich die Druckereinstellung nicht wirklich (Wenn ich in die Druckereigenschaften ansehe hat sich das Format nicht geändert). Wie kann ich nun dises Werte (Systemweit?!?) ändern??

    Ich hoffe man kann meine Frage einigermaßer verstehen, hoffe auf schnelle Hilfe weil es ist verdammt dringend....
    (danke)

  • #2
    Hallo,

    >Wie kann ich nun dises Werte (Systemweit?!?) ändern?

    ist das überhaupt eine gute Idee? Wenn der Anwender mit zwei Anwendungen gleichzeitig arbeitet und eine davon wie von Geisterhand ihr Verhalten ändert, ist das nicht die feine Art. Nicht ohne Grund geht Win32 davon aus, dass die Änderungen nur für aufrufende Anwendung gelten soll. Globale Konfigurationen sind in <i>Einstellungen | Drucker</i> besser aufgehoben.

    Normalerweise ist die Win32-API-Funktion <b>SetPrinter</b> für derartige global gültige Konfigurationen gedacht. Allerdings steht in der Hilfedatei aus dem Platform SDK der folgende Satz: "<i>Note that for Windows 95/98 and Windows NT 4.0 and earlier, you cannot use SetPrinter to change the default printer. For more information, see Printer Output. </i>".
    <pre>
    var
    pInfo : PPrinterInfo2;
    bytesNeeded : DWORD;
    begin
    GetPrinter( hPrinter, 2, Nil, 0, @bytesNeeded );
    If GetLastError <> ERROR_INSUFFICIENT_BUFFER Then
    RaiseLastWin32Error;
    pInfo := AllocMem( bytesNeeded );
    try
    If not GetPrinter( hPrinter, 2, pInfo, bytesNeeded, @bytesNeeded ) Then
    RaiseLastWin32Error;
    With pInfo^ Do Begin
    pDevMode^.dmDuplex:= duplex;
    ..... usw.
    end;
    if not SetPrinter( hPrinter, 2, pInfo, 0 ) then ;
    RaiseLastWin32Error;
    finally
    FreeMem( pInfo );
    end;
    end;
    </pre>
    &#10

    Comment


    • #3
      Hallo Herr Kosch, wie immer sind Sie mit Rat und Tat zu stelle

      Hmm, meine Idee mit dem Systemweiten ändern beruht darauf das ich nicht weiß wie es sich verhält wenn eine VBA (Access) Anwendung meine DLL aufruft. Wenn ich in meiner DLL den Druck auf Querformat stelle, wird dann, ein von Access gestarteter, Druckjob auch in Querformat gedruckt?? Ich hab schon in diversen Foren und Büchern geschaut aber keine Möglichkeit gefunden diese Einstellung im Programmcode vorzunehmen. Daher dachte ich das ich eine DLL schreibe die bei dem öffnen eines Reports den Druck auf Querformat stellt. Nach dem Drucken oder bei Abbruch wird das Format wieder auf den Ursprungswert gestellt.

      Nur hab ich keinen Plan ob das so funktionieren könnt

      Comment

      Working...
      X