AGB  ·  Datenschutz  ·  Impressum  







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

PageControl Canvas kopieren

Ein Thema von G-Baumstamm · begonnen am 12. Feb 2011 · letzter Beitrag vom 16. Feb 2011
Antwort Antwort
G-Baumstamm

Registriert seit: 9. Jan 2010
63 Beiträge
 
Delphi 7 Enterprise
 
#1

PageControl Canvas kopieren

  Alt 12. Feb 2011, 13:43
Delphi-Version: 5
Hey

Das Problem ist recht einfach: Habe eine PageControl mit 3 Pages, von denen auf der ersten Zeug steht das ich gerne drucken würde.

Der Printer kriegt das ganze in der Form Printer.Canvas.CopyRect(Rect(X1,-Y1,X2,-Y2),C,Rect(Left, Top, Left+Width, Top+Height)); übergeben, wobei C vorher über
Delphi-Quellcode:
C := TCanvas.Create;
C.Handle := GetWindowDC(PForm.PageControl.Pages[0].Handle);
erstellt wurde.

Ziel ist es also, den Bereich auf der ersten (!!) Seite zu kopieren, egal auf welcher Seite man grade ist. Leider kopiert er aber immer den Bereich der aktuellen Seite, obwohl ich ja eindeutig den Handle von Pages[0] verwende ...

Warum? Was kann ich dagegen machen?

LG
Daniel NR
  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: PageControl Canvas kopieren

  Alt 12. Feb 2011, 17:34
selbst das hier funktioniert nicht für enthaltene Wincontrols, sofern diese nicht sichtbar sind...
Delphi-Quellcode:
var
  i:Integer;
begin
  Pagecontrol1.Pages[0].PaintTo(Image1.Canvas,0,0);
  for I := 0 to Pagecontrol1.Pages[0].ComponentCount - 1 do
      begin
        if Pagecontrol1.Pages[0].Components[i] is TWinControl then
          begin
            TWinControl(Pagecontrol1.Pages[0].Components[i]).PaintTo(Image1.Canvas,TWinControl(Pagecontrol1.Pages[0].Components[i]).BoundsRect.Left,TWinControl(Pagecontrol1.Pages[0].Components[i]).BoundsRect.top);
          end;

      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
hans ditter

Registriert seit: 25. Jun 2010
Ort: Niedersachsen
263 Beiträge
 
Turbo Delphi für Win32
 
#3

AW: PageControl Canvas kopieren

  Alt 13. Feb 2011, 00:08
also spontan würde ich dir vorschlagen. Dir zu merken auf welcher Seite du gerade bist, dann dein Programm automatisch auf die erste Seite wechselt, den Druckauftrag sendet und dann automatisch wieder zurückblendet.
Das würde dann kurz auflackern wahrscheinlich. Wäre nicht wirkich ein Problem denke ich, gut sieht nicht so schön aus, könnte aber vlt funktionieren.

LG, hans ditter
RudiRüsselSeineSocketKomponente - SirRufo (--> Chat mit PM)

Delphi Programming is the best one!
  Mit Zitat antworten Zitat
G-Baumstamm

Registriert seit: 9. Jan 2010
63 Beiträge
 
Delphi 7 Enterprise
 
#4

AW: PageControl Canvas kopieren

  Alt 14. Feb 2011, 12:16
Danke für eure Hilfe

Das Problem ist einfach das nicht jede Page der PageControl einen eigenen Canvas hat, sondern alle sich einen teilen und bei jedem Tab-Wechsel die entsprechenden Komponenten gemalt werden.

Die Variante mit dem kurzen Tab-Wechsel hatte ich auch schon versucht, da der entsprechende Tab aber ziemlich voll ist brauch er etwa ne halbe Sekunde um ihn vernünftig zu malen, deswegen müsste man vorm zurückwechseln etwas warten. Das sieht dann aber echt nich mehr schön aus, grade deswegen habe ich mich ja nach ner anderen Lösung umgetan

Ich habs jetzt so gemacht das ich im OnChanging der PageControl den entsprechenden Bereich in einem Image speichere und ggf dieses dann drucke ... hat den Nachteil das ich Änderungen die ich im 2ten oder dritten Tab mache (welche sich auf die Tabelle im ersten auswirken) erst beim drucken berücksichtigt werden können, wenn ich wieder dahin zurück gewechselt bin.

Nicht optimal, aber auch nicht so schlimm ... ^^
Daniel NR
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.351 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: PageControl Canvas kopieren

  Alt 14. Feb 2011, 15:20
Mal als Überlegung:
Du könntest Deine Komponenten für jede Seite auf eignen Formularen definieren und diese zur Laufzeit dynamisch einblenden (statt einem PageControl z.B. auch in einem TabControl).
Den Formularinhalt kannst Du dann evtl. leicher drucken?
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  Mit Zitat antworten Zitat
G-Baumstamm

Registriert seit: 9. Jan 2010
63 Beiträge
 
Delphi 7 Enterprise
 
#6

AW: PageControl Canvas kopieren

  Alt 15. Feb 2011, 17:49
Guter Vorschlag ... hatte ich mir vorher auch schon überlegt, aber wegen "zu umständlich" wieder verworfen.

Werde mich da wohl aber nochmal dran setzten (müssen), falls ich das vernünftig implementiert kriegen sollte würde das Drucken nämlich tatsächlich vernünftig gehen ...
Daniel NR
  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 02:26 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz