Announcement

Collapse
No announcement yet.

Canvas drucken/speichern - wie?

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Canvas drucken/speichern - wie?

    Hallo,

    ich habe hier eine Zukaufkomponente, die von TCustomControl abgeerbt ist und welche seine Inhalte auf seinen Canvas in der überschriebenen "Paint"-Methode malt. Das entstandene Bild möchte ich nun in ein TBitmap oder ähnliches konvertieren, welches ich dann kopieren, speichern, drucken kann (TBitmap.SaveToFile etc.)...

    Meine Versuche dazu waren bislang nicht gerade von Erfolg gekrönt:

    myBMP.Height := Zukauf.ClientHeight;
    myBMP.Width := Zukauf.ClientWidth;

    1. Assignen als myBMP.Canvas.Assign( Zukauf.Canvas ) geht nicht ("ein Control-Canvas kann nicht zu einem Bitmap-Canvas zugewiesen werden")

    2. myBMP.Canvas.Draw(0,0,TGraphic(Zukauf)) geht auch nicht, der Canvas des Bitmaps ist danach leer.

    3. Canvas.CopyRect: diese Methode verlangt, dass ich der Zukauf-Komponente erst mal einen Parent gebe. Diese malt sich dann sofort auf den dann zugewiesenen Parent, was sehr unprofessionell aussieht. Setze ich den Parent auf Visible := False damit man das nicht sieht, dann kopiert er ein leeres Rect. Ich möchte ja die Zeichnung im Speicher malen lassen ohne sichtbare Komponente. Außerdem kopiert die CopyRect-Methode auch die Scrollbars, die man hat, wenn man in die Zukaufskomponenten-Zeichnung reinzoomt. Ich möchte doch einfach nur den gesamten Zeichenbereich ansprechen, unabhängig was gerade angezeigt wird.

    MyRect.Top := 0;
    MyRect.Left := 0;
    MyRect.Right := self.ClientWidth;
    MyRect.Bottom := self.ClientHeight;

    aBmp.Height := self.ClientHeight;
    aBmp.Width := self.ClientWidth;
    aBmp.Canvas.CopyRect(MyRect, self.Canvas, MyRect);

    -> Ergebnis: abhängig von der größe des Parents wird die Zeichnung in das Bitmap kopiert. Ist der Parent zu klein, dann habe ich lästige Scrollbars...

    Weiß irgendwer weiter?

    MfG,
    Patrick

  • #2
    So, hab es selber hinbekommen *freu*

    Lösung:

    aBmp.Height := Zukauf.ClientHeight;
    aBmp.Width := Zukauf.ClientWidth;

    Zukauf.PaintTo(aBmp.Canvas.Handle, 0, 0);

    Gruß,
    Patrick

    Comment

    Working...
    X