AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Eigener Eigenschaftsdialog für Drucker
Thema durchsuchen
Ansicht
Themen-Optionen

Eigener Eigenschaftsdialog für Drucker

Offene Frage von "Sourcemaker"
Ein Thema von Sourcemaker · begonnen am 12. Sep 2003 · letzter Beitrag vom 22. Dez 2003
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von Sourcemaker
Sourcemaker

Registriert seit: 3. Sep 2003
Ort: Westoverledingen
264 Beiträge
 
Delphi 11 Alexandria
 
#1

Eigener Eigenschaftsdialog für Drucker

  Alt 12. Sep 2003, 12:33
In meiner Anwendung benutze ich einen eigenen Druckerdialog um die im Programm mit Pseudonym angelegten Drucker auszuwählen.
Das heißt ich habe z.B. 4 mögliche Drucker Formular-1, Formular-2, Fax und Etiketten diese Pseudo-Drucker sind mit Printerindizes der echten Systemdrucker verknüpft. Zu diesen Druckern kann ich jetzt verschiedene Eigenschaften wie Formularränder zu druckende Kopf-/Fuß-BMP´s, eigene Kopierfunktion etc. einstellen.
Das Druckerdialogfenster das ich selber gemacht habe sieht so aus wie ein normaler Printdialog das habe ich alles nachstellen können aber der Button für die Druckereigenschaften hat keine Funktion und die hätte ich nun gerne. Ich habe schon viele Internet-Recherchen durchgeführt aber nichts gefunden.

Für Vorschläge/Lösungen oder Konzepte wäre ich dankbar.

Mfg.

Frank Klose
Frank
  Mit Zitat antworten Zitat
Mario

Registriert seit: 7. Apr 2003
567 Beiträge
 
Delphi 2006 Enterprise
 
#2

Re: Eigener Eigenschaftsdialog für Drucker

  Alt 12. Sep 2003, 13:16
Schaue Dir mal die Funktion DocumentProperties an. Die sollte das gewünschte tun.

Suche mal in den Sourcen deiner Komponenten danach. Du solltest da ein Beispiel finden. Ich habe es beim RBuilder gefunden, kann es aber nicht veröffentlichen, da ich mir nicht sicher bin, ob ich das darf §?§
Schöne Grüße,
Mario Noack
  Mit Zitat antworten Zitat
neolithos

Registriert seit: 31. Jul 2003
Ort: Dresden
1.386 Beiträge
 
Delphi 7 Architect
 
#3

Re: Eigener Eigenschaftsdialog für Drucker

  Alt 12. Sep 2003, 13:26
Warum machst du nicht eine Vorauswahl, wo man einen Schalter klickt und den Windows-Drucker-Dialog sieht.

Sonst müsstes du ihn in einem Formular nachempfinden.
- ciao neo -
Es gibt niemals dumme Fragen, sondern nur dumme Antworten!
  Mit Zitat antworten Zitat
Benutzerbild von Sourcemaker
Sourcemaker

Registriert seit: 3. Sep 2003
Ort: Westoverledingen
264 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: Eigener Eigenschaftsdialog für Drucker

  Alt 12. Sep 2003, 13:36
Danke Mario schaue ich mir gerade an sieht aber gruselig aus bin merh auf der Anwendungsentwicklung als in diesen Kellern zu Hause hatte deshalb auf eine etwas simplere Schnittstelle gehofft.

Zu Neo ich habe doch erklärt wieso ich keinen Standarddialog verwende und das ich bereits das Fenster nachgebaut habe.

Danke für die Antworten aber wie gesagt ein fertiger Aufruf wäre schön.

Grüße

Frank
Frank
  Mit Zitat antworten Zitat
Mario

Registriert seit: 7. Apr 2003
567 Beiträge
 
Delphi 2006 Enterprise
 
#5

Re: Eigener Eigenschaftsdialog für Drucker

  Alt 12. Sep 2003, 13:46
Evtl. ist es ja das:
Delphi-Quellcode:
procedure TForm1.Button2Click(Sender: TObject);
var
  hPrinter: THandle;
  Device : array[0..255] of char;
  Driver : array[0..255] of char;
  Port : array[0..255] of char;
  hDeviceMode: THandle;
  pDevmodeOut: PDeviceMode;
  bytesNeeded: DWORD;
begin
  Printer.PrinterIndex := combobox1.itemindex;
  Printer.GetPrinter(Device, Driver, Port, hDeviceMode);
  if WinSpool.OpenPrinter(@Device, hPrinter, nil) then
  try
    bytesNeeded := DocumentProperties(
      handle, hPrinter, Device, Nil, Nil, 0 );
    pDevmodeOut := AllocMem( bytesNeeded );
    If IDOK = DocumentProperties(
                Handle, hPrinter, Device, pDevModeOut, Nil,
                DM_OUT_BUFFER or DM_IN_PROMPT )
    Then
    ; // do something intelligent here
    FreeMem( pDevModeOut );
  finally
    WinSpool.ClosePrinter( hPrinter );
  end;
end;
Quelle: http://groups.google.com/groups?hl=d...rties%2Bdelphi
Schöne Grüße,
Mario Noack
  Mit Zitat antworten Zitat
