AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi nach dem Drucken alles spiegelverkehrt ????

nach dem Drucken alles spiegelverkehrt ????

Ein Thema von guitar1 · begonnen am 16. Sep 2007 · letzter Beitrag vom 17. Sep 2007
Antwort Antwort
guitar1

Registriert seit: 9. Sep 2006
65 Beiträge
 
Turbo Delphi für Win32
 
#1

nach dem Drucken alles spiegelverkehrt ????

  Alt 16. Sep 2007, 00:37
hi,

ich drucke mit folgendem Code, ein TImage, welches ich auch als Druckvorschau verwende
Delphi-Quellcode:
  function DruckCanvas(Width, Height: Integer): TImage;// ist in einer andern unit aber das sollte ja nicht stören

  ...

if PrintDialog1.Execute then
begin
  Printer.Title:= CboxFormularart.Text+' '+LabNr.Caption;
  Printer.BeginDoc;
    SetMapMode(Printer.Canvas.Handle, MM_LOMETRIC);
    Printer.Canvas.Draw(0, GetDeviceCaps(Printer.Handle,VERTSIZE)*-10,
      FormDruckansicht.DruckCanvas(GetDeviceCaps(Printer.Handle, HORZSIZE)*10,
      GetDeviceCaps(Printer.Handle, VERTSIZE)*10).Picture.Graphic);
  Printer.EndDoc
end;
es klappt auch alles soweit das es ausgedruckt wird, jedoch ist alles spiegelverkehrt!!
Was mach ich denn falsch?? in der Druckansicht ist alles perfekt richtig.

grüße
guitar1
http://www.myspace.com/metalinc1
http://andi1007.funpic.de
Thomann Cyberstore mein Tipp für alle die etwas für den Musikgebrauch brauchen =)
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#2

Re: nach dem Drucken alles spiegelverkehrt ????

  Alt 16. Sep 2007, 13:18
1. Deine Funktion erzeugt ein TImage welches du niemals wieder freigibst und somit ein grosses Speicherleck erzeugt.
2. Die BitBlt() Funktion spiegelt das Bild, wenn die Höhen- bzw. Weitenangabe negativ sind. Nun ist die Frage ob das BitBlt() VCL intern irgendwo aufgerufen wird, oder du das irgendwo machst. Daher erstmal die Frage: kann es zu einer negativen Weitenangabe bei deinem Code kommen?

/EDIT: SirThornberry hat natürlich Recht. Das habe ich total übersehen. Grundsätzlich bleibt aber immernoch Punkt 1 zu beachten...
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#3

Re: nach dem Drucken alles spiegelverkehrt ????

  Alt 16. Sep 2007, 13:21
es ist ganz normal das es spiegelverkehrt ist schließlich setzt du mit MM_LOMETRIC MapMode entsprechend.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
guitar1

Registriert seit: 9. Sep 2006
65 Beiträge
 
Turbo Delphi für Win32
 
#4

Re: nach dem Drucken alles spiegelverkehrt ????

  Alt 16. Sep 2007, 13:56
das ist ja schön und gut, dass es "richtig" gedruckt wird, aber was kann ich gegen das spiegelverkehrte machen? ich muss ja MM_LOMETRIC nehmen sonst hab ichs ja nur ganz winzig! oder gibts da noch nenn anderen MapMode der angaben im metrischem system versteht und die koordinaten richtig setzt?

@Muetze1:
wie gebe ich das image denn wieder frei? also mit .Free ist mir schon klar, aber wo muss ich das setzen?
Und kann so ein Speicherleck dazuführen das eine fehlermeldung : "Das System konnte die angegebene Datei nicht finden." auftritt wenn ich auf MM_HIMETRIC umstelle?

mfg
guitar1

//EDIT: Tippfehler ausgebessert
http://www.myspace.com/metalinc1
http://andi1007.funpic.de
Thomann Cyberstore mein Tipp für alle die etwas für den Musikgebrauch brauchen =)
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.534 Beiträge
 
Delphi 11 Alexandria
 
#5

Re: nach dem Drucken alles spiegelverkehrt ????

  Alt 16. Sep 2007, 14:05
Schau mal hier
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
guitar1

Registriert seit: 9. Sep 2006
65 Beiträge
 
Turbo Delphi für Win32
 
#6

