Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Problem mit Metafile (https://www.delphipraxis.net/66579-problem-mit-metafile.html)

igel457 31. Mär 2006 17:30


Problem mit Metafile
 
Ich habe Momentan (wie immer) ein kleines Problem...

Ich habe noch nie mit MetaFiles in Delphi gearbeitet. Wie kann ich etwas auf ein MetafileCanvas Zeichnen, ohne den Inhalt der Aktuellen Metafile zu überschreiben?
Da ich bei jedem Mausklick einen Kreis Zeichnen möchte, der dann auch sichtbar wird, muss ich den MetafileCanvas immer wieder frei geben.

Delphi-Quellcode:
procedure OnMouseDown;
begin
  mc := TMetafileCanvas.Create(mf,0);
  //Hier müsste ich jetzt irgendwie den Aktuellen Inhalt "Assignen".
  with mc do
  begin
    Brush.Color := c;
    Pen.Color := c;
    Ellipse(round((lx-w div 2)),round((ly-w div 2)),round((lx+w div 2)),round((ly+w div 2)));
  end;
  mc.free;
end;

procedure Create;
begin
  mf := TMetafile.Create;
  mf.Width := 630;
  mf.Height := 315;
end;
Danke!

xaromz 31. Mär 2006 18:02

Re: Metafile und Canvas
 
Hallo,

Du musst ein neues Metafile erzeugen, und auf dessen Canvas Dein Original-Metafile malen. Ungefähr so:
Delphi-Quellcode:
procedure MalAufMetaFile(var AMF: TMetaFile); // <- hier ist var wichtig
var
  MF: TMetaFile;
begin
  MF := TMetaFile.Create;
  MF.Width := AMF.Width;
  MF.Height := AMF.Height;
  with TMetafileCanvas.Create(MF, 0) do
  begin
    Draw(0, 0, AMF); // Original zeichnen

    // hier die weiteren Graphikoperationen
    Brush.Color := c;
    Pen.Color := c;
    Ellipse(round((lx-w div 2)),round((ly-w div 2)),round((lx+w div 2)),round((ly+w div 2)));
    //
  end;
  AMF.Free; // Original zerstören
  AMF := MF; // Neues Metafile zurückliefern
end;
Gruß
xaromz

igel457 31. Mär 2006 18:08

Re: Problem mit Metafile
 
Im Großen und Ganzen funktioniert es, allerdings beginnt es ungefähr nach dem 9. Mal furchtbar zu ruckeln und wird äußerst langsam.

Hoffe, das es da auch noch eine Lösung gibt. Die Metafile ist ungefähr 630*315 PX groß.

xaromz 31. Mär 2006 18:13

Re: Problem mit Metafile
 
Hallo,

das Problem ist, dass beim Zeichnen eines Metafiles ja immer die einzelnen Zeichenschritte durchgeführt werden. Mit jedem Durchlauf werden es also immer mehr Zeichenschritte, die nötig sind.
Wie sich dieses Problem hier konkret lösen lässt, kann ich Dir nicht sagen. Vielleicht solltest Du über Deine Herangehensweise nachdenken und einen anderen Ansatz wählen.

Gruß
xaromz

igel457 31. Mär 2006 19:03

Re: Problem mit Metafile
 
Ja, ich Bastel mir ein eigenes Dateiformat für meine Karten. Die bestehen ja eigentlich nur aus Kreisen. Also bau ich mir jetzt einfach eine Liste...

Danke trotzdem!

igel457


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:36 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