Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi [TImage] Fragen rund um die Canvas Komponente.... (https://www.delphipraxis.net/104372-%5Btimage%5D-fragen-rund-um-die-canvas-komponente.html)

almdudler777 2. Dez 2007 19:50


[TImage] Fragen rund um die Canvas Komponente....
 
Hi Leute,

zuerst bin noch relativ neu in Delphi von daher kann es sein das ich mit den einfachsten Sachen noch nicht vertraut bin.

Zu meinem Problem:

Ich habe ein Bild (Image1) das soll als Hintergrund dienen da kommt irgendnen JPEG Bild rein und dann wird damit nichts mehr gemacht.

Genau darüber kommt ein weiteres Bild (Image2) darauf soll man nun mittels Maus zeichnen können... dabei soll aber das hintere Bild sichtbar bleiben. Wenn ich aber nun ne Ellipse zeichnen lasse, wird der innere Teil Transparent, alles drumherum weiß....

Ich habe, da es ja auch hier öfters erwähnt wird auch mal die Paintbox versucht... mit dem Ergebniss das es hier funktioniert. Nur hat sie doch einige Schwächen die gute Paintbox. Zieht man nen MDI Fenster drüber her, dann verschwinden Linien und vor allem man kann die gezeichneten Sachen nicht abspeichern....

Aber das was ich machen will sollte doch grundsätzlich möglich sein oder nicht? Ich denke es liegt an einer Grundeinstellung die ich nicht kenne und die dolle Hilfe bei TurboDelphi kann man ja eh in die Tonne kloppen :)

Ich hoffe hier kann mir wer helfen!

MFG Daniel

PS: Mein Quellcode :)

Delphi-Quellcode:
unit mZeichenebene;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, jpeg, ExtCtrls, StdCtrls;

type
  TZeichnenPanel = class(TForm)
    Image1: TImage;
    Pain: TPaintBox;
    Button1: TButton;
    Button2: TButton;
    Image2: TImage;
    procedure PaintBox1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure Image2Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  ZeichnenPanel: TZeichnenPanel;

implementation

{$R *.dfm}

procedure TZeichnenPanel.Button2Click(Sender: TObject);
begin
  //
end;

procedure TZeichnenPanel.FormCreate(Sender: TObject);
begin
  self.DoubleBuffered := true;
end;

procedure TZeichnenPanel.PaintBox1Click(Sender: TObject);
begin
  Refresh;
     with self.Pain do begin
     Canvas.Brush.Style := bsClear;
     Canvas.Pen.Style := psSolid;
     Canvas.Pen.Color := clred;
     Canvas.Pen.Width := 2;
     Canvas.Rectangle(50,50,ClientWidth, ClientHeight);
     Canvas.Ellipse(1,1,ClientWidth, ClientHeight);
     Canvas.MoveTO(1,ClientHeight div 2);
     Canvas.LineTo(ClientWidth, ClientHeight div 2);
     Canvas.MoveTo(ClientWidth div 2, 1);
     Canvas.LineTo(ClientWidth div 2, ClientHeight);
     end;
end;

procedure TZeichnenPanel.Image2Click(Sender: TObject);
begin
  Refresh;
     with self.Image2 do begin
     //Canvas.Brush.Style := bsClear;
     //Canvas.Pen.Style := psSolid;
     //Canvas.Pen.Color := clred;
     //Canvas.Pen.Width := 2;
     Canvas.Rectangle(50,50,ClientWidth, ClientHeight);
     Canvas.Ellipse(1,1,ClientWidth, ClientHeight);
     Canvas.MoveTO(1,ClientHeight div 2);
     Canvas.LineTo(ClientWidth, ClientHeight div 2);
     Canvas.MoveTo(ClientWidth div 2, 1);
     Canvas.LineTo(ClientWidth div 2, ClientHeight);
     end;
end;

end.

Muetze1 2. Dez 2007 21:01

Re: [TImage] Fragen rund um die Canvas Komponente....
 
Zitat:

Zitat von almdudler777
Ich habe, da es ja auch hier öfters erwähnt wird auch mal die Paintbox versucht... mit dem Ergebniss das es hier funktioniert. Nur hat sie doch einige Schwächen die gute Paintbox. Zieht man nen MDI Fenster drüber her, dann verschwinden Linien und vor allem man kann die gezeichneten Sachen nicht abspeichern....

Dann hättest du dabei eigentlich auch lesen müssen, dass du im OnPaint zeichnen musst. Auch würde das Abspeichern etc kein Problem darstellen, wenn du eine OffScreen Bitmap verwendest.

Die Paintbox ist definitv ein besserer Ansatz als ein Image als Zeichenfläche zu missbrauchen. Dafür ist es definitiv nicht gedacht.

almdudler777 2. Dez 2007 21:09

Re: [TImage] Fragen rund um die Canvas Komponente....
 
danke dir,

also ich bin ja der Paintbox nich abgeneigt, dachte nur es geht nicht mit dem Speichern...

Würdest mir erläutern wie das dann richtig gemacht wird? oder hast nen Code dafür?

MFG

Muetze1 2. Dez 2007 21:49

Re: [TImage] Fragen rund um die Canvas Komponente....
 
Mein damaliges IHK Projekt wäre ein Beispiel dafür. Schau in dir den Anhang in diesem Beitrag an. Der arbeitet mit einem OffScreen Bitmap und einer PaintBox. Du würdest halt auf dem Bitmap rummalen anstatt nur damit zu werkeln.

Du benötigst zum compilieren wahrscheinlich noch diese drei Komponenten zur Farbauswahl.


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