AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Delphi 2009 und Druckerschächte

Ein Thema von bjma · begonnen am 23. Jul 2010 · letzter Beitrag vom 28. Jul 2010
Antwort Antwort
bjma

Registriert seit: 24. Sep 2005
Ort: Balingen
49 Beiträge
 
Delphi 11 Alexandria
 
#1

Delphi 2009 und Druckerschächte

  Alt 23. Jul 2010, 17:00
Hallo ich bin neu in diesem Forum.
Ich verwende seit einigen Monaten Delphi2009prof. Ich stelle daher meine alten Programme Delphi 2005 auf die neue Version um.
Als Reportgenerator verwende ich Quickreport prof. 5.4.

Meine bisherige Druckerschachtsteuerung funktiontiert plötzlich nicht mehr. Ich erhalte beim auslesen der Outbin codes bei jedem Druckerschacht die gleichen Angaben.
Auch bei Aufruf von printerdialog wird der eingestellte Schacht ignoriert.

Nach einem Versuch in Rave Report das gleiche Phänomen. Egal wie ich die Schächte angebe es wird immer über den Standartschacht gedruckt.

Dies macht mich langsam verrückt.
Hat jemand eine gute Idee.
Jürgen Maute
  Mit Zitat antworten Zitat
omata

Registriert seit: 26. Aug 2004
Ort: Nebel auf Amrum
3.154 Beiträge
 
Delphi 7 Enterprise
 
#2

AW: Delphi 2009 und Druckerschächte

  Alt 23. Jul 2010, 23:32
Und ein Testausdruck über den Druckertreiber funktioniert korrekt?
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.041 Beiträge
 
Delphi 12 Athens
 
#3

AW: Delphi 2009 und Druckerschächte

  Alt 24. Jul 2010, 09:19
Rück doch mal den Code raus...
Uwe Raabe
  Mit Zitat antworten Zitat
bjma

Registriert seit: 24. Sep 2005
Ort: Balingen
49 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: Delphi 2009 und Druckerschächte

  Alt 24. Jul 2010, 17:20
Textseite ist ok. Meine Programme die mit delph5 erzeugt wurden können sauber auf die Schächte zugreifen.
Sobald die selben Programme jedoch mit delphi 2009 erzeugt werden nur standartschacht möglich.

Also bisher habe ich bei jedem neuen Drucker mit unterem Programm die Schächte ausgelesen.
Bsp. HP 2055 Schacht 3 kann mit CustomBinCode:=260 angesteuert werden.
Code:

procedure TForm1.Button2Click(Sender: TObject);

var
hDevMode: THandle;
Device,Driver,Port: array [0..1024] of Char;
bin: integer;
DevMode : PDevMode;
UserCollateCode: integer;
result:integer;
begin
Printer.GetPrinter(Device,Driver,Port,hDevMode);
bin := -1;
if hDevMode <> 0 then
begin
DevMode := GlobalLock (hDevMode);
//members von DevMode
bin := DevMode^.DMDEFAULTSOURCE;
UserCollateCode := DevMode^.dmCollate;
GlobalUnlock (hDevMode);
end;
result := bin;
showmessage(inttostr(result));
end;




procedure GetPaperBins(sl: TStrings);
type
TBinName = array [0..23] of Char;
TBinNameArray = array [1..High(Integer) div SizeOf(TBinName)] of TBinName;
PBinnameArray = ^TBinNameArray;
TBinArray = array [1..High(Integer) div SizeOf(Word)] of Word;
PBinArray = ^TBinArray;
var
Device, Driver, Port: array [0..255] of Char;
hDevMode: THandle;
i, numBinNames, numBins, temp: Integer;
pBinNames: PBinnameArray;
pBins: PBinArray;
begin
Printer.PrinterIndex := -1;
Printer.GetPrinter(Device, Driver, Port, hDevmode);
numBinNames := WinSpool.DeviceCapabilities(Device, Port, DC_BINNAMES, nil, nil);
numBins := WinSpool.DeviceCapabilities(Device, Port, DC_BINS, nil, nil);
if numBins <> numBinNames then
begin
raise Exception.Create('DeviceCapabilities reports different number of bins and bin names!');
end;
if numBinNames > 0 then
begin
pBins := nil;
GetMem(pBinNames, numBinNames * SizeOf(TBinname));
GetMem(pBins, numBins * SizeOf(Word));
try
WinSpool.DeviceCapabilities(Device, Port, DC_BINNAMES, PChar(pBinNames), nil);
WinSpool.DeviceCapabilities(Device, Port, DC_BINS, PChar(pBins), nil);
sl.Clear;
for i := 1 to numBinNames do
begin
temp := pBins^[i];
sl.addObject(pBinNames^[i], TObject(temp));
end;
finally
FreeMem(pBinNames);
if pBins <> nil then
FreeMem(pBins);
end;
end;

Danach habe ich die Schächte in einer Datenbank hinterlegt und bei den einzelnen Programmen aufgerufen:

rechnung.rechnung.PrinterSettings.PrintMetaFile := True;
rechnung.rechnung.PrinterSettings.UseCustomBinCode := True;
rechnung.rechnung.PrinterSettings.CustomBinCode:=2 60;

Hat bisher immer sauber funktioniert bei HP, Koycera,Cannon.

Habe die selben Ergebnisse bei Rave, Fastreport und Quickreport. Es muß ein Delphi2009 Problem sein.
Sobald die Schächte eingestellt sind (auch über printersetup) überschreibt delphi die Eingaben und geht auf Standartdrucker und Standartschacht.

Hoffe auf Eure Hilfe.
Jürgen
Jürgen Maute
  Mit Zitat antworten Zitat
Benutzerbild von OldGrumpy
OldGrumpy

Registriert seit: 28. Sep 2006
Ort: Sandhausen
941 Beiträge
 
Delphi 2006 Professional
 
#5

AW: Delphi 2009 und Druckerschächte

  Alt 24. Jul 2010, 20:38
Von Delphi 2005 zu 2009 haben sich durch die Unicode-Unterstützung einige der Standarddatentypen geändert. Vor allem Char ist jetzt standardmäßig ein Widechar, ersetze probehalber zuerst einmal alle Vorkommen von "Char" durch "AnsiChar" und probiers nochmal.
"Tja ja, das Ausrufezeichen... Der virtuelle Spoiler des 21. Jahrhunderts, der Breitreifen für die Datenautobahn, die k3wle Sonnenbrille fürs Usenet. " (Henning Richter)
  Mit Zitat antworten Zitat
bjma

Registriert seit: 24. Sep 2005
Ort: Balingen
49 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: Delphi 2009 und Druckerschächte

  Alt 27. Jul 2010, 09:47
Bei Änderung auf AnsiChar erhalte ich eine Fehlermeldung "Array und AnsiChar nicht kompatibel".

Besteht eigentlich die Möglichkeit das Delphi bei 2 Entwicklungsumgebungen (5 und 2009) beim Linken eventuell überfordert ist. Und falsche Paramenter lädt.

Jürgen
Jürgen Maute
  Mit Zitat antworten Zitat
Benutzerbild von OldGrumpy
OldGrumpy

Registriert seit: 28. Sep 2006
Ort: Sandhausen
941 Beiträge
 
Delphi 2006 Professional
 
#7

AW: Delphi 2009 und Druckerschächte

  Alt 27. Jul 2010, 09:56
Ich tüftel ja wirklich gerne, aber würde es Dir evtl. etwas ausmachen, neben dem reinen Fehlermeldungstext vielleicht auch noch die Stelle mit anzugeben? In der Regel reicht dort nämlich simples draufgucken schon aus um den Fehler selber zu sehen und womöglich auch zu beheben. Überforderung tritt übrigens meist nicht im Linker sondern erst auf OSI Layer 8 auf
"Tja ja, das Ausrufezeichen... Der virtuelle Spoiler des 21. Jahrhunderts, der Breitreifen für die Datenautobahn, die k3wle Sonnenbrille fürs Usenet. " (Henning Richter)
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.041 Beiträge
 
Delphi 12 Athens
 
#8

AW: Delphi 2009 und Druckerschächte

  Alt 27. Jul 2010, 10:32
Bis auf das andere Befüllen der Stringlist sl.Add(IntToStr(temp) + ':' + pBinNames^[i]); bekomme ich mit deinem Code unter D2010 folgende Liste für meinen HP Drucker:
15: Automatisch auswählen
257: Drucker autom. Auswahl
258: Man. Zufuhr (Fach 1)
259: Fach 1
260: Fach 2
261: Fach 3
1277:Nicht bestimmt
1276:Normal
1275:Vorgedruckt
1274:Briefkopf
1002:Transparentfolie
1273:Vorgelocht
1272:Etiketten
1271:Briefpapier
1270:Recyclingpapier
1269:Farbpapier
1268:Leicht (< 75 g/m2)
1267:Schwer 106-163 g/m2
1266:Karton > 163 g/m2
1265:Hochglänzend 75-105 g/m
1264:Hochglänzend, schwer
1263:ToughPaper
1262:Briefumschlag
Uwe Raabe
  Mit Zitat antworten Zitat
bjma

Registriert seit: 24. Sep 2005
Ort: Balingen
49 Beiträge
 
Delphi 11 Alexandria
 
#9

AW: Delphi 2009 und Druckerschächte

  Alt 28. Jul 2010, 08:19
Super es klappt.
Durch die Änderung findet er plötzlich die Schächte wieder. Verstehe zwar nicht wieso aber hauptsache es klappt.

Hatte im weiteren Programm noch einen kleinen Bug.
Denn sobald er die Schächte nicht sauber finden konnte sollte er lt. Programm auf den Standartdrucker mit Standartschacht zurückgreifen. Habe dies jetzt geändert das er hier eine Fehlermeldung anzeigt.

Jetzt kann er die Schächte exakt auslesen.

Vielen Dank !!!!!!!!!!

Jürgen
Jürgen Maute
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:14 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