Announcement

Collapse
No announcement yet.

Schachtansteuerung mit Delpi 5 und Quickreport 3.62 Pro

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

  • Schachtansteuerung mit Delpi 5 und Quickreport 3.62 Pro

    Hallo<br>
    <br>
    Nochmals eine Diskussion zur Schachtansteuerung.<br>
    <br>
    Wir benutzen Delphi 5 mit Quickreport 3.62 Pro. In der Übersicht der Neuerungen des neuen QR wurden Erweiterungen bzw. Korrekturen hinsichtlich der Schachtansteuerung versprochen.<br>
    <br>
    Mehrerer Versuche führten aber zum Ergebnis, daß zwar jetzt die Ansteuerung von Druckerschächten über explizite Zuweisung von Schachtnummer möglich ist, aber dies keineswegs eine praktikable Lösung darstellt. (Jeder Schacht hat abhängig vom Modell/Treiber eine eindeutige Nummer, so daß diese im Source-Code hinterlegt bzw. zur Laufzeit angepasst werden kann). Eine Auswahl des Schachtes in den Druckereinstellungen wird, wie auch im alten QR, nicht berücksichtigt bzw. überschrieben!?!<br>
    <br>
    Was können wir hier noch versuchen? Diese Schachtansteuerung ist für uns sehr wichtig.<br>
    <br>
    Vorab vielen Dank<br>
    <br>
    Gruß Anton Zürner

  • #2
    Hallo,<p>
    in der Version 3.62 ist es nun nicht mehr notwendig, die Sourcen zu patchen,
    um ein "normales" Verhalten bezüglich der Fachansteuerung zu erreichen.
    Das scheint aber nur in der Prof. Version möglich zu sein (es sind entsprechende Compilerschalter gesetzt).
    Standardmäßig werden die vom Nutzer getroffenen Einstellungen im Printsetup-Dialog gnadenlos
    von den PrinterSettings-Einstellungen des Reports überschrieben. Nun gibt es zwei Wege, dies anzupassen:
    a) über die neue Ereignisbehandlungsmethode OnApplyPrintersettings
    b) über die Printersettings-Eigenschaften CustomBinCode und UseCustomBinCode des Reports

    Der zweite Weg erscheint mir eleganter. Ich setze also UseCustomBinCode und UseStandardPrinter der Reports auf True und
    passe meine eigene Druckvorschau an. Der Ansatzpunkt ist dabei die Stelle, an der PrintSetup aufgerufen wird. Nach Ausführung von PrintSetup
    wird der aktuell ausgewählte Einzugsschacht ermittelt und CustomBinCode des Reports vor dem Druck gesetzt. Den ausgewählten Schacht erhält man von dieser Funktion:

    <pre><code><font color="#000000"><b>function</b></font> GetCurrentBin : smallint;
    <font color="#000000"><b>var</b></font> FDevice, FDriver, FPort : <font color="#000000"><b>array</b></font>[<font color="#0000FF">0</font>..<font color="#0000FF">255</font>] <font color="#000000"><b>of</b></font> char;
    FHandle : THandle;
    FDeviceMode: PDeviceModeA;
    <font color="#000000"><b>begin</b></font>
    Result := -<font color="#0000FF">1</font>;
    Printer.GetPrinter(FDevice, FDriver, FPort, FHandle);
    <font color="#000000"><b>if</b></font> FHandle = <font color="#0000FF">0</font> <font color="#000000"><b>then</b></font>
    <font color="#000000"><b>begin</b></font>
    Printer.PrinterIndex := Printer.PrinterIndex;
    Printer.GetPrinter(FDevice, FDriver, FPort, FHandle);
    <font color="#000000"><b>end</b></font>;
    <font color="#000000"><b>if</b></font> FHandle &lt;&gt; <font color="#0000FF">0</font> <font color="#000000"><b>then</b></font>
    <font color="#000000"><b>begin</b></font>
    FDeviceMode := GlobalLock(FHandle);
    Result := FDeviceMode^.dmDefaultSource;
    <font color="#000000"><b>end</b></font>;
    <font color="#000000"><b>if</b></font> FHandle &lt;&gt; <font color="#0000FF">0</font> <font color="#000000"><b>then</b></font>
    GlobalUnLock(FHandle);
    <font color="#000000"><b>end</b></font>;
    </code></pre&gt

    Comment

    Working...
    X