Benutzerbild von Sourcemaker
Sourcemaker

Registriert seit: 3. Sep 2003
Ort: Westoverledingen
264 Beiträge
 
Delphi 11 Alexandria
 
#6

Re: Eigener Eigenschaftsdialog für Drucker

  Alt 12. Sep 2003, 16:42
Hallo Mario,

besten Dank für Deine Mühe aber poste bitte das ganze Beispiel ein entscheidener Teil fehlte.

Delphi-Quellcode:
function DocumentProperties(hWnd: HWND; hPrinter: THandle; pDeviceName: PChar;
  pDevModeOutput: PDeviceMode; pDevModeInput: PDeviceMode;
  fMode: DWORD): Longint; stdcall;
  external 'winspool.dllname 'DocumentPropertiesA';
Habe ich dann durch den Link gesehen.
Der Code stimmt aber auch nicht mehr wahrscheinlich war es für ein altes Windows bzw. Delphi gedacht.
Richtiger:

Delphi-Quellcode:
function DocumentProperties(hWnd: HWND; hPrinter: THandle; pDeviceName: PChar;
  pDevModeOutput: PDeviceMode; pDevModeInput: PDeviceMode;
  fMode: DWORD): Longint; stdcall;
  external winspl name 'DocumentPropertiesA';
Damit kommt das Eigenschaftsfenster aber beim schließen in der IDE geht das Programm in den Debugger man kann aber F9 drücken und es läuft ohne Fehler weiter. Außerhalb der IDE keine Meldung.
Mache jetzt Wochenende und teste nächste Woche weiter.

Weitere Ideen oder Fixes sind erwünscht.

Schönes Wochenende und bis bald.

Frank
Frank
  Mit Zitat antworten Zitat
Mario

Registriert seit: 7. Apr 2003
567 Beiträge
 
Delphi 2006 Enterprise
 
#7

Re: Eigener Eigenschaftsdialog für Drucker

  Alt 15. Sep 2003, 07:07
Die Deklaration war bei mir nicht notwendig. So lief es dann:
Delphi-Quellcode:
uses
... Printers, WinSpool;

...

procedure TForm1.Button1Click(Sender: TObject);
var
  aDevMode: TDeviceMode;
  hPrinter: THandle;
  Device : array[0..255] of char;
  Driver : array[0..255] of char;
  Port : array[0..255] of char;
  hDeviceMode: THandle;
  pDevmodeOut: PDeviceMode;
  bytesNeeded: DWORD;
begin
  Printer.GetPrinter(Device, Driver, Port, hDeviceMode);
  if WinSpool.OpenPrinter(@Device, hPrinter, nil) then
  try
    bytesNeeded := DocumentProperties(
      handle, hPrinter, Device, aDevMode, aDevMode, 0 );
    pDevmodeOut := AllocMem( bytesNeeded );
    If IDOK = DocumentProperties(
                Handle, hPrinter, Device, aDevMode, aDevMode,
                DM_OUT_BUFFER or DM_IN_PROMPT )
    Then
    ; // do something intelligent here
    FreeMem( pDevModeOut );
  finally
    WinSpool.ClosePrinter( hPrinter );
  end;
end;
Schöne Grüße,
Mario Noack
  Mit Zitat antworten Zitat
Benutzerbild von Sourcemaker
Sourcemaker

Registriert seit: 3. Sep 2003
Ort: Westoverledingen
264 Beiträge
 
Delphi 11 Alexandria
 
#8

Re: Eigener Eigenschaftsdialog für Drucker

  Alt 15. Sep 2003, 13:38
Stimmt der Code compiliert und man kann das Fenster auch aufrufen aber sowohl in D5 als auch in D7 kommt eine Zugriffsverletzung wenn man Ok betätigt.
Als nächstes muß ich jetzt noch Quickreport beibringen die gemachten Änderungen zu übernehmen.

Grüße

Frank Klose
Frank
  Mit Zitat antworten Zitat
Mario

Registriert seit: 7. Apr 2003
567 Beiträge
 
Delphi 2006 Enterprise
 
#9

Re: Eigener Eigenschaftsdialog für Drucker

  Alt 15. Sep 2003, 13:41
Ok hatte ich nicht probiert
Schöne Grüße,
Mario Noack
  Mit Zitat antworten Zitat
emkay

Registriert seit: 24. Sep 2003
9 Beiträge
 
#10

Re: Eigener Eigenschaftsdialog für Drucker

  Alt 24. Sep 2003, 14:05
Zitat:
Als nächstes muß ich jetzt noch Quickreport beibringen die gemachten Änderungen zu übernehmen.
Und das ist auch mein Problem, allerdings nicht mit Quickreport, sondern allgemein.

Durch "DM_IM_PROMPT". Erscheint ja nun der Druckertreiberdialog.
Wenn ich etwas darin ändere und OK drücke hat sich aber scheinbar nichts in der DEVMODE-Struktur geändert. Beim Nachschauen oder 'nem Druckversuch werden die alten Einstellungen verwendet.

Muss ich da noch irgendwo selbst eingreifen?
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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:00 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