Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Standart Drucker & Schachtauswahl (https://www.delphipraxis.net/24964-standart-drucker-schachtauswahl.html)

Almex32657 29. Jun 2004 09:21


Standart Drucker & Schachtauswahl
 
Tag Leute,
ich habe ein riesen Problem, meine Druckerschächte, ich habe mir die letzten
2 Tage darum einem Kopf gemacht komme aber nicht weiter.
Also ich habe W2k und arbeite mit dem Delphi 5 Enterprise.

Ich habe mir schon mehrere Artikel im Netz angeschaut, um das vorweg zu nehmen wie diesen
hier z.B:
http://www.delphipraxis.net/internal...hlight=printer

Aber das hilft mir noch nicht weiter. Denn Standartdrucker zu setzen ist nicht das Problem aber wie setze ich den Standartschacht? Ich habe es erst so versucht aber es funktioniert nicht, aber ich finde keinen Fehler...


Delphi-Quellcode:
Procedure SetzeSchacht(Schacht : integer);
var
  ADevice, ADriver, APort: array [0..255] of Char;
  ADeviceMode: THandle;
  DevMode: PDeviceMode;
begin
  Printer.GetPrinter( ADevice, ADriver, APort, ADeviceMode );
  if ADeviceMode <> 0 then GlobalUnlock( ADeviceMode );
  DevMode := GlobalLock( ADeviceMode );
  DevMode.dmFields := DevMode.dmFields or DM_DEFAULTSOURCE;
  DevMode.dmDefaultSource := Schacht;
  Printer.SetPrinter( ADevice, ADriver, APort, ADeviceMode );
  GlobalUnlock( ADeviceMode );
  DevMode.dmDefaultSource := Schacht;

end;
Wenn ich den Druckerschat dann wie folgt auslese, zeigt er zwar das richtige
an aber druckt aus dem falschen Schacht.

Delphi-Quellcode:
function LeseAktuellenSchacht: integer;
var
  hDevMode: THandle;
  Device,Driver,Port: array [0..255] of Char;
  bin: integer;
  DevMode: PDevMode;

begin
  //Standartdrucker;
  Printer.GetPrinter(Device,Driver,Port,hDevMode);
  bin := -1;
  if hDevMode <> 0 then begin

    DevMode := GlobalLock (hDevMode);
    bin := DevMode^.DMDEFAULTSOURCE;
    GlobalUnlock (hDevMode);
  end;
  result := bin;
end;
Wer kann mir weiter helfen?

PS: Danke schon mal im voraus....

ALMEX

[edit=sakura] Das ganze ROT ausgewaschen :roll: Mfg, sakura[/edit]

Almex32657 7. Jul 2004 14:36

HILFE IS HIER KEIN WISSENDER ?!?!?!? =' (
 
SOS

shmia 7. Jul 2004 15:44

Re: Standart Drucker & Schachtauswahl
 
In der JCL gibt es in der Unit JclPrint die Klasse TJclPrintSet.
Dort sind viele Methoden, die Borland in der TPrinter-Klasse vergessen hat.
In deinem Fall müsstest du dann das Property BinIndex setzen.

Almex32657 8. Jul 2004 09:00

Re: Standart Drucker & Schachtauswahl
 
Danke erstmal werde das gleich mal durchschauen....

Almex32657 13. Jul 2004 09:12

Re: Standart Drucker & Schachtauswahl
 
Ja habe mir das ganze eben mal angesehen, habe nur leider das gleiche Problem mit der Jedi JCL wie mit meiner oben aufgeführten Funktion. Programm intern wird der Schacht richtig ausgewählt und kann auch richtig ausgelesen werden, aber der Standart WINDOWS Schacht wird nicht gesetzt.

:gruebel: :wall:

Hier das Codebeispiel wie ich die JCLPrintSet verwende und versuche damit einen Druckerschacht zu setzen.

Code:

procedure TfrmMain.Button6Click(Sender: TObject);
begin
  MyPrinter := TJCLPrintSet.Create;
  MyPrinter.DefaultSource:= StrToInt(Edit1.text);
  Myprinter.SaveToDefaults;
  MyPrinter.destroy;
end;
Kann mir irgendwer einen Tip geben welchen grundsätzlichen Fehler ich zu machen scheine.

Grüße ALMEX

SHartmann 13. Jul 2004 15:42

Re: Standart Drucker & Schachtauswahl
 
Hallo,

da gehst Du ja in die vollen, ein Kollege hat bei uns damit mehrere Wochen verbracht, eigene Printerroutinen zu schreiben. Leider ist er nicht mehr bei uns, so dass ich es halt versuchen werde :lol:

Der Kniff scheint zu sein, eben nicht SetPrinter zu verwenden.
Schau Dir mal DocumentProperties und Reset DC in der Delphi/WinApi Hilfe an.

Verwendung in der Reihenfolge:
- DevMode setzen
- DocumentProperties aufrufen
- ResetDC

bei uns im Code (den ich nicht posten kann) kommt vor dem ResetDC noch eine Prüfung und es
wird evtl. ein CreateDC gemacht. Das hat aber m.E. etwas damit zu tun, dass man damit den
Schacht auch nach einem Seitenwechsel ändern kann.

Almex32657 19. Jul 2004 10:10

Re: Standart Drucker & Schachtauswahl
 
Jau danke für den Tip werde mal nachschauen.....

Almex

Almex32657 19. Jul 2004 13:46

Re: Standart Drucker & Schachtauswahl
 
Wo finde ich diese WinAPI Hilfedatei bei meiner Delphi version scheint die nicht dabei gewesen zu sein....

Hat einer einen Link wo man das Ding ziehen kann?

Almex32657 21. Jul 2004 13:17

Re: Standart Drucker & Schachtauswahl
 
SOS

Sven Janssen 24. Aug 2004 13:24

Re: Standart Drucker & Schachtauswahl
 
Moin!

ich haber hier -> http://www.swissdelphicenter.ch/de/f...ic.php?p=38791 etwas gefunden was eigentlich ganz gut funktioniert.
ABER .... immer nur einmal nach einem printerdialog.execute
Danach wird alles auf diesen Schacht ausgedruckt.

Ich suche mal weiter und melde mich wenn ich was gefunden hab.
Aber vielleicht hat jemand anders auch noch eine Idee.


Sven Janssen

Nachtrag:
Ich habe es hinbekommen, das ich nun vor jedem begindoc den Schacht wechseln kann.
Nur Leider funktioniert dies NICHT wärende das Drucken im Gange ist.
Meldung Das Drucken ist im Gange.
Natürlich dumm, weil genau dafür benötige ich es.


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:13 Uhr.
Seite 1 von 2  1 2      

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