AGB  ·  Datenschutz  ·  Impressum  







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

Drucker canvas skalieren

Ein Thema von Evian · begonnen am 10. Sep 2010 · letzter Beitrag vom 10. Sep 2010
Antwort Antwort
Benutzerbild von Evian
Evian

Registriert seit: 10. Apr 2003
Ort: Berlin
485 Beiträge
 
Delphi 6 Professional
 
#1

Drucker canvas skalieren

  Alt 10. Sep 2010, 15:42
Hallo Zusammen,

ich sitze hier vor einem ziemlich doofen Problem. Mein Programm soll unter bestimmten Bedingungen Barcodes auf einem Barcode-Drucker drucken. Dafür habe ich eine Komponente (TBarCode), die eine Print-Methode mitbringt. In etwa so:

Code:
Printer.BeginDoc;
tmpbarcode.Print(x,y);
Printer.EndDoc;
Wärend tmpbarcode.Print(x,y); wird der Barcode an die Stelle x,y ins Drucker Canvas geschrieben.
Das drucken ansich funktioniert auch ohne Probleme, nur sagen mir die MTAs aus dem Labor, dass der Barcode zu breit ist für ihre Automaten.
Die Barcodes selber bringen aber keine wirklich funktionierende Methode mit um den Druck weiter zu skalieren.

Ich suche nun eine möglichkeit, das gesammte DruckerCanvas im Nachhinein zu skalieren. Hat da jemand einen Tipp?

Liebe Grüße,

Evian
-> www.Phillsoft.de

Ich bin nun Mathematiker, aber meine Freundin bleibt trotzdem unberechenbar!
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#2

AW: Drucker canvas skalieren

  Alt 10. Sep 2010, 16:34
Ich kenne Deine Komponente nicht, unterstütze Deine weiter Routinen?

Bei Bir z.B.

procedure Print(OfsX, OfsY : integer); override;
PROCEDURE DrawBarCode(PrintWhere:TObject;UsePixelsPerInchX : integer);


Hier kann ich bei PrintWhere ein beliebiges canvas angeben und das Bild per Strechdraw an den Printer schicken..
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#3

AW: Drucker canvas skalieren

  Alt 10. Sep 2010, 16:42
SetMapMode und Co. (Siehe Abschnitt "See also") könnten interessant sein.
  Mit Zitat antworten Zitat
Benutzerbild von Evian
Evian

Registriert seit: 10. Apr 2003
Ort: Berlin
485 Beiträge
 
Delphi 6 Professional
 
#4

AW: Drucker canvas skalieren

  Alt 10. Sep 2010, 17:12
@Bummi: Leider nein. Die Komponente ist generell sehr eingeschränkt. Für das Drucken gibt es keine weiteren Funktionen.
@NamenLozer: Danke für den Tipp, aber wirklich etwas gefunden, das mir weiterhelfen könnte, habe ich nicht. :/

Ich hatte jetzt auch eher daran gedacht, das Canvas des Druckers per StretchBlt/StretchDraw zu modifizieren. Aber bisher bekomme ich immer nur exceptions. Geht das Überhaupt?!
-> www.Phillsoft.de

Ich bin nun Mathematiker, aber meine Freundin bleibt trotzdem unberechenbar!
  Mit Zitat antworten Zitat
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#5

AW: Drucker canvas skalieren

  Alt 10. Sep 2010, 17:21
@NamenLozer: Danke für den Tipp, aber wirklich etwas gefunden, das mir weiterhelfen könnte, habe ich nicht. :/
Hast du das Kapitel über Coordinate Spaces and Transformations gelesen?
Aus der Einleitung:
Applications use coordinate spaces and transformations to scale, rotate, translate, shear, and reflect graphics output. A coordinate space is a planar space that locates two-dimensional objects by using two reference axes that are perpendicular to each other. There are four coordinate spaces: world, page, device, and physical device (client area, desktop, or page of printer paper).

