Papiergröße ändern/einstellen
-
Hallo zusammen
Ich möchte an einem Etikettendrucker die Etikettengröße auswählen (ohne Dialog).
Nun hab ich mal versucht an einem ganz normalen Drucker die Einstellungen auszulesen, dies sollte doch eigentlich mit DocumentProperties gehen. Ich habe mal versucht vorzugehen wie es im MSDN steht, jedoch ich bekomms nicht hinlong length=0; LPDEVMODE *test, x; DWORD error=0; HANDLE printer = NULL; LPTSTR name = "\\\\fe17756\\AESL6"; OpenPrinter(name, &printer, NULL); //PrinterHandle ermitteln error = GetLastError(); length = DocumentProperties(NULL, printer, name, NULL, NULL, 0); //DEVMODE grösse ermitteln error = GetLastError(); test = (LPDEVMODE *) malloc(length); //speicher belegen error = DocumentProperties(NULL, printer, name, *test, NULL, DM_OUT_BUFFER); //DEVMODE Struktur auslesen error = GetLastError();
Allerdings bekomme ich beim letzten Aufruf von GetLastError() immer Fehler 122 (ERROR_INSUFFICIENT_BUFFER) was doch soviel bedeutet wie, daß ich zu wenig Speicher reserviert habe, oder?
DocumentProperties gibt eine 1 zurück.Ich hoffe hier kann mir jemand helfen.
MfG Stephan
-
Lass mal den Stern vor test in vorletzter Zeile weg.
-
Hallo zusammen
Wenn ich den Stern entferne bekomme ich folgenden Compilerfehler:
[C++ Fehler] Unit1.cpp(88): E2034 Konvertierung von '_devicemodeA * *' nach '_devicemodeA *' nicht möglich.
[C++ Fehler] Unit1.cpp(88): E2343 Keine Übereinstimmung des Typs beim Parameter pDevModeOutput im Aufruf von '__stdcall DocumentPropertiesA(void *,void *,char *,_devicemodeA *,_devicemodeA *,unsigned long)'.MfG Stephan
-
Machs mal so:
TPrinter *PrinterInstanz;
PrinterInstanz=Printer();DBW->Caption=GetDeviceCaps(PrinterInstanz->Handle,HORZSIZE);
DBH->Caption=GetDeviceCaps(PrinterInstanz->Handle,VERTSIZE);Pic->Bitmap->Width=PrinterInstanz->PageWidth;
Pic->Bitmap->Height=PrinterInstanz->PageHeight;PS:
DBW und DBH sind Labels,
Pic ist ein TPicture.
-
Hallo zusammen
Mir ist etwas an deinem Beispiel noch nicht ganz klar.
In den Labels habe ich dann die Höhe und Breite des eingestellten Papiers.Jedoch das mit dem TPicture verstehe ich nicht.
Ich erstelle doch damit ein Pic mit der Pixelgröße der aktuell eingestellten Papiergröße, oder hab ich da etwas falsch verstanden? Und eben genau hier verstehe ich nicht was mir dies bringen soll.
Ich habe nämlich bisher keine Funktion gefunden um schreiben auf die Papiergröße zuzugreifen.MfG Stephan
-
Hi Keks.
Das mit dem Picture ist aus meiner Printer- komponente. Da mal ich d'rauf und kopier das in Canvas vom Printer.
Das brauchst Du nicht so. Sollte nur das Auslesen der Werte zeigen.Zum Setzen schau mal in die Hilfe zu:
SetDeviceCaps(...)
PS: Ich setz die Papiermasse mit den Treibereinstellungen und les' die nur aus.
-
Hallo zusammen
@DerAltenburger
Habe ich das richtig verstanden, daß du die Papiergröße über den Treiberdialog setzt?
Das Problem ist, daß es die Funktion SetDeviceCaps(...) nicht gibt.Danke für deine Hilfe.
Könnten eventuell dir Jungs vom WinApi Forum mir hier weiterhelfen, wenn ihr denkt ja, dann bitte verschieben?
MfG Stephan