Re: nach dem Drucken alles spiegelverkehrt ????

  Alt 16. Sep 2007, 14:37
@ DeddyH:
Vielen dank, jetzt ist zumindest alles richtig rum.

Wie das mit der Freigabe des Images geht würde ich aber trozdem ganz gern noch wissen ^^
http://www.myspace.com/metalinc1
http://andi1007.funpic.de
Thomann Cyberstore mein Tipp für alle die etwas für den Musikgebrauch brauchen =)
  Mit Zitat antworten Zitat
Benutzerbild von bitsetter
bitsetter

Registriert seit: 17. Jan 2007
1.169 Beiträge
 
Turbo Delphi für Win32
 
#7

Re: nach dem Drucken alles spiegelverkehrt ????

  Alt 16. Sep 2007, 20:38
Zitat von guitar1:
Wie das mit der Freigabe des Images geht würde ich aber trozdem ganz gern noch wissen ^^
Hi,
da deine Funktion ein Objekt zurückliefert wird wahrscheinlich ein Speicherleck erzeugt werden.

Dazu gab es schon mal eine Diskussion. Funktionsrückgabe freigeben
Gruß bitsetter
"Viele Wege führen nach Rom"
Wolfgang Mocker (geb. 1954), dt. Satiriker und Aphoristiker
  Mit Zitat antworten Zitat
guitar1

Registriert seit: 9. Sep 2006
65 Beiträge
 
Turbo Delphi für Win32
 
#8

Re: nach dem Drucken alles spiegelverkehrt ????

  Alt 17. Sep 2007, 14:51
hi

@bitsetter:
erstmal danke für den Link, ich habe alles so gemacht, wie es dort beschrieben war, also die function zu einer procedure mit const parameter gemacht, ich habe auch das .Free nicht vergessen, und auch die Anzeige funktioniert einwandfrei, aber der Speicher wird nicht freigegeben?!?!

Hier mal ein bisschen Code:
Delphi-Quellcode:
//Zum Drucken:
  if PrintDialog1.Execute then
  begin
    Printer.Title:= CboxFormularart.Text+' '+LabNr.Caption;
    Printer.BeginDoc;
      SetMapMode(Printer.Canvas.Handle, MM_ANISOTROPIC);
      x:= GetDeviceCaps(Printer.Canvas.Handle, PHYSICALWIDTH);
      y:= GetDeviceCaps(Printer.Canvas.Handle, PHYSICALHEIGHT);
      SetWindowExtEx(Printer.Canvas.Handle,x,y,Nil);
      SetViewportExtEx(Printer.Canvas.Handle,x,y,Nil);

      DrCanvas := TImage.Create(self);
      FormDruckansicht.DruckCanvas(DrCanvas,x,y);
      Printer.Canvas.Draw(0-GetDeviceCaps(Printer.Canvas.Handle, PHYSICALOFFSETX),
        0-GetDeviceCaps(Printer.Canvas.Handle, PHYSICALOFFSETY),
        DrCanvas.Picture.Graphic);
      DrCanvas.Free;

    Printer.EndDoc;
  end;

//Als Druckvorschau:
DrCanvas := TImage.Create(self);
      try
        DruckCanvas(DrCanvas ,width, height);
        Image1.Canvas.Draw(0,0, DrCanvas.Picture.Graphic);
      finally
        DrCanvas.Free;
      end;
http://www.myspace.com/metalinc1
http://andi1007.funpic.de
Thomann Cyberstore mein Tipp für alle die etwas für den Musikgebrauch brauchen =)
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#9

Re: nach dem Drucken alles spiegelverkehrt ????

  Alt 17. Sep 2007, 17:24
Zitat von guitar1:
..., aber der Speicher wird nicht freigegeben?!?!
Woher hast du diese Erkenntnis? Bzw. wodrauf stützt sie sich?
  Mit Zitat antworten Zitat
guitar1

Registriert seit: 9. Sep 2006
65 Beiträge
 
Turbo Delphi für Win32
 
#10

Re: nach dem Drucken alles spiegelverkehrt ????

  Alt 17. Sep 2007, 20:05
@Muetze1:
Das kann man eindeutig im taskmanager erkennen.
http://www.myspace.com/metalinc1
http://andi1007.funpic.de
Thomann Cyberstore mein Tipp für alle die etwas für den Musikgebrauch brauchen =)
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 15:41 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