A transformation is an algorithm that alters ("transforms") the size, orientation, and shape of objects. Transformations also transfer a graphics object from one coordinate space to another. Ultimately, the object appears on the physical device, which is usually a screen or printer.

Da geht es doch offensichtlich genau um das, was du vorhast.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.056 Beiträge
 
Delphi 12 Athens
 
#6

AW: Drucker canvas skalieren

  Alt 10. Sep 2010, 17:27
Hier auch nochmal 2 Links zu ähnlichen Themen:
http://www.delphipraxis.net/53976-in...tml#post365632
http://www.delphipraxis.net/129499-schrift-pixelig.html

Wie schin jemand sagte, über SetMapMode kannst du die Auflösung des (Printer)Canvas verändern.

Wenn es überall etwa gleich aussehn soll, dann darfst du kein Hardwareabhäniges Format nutzen, sondern nutzt einfach ein festes Format, wobei man sich hier einige Auflösungen in Inch/Zoll oder Millimetern auswählen kann (siehe erster Link).


Wenn du noch mehr skalieren willst, dann wäre halt der Weg über SetWorldTransform (siehe NamenLozer) oder du könntest du die TBarCode-Ausgabe erstmal auf ein TBitMap zeichnen und kopierst dann dieses Bild skaliert auf den Printer-Canvas.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.

Geändert von himitsu (10. Sep 2010 um 17:37 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#7

AW: Drucker canvas skalieren

  Alt 10. Sep 2010, 17:44
der Beitrag von NamenLozer hat mich inspiriert,
Versuchs doch mal mit


SetCanvasZoomFactor(Printer.canvas,70);

Delphi-Quellcode:
procedure SetCanvasZoomFactor(Canvas: TCanvas; AZoomFactor: Integer);
var
  i: Integer;
begin
  if AZoomFactor = 100 then
    SetMapMode(Canvas.Handle, MM_TEXT)
  else
  begin
    SetMapMode(Canvas.Handle, MM_ISOTROPIC);
    SetWindowExtEx(Canvas.Handle, 100,100, nil);
    SetViewportExtEx(Canvas.Handle,AZoomFactor, AZoomFactor, nil);
  end;
end;
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
Benutzerbild von Evian
Evian

Registriert seit: 10. Apr 2003
Ort: Berlin
485 Beiträge
 
Delphi 6 Professional
 
#8

AW: Drucker canvas skalieren

  Alt 10. Sep 2010, 18:10
oh ich muss mich vielmals entschuldigen... ich habe das C-Codebeispiel nicht gesehen. Sorry @NamenLozer!!!

mit

Code:
    var  
      form : tagXFORM;    
 
Printer.BeginDoc;
    SetGraphicsMode(Printer.Handle, GM_ADVANCED);
    SetMapMode(Printer.Handle,MM_ANISOTROPIC);

    form.eM11 := 0.95;
    form.eM12 := 0.0;
    form.eM21 := 0.0;
    form.eM22 := 0.95;
    form.eDx := 0.0;
    form.eDy := 0.0;

    SetWorldTransform(PRINTER.Canvas.Handle,form);
Printer.EndDoc;
kann ich auf 95% skalieren... funktioniert wunderbar. Danke!!!
-> www.Phillsoft.de

Ich bin nun Mathematiker, aber meine Freundin bleibt trotzdem unberechenbar!
  Mit Zitat antworten Zitat
Benutzerbild von xZise
xZise

Registriert seit: 3. Mär 2006
Ort: Waldbronn
4.303 Beiträge
 
Delphi 2009 Professional
 
#9

AW: Drucker canvas skalieren

  Alt 10. Sep 2010, 19:06
Könntest du nicht vielleicht auch einfach eine eigene Unit verwenden (ist es also ein "gebräuchlicher" Code)? Hier gibt es glaub ich irgendwo eine Libary mit vielen verschiedenen Codes.

MfG
Fabian
Fabian
Eigentlich hat MS Windows ab Vista den Hang zur Selbstzerstörung abgewöhnt – mkinzler
  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 01:35 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