Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Canvas probleme (https://www.delphipraxis.net/93603-canvas-probleme.html)

Thorben_Ko 8. Jun 2007 07:48


Canvas probleme
 
Hi @ all,

erst mal vorweg ich war schon lange hier, aber irgendwie bekomm ich mein altes pass net zugeschickt aber egal, zum problem:

Ich erstelle ein Bitmap über das ganze Formular, und male ein Strich auf das Canvas, male dann wieder ein rechteck ganz drüber, und nun würde ich gerne einen anderen Strich zeichen. Dieser wird aber nicht dargestellt, hab zwar seit nem monat net mehr programiert, aber ich glaube ich bin echt total eingerostet....

hier mal die "relevanten" Stellen

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
  bm.Canvas.LineTo(100,100);
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  With bm do
  begin
    Canvas.Brush.Color := Form1.Color;
    Canvas.Rectangle(0,0,ClientWidth, ClientHeight);
  end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  BM := TBitmap.Create;
  bm.Width := ClientWidth;
  bm.Height := ClientHeight;
end;
bm ist ein BitMap welches im Private bereich des Forms steht

Hoffe mir kann jemand helfen

Ghostwalker 8. Jun 2007 07:57

Re: Canvas probleme
 
Könntest du noch das kopieren des Bitmaps auf die Form zeigen ? :)

Thorben_Ko 8. Jun 2007 08:03

Re: Canvas probleme
 
Jetzt wo du es sagst...

aber ich bin grade echt zu doof, ne eigenschaft parent gibts bei bitmap doch nicht. sry ich steh grade echt auf dem schlauch..................

Alexander Roth 8. Jun 2007 08:06

Re: Canvas probleme
 
Du musst mit BitBlt das bitmap auf den Canvas pressen.
Such mal im Forum, war schon oft da.

Gruß Alexander

Ghostwalker 8. Jun 2007 08:10

Re: Canvas probleme
 
Naja...du zeichnest wunderbar aufs Bitmap..aber das wird erstmal nirgends angezeigt, ist also sozusagen unsichtbar.

Um das ganze anzugzeigen mußt du das Bitmap auch auf die Form zeichnen. Dafür würde sich das
Ereignis onPaint des Formulars anbieten.

Das ganze könnte dann so aussehen (ungefähr !):

Delphi-Quellcode:
procedure TForm1.FormPaint(Sender:TObject);
begin
  bitblt(canvas.handle,Clientrect.left,clientrect.top,clientwidth,clientheight,bm.canvas.handle,0,0,SRCCCOY);

end;
Damit solltest du dein Bitmap auch auf der Form sehen.

Thorben_Ko 8. Jun 2007 08:15

Re: Canvas probleme
 
gott sprach es werde eine linie, und es wurde eine ;)

falls jemand diesen Beitrag noch mal braucht, der letze parameter in der funktion muss: SRCCOPY lauten ;)

danke euch

turboPASCAL 8. Jun 2007 09:06

Re: Canvas probleme
 
bitblt ? Es gibt auch eine Canvas.Draw Methode.

Delphi-Quellcode:
procedure TFormXYz.FormPaint(Sender: TObject);
begin
  Canvas.Draw(0,0, MyBitmap);
end;
:zwinker:

SirThornberry 8. Jun 2007 09:16

Re: Canvas probleme
 
Canvas.Draw hat aber nicht nur Vorteile. Beim TBitmap kümmert sich das TBitmap zum Beispiel dann um Transparenz etc. und macht mehr als man eignetlich will. BitBlt hingegen macht wirkich nichts anderes als das Bild auf die Canvas zu blitten. Schau dir am besten mal TBitmap.Draw an (Draw ist eine Protected-Methode), dann siehst du was da noch alles unnötiges passiert was man in dem Fall gar nicht will/benötigt. So wird zum Beispiel auch intern StretchBlt aufgerufen was gar nicht nötig ist wenn das Bild bereits in der Größe ist die raus gegeben werden soll.

turboPASCAL 8. Jun 2007 09:42

Re: Canvas probleme
 
Zitat:

Canvas.Draw hat aber nicht nur Vorteile.
Ja, ist eine VCL-Kapselung. Man spart sich aber Tipparbeit und ggf. Transparente Stellen werden Gezeichnet.

Zitat:

Schau dir am besten mal TBitmap.Draw an ...
Kann ich nicht, keile Quelltexte...

Zitat:

So wird zum Beispiel auch intern StretchBlt aufgerufen ...
Ist mir neu, man lernt nicht aus...


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