Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi drucken - papierschacht einstellen (https://www.delphipraxis.net/1687-drucken-papierschacht-einstellen.html)

grisu 18. Dez 2002 11:37


drucken - papierschacht einstellen
 
Hi!
Benutze Delphi 5 Enterprise mit Win2000.
Also ich habe folgendes Problem.
Unsere Software benutzt Thermobondrucker (wie an den Supermarktkassen).

Die Papierlänge steuert man mit den Formularen aus der W2K Druckersteuerung. Das habe ich auch jetzt versucht aus dem Programm umzustellen aber es gelingt mir nicht.

Hier mal den Code den ich verwende:
Delphi-Quellcode:
       Printer.PrinterIndex := PrinterID;
       Printer.GetPrinter(ADevice, ADriver, APort, ADeviceMode);
       DevMode := GlobalLock(ADeviceMode);
       edit1.Text := inttostr(devmode^.dmpapersize);

       DevMode^.dmDefaultSource := 257;
       devmode^.dmFields := devmode^.dmFields or DM_DEFAULTSOURCE;

       DevMode^.dmPaperSize := 164; //wäre für unseren Drucker die richtige Grösse
       devmode^.dmFields := devmode^.dmFields or DM_PAPERSIZE;
       edit2.Text := inttostr(devmode^.dmpapersize);

       Printer.SetPrinter(ADevice, ADriver, APort, ADeviceMode);
       GlobalUnlock(ADeviceMode);

       Printer.Title := 'Hello World!';
       Printer.BeginDoc;
       for i := 1 to 100 do begin
       Printer.Canvas.TextOut(200, (i * 30) + 200, 'Hello World: ' + inttostr(i));
       end;
       Printer.EndDoc;
Also mit diesem Code funktioniert die ganze Sache nicht. Verwende ich aber den PrintDialog von Delphi dann funktionierts.
Habe auch versucht bis zum GlobalUnlock den Code auszuführen, wenn ich dann denn PrintDialog starte stehen schon die richtigen Werte im Dialog drinnen drücke ich dann auf OK funktionierts auch.

Vielleicht kann mir wer helfen
Danke Christian

[edit=Sakura]Delphi-Tags[/edit]

CalganX 18. Dez 2002 13:12

Hallo Christian,
ersteinaml herzlich willkommen in der Delphi-PRAXiS!
Hm... Vielleicht wäre es eine Möglichkeit, dass du guckst (dabei viel Spaß ;) ), wie der PrintDialog das ganze zuordnet. Die Sources findest du, da du ja die Enterprise-Version nutzt, im Delphi-Verzeichnis\Sources\Vcl\. Die Datei sollte eigenlich Dialogs.pas heißen...

Chris

Christian Seehase 18. Dez 2002 13:30

Moin Namensvetter,

der Unterschied könnte darin begründet liegen, dass der Dialog das System darüber informiert, dass eine Änderung stattgefunden hat, die reine Änderung der Einstellung, von Delphi aus, dies so aber nicht tut.

Schau Dir dazu am Besten mal die API SHChangeNotify im PSDK an, mit besonderem Augenmerk auf das Flag (für den Parameter uFlags) SHCNF_PRINTER.
Probiert hab' ich das bislang nicht, aber vielleicht geht's damit.

grisu 18. Dez 2002 16:32

hallo christian
 
Danke für deine prompte Antwort. Leider bin ich nicht so gut drauf das ich weiß wie ich es anwenden muß.

Wann meinst Du muß ich das Bit setzen?

Danke Christian

ts_abc 25. Dez 2003 21:55

Re: drucken - papierschacht einstellen
 
Hallo Christian,

Lass diese Zeile
Delphi-Quellcode:
Printer.SetPrinter(ADevice, ADriver, APort, ADeviceMode);
über
Delphi-Quellcode:
GlobalUnlock(ADeviceMode);
einmal weg dann müsst es gehen.

Guß
Thomas


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:55 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz