Delphi-PRAXiS
Seite 1 von 2  1 2      

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 auf Tabsheet Zeichnen ? (https://www.delphipraxis.net/115328-auf-tabsheet-zeichnen.html)

Delphiturbo 10. Jun 2008 13:13


auf Tabsheet Zeichnen ?
 
Hallo

ich habe einen Code, der auf fir Form1 zeichnet
Ich habe nun ein Tabsheet auf Form1
Delphi-Quellcode:
end;
   Form1.Canvas.Draw(0, 0, bm);
   Form1.Caption := IntToStr(round(i / count * 100)) + '%';
   Application.ProcessMessages;
   if Application.Terminated then break;
end;
Form1.Canvas.Draw(0, 0, bm2);
Form1.Caption := 'done';
bm1.Destroy; bm2.Destroy; bm.Destroy;
end;
Wie kann ich auf Tabsheet statt auf Form zeichnen ?
Mein Versuch war einfach so :

Delphi-Quellcode:
//Form1.Canvas.Draw
Form1.Tabsheet1.Canvas.Draw // error hier : Undeclared canvas !

Codewalker 10. Jun 2008 13:14

Re: auf Tabsheet Zeichnen ?
 
Hat ein Tabsheet denn einen Canvas? Wenn es keinen hat kann du natürlich auch nicht drauf zeichnen.

Edit: Blöd formuliert. Versuch mal nicht vom TabSheet sondern vom TabControl einen Canvas zu erhalten. Aber wie so oft: Die Hilfe, wirkt hier Wunder.

Neutral General 10. Jun 2008 13:17

Re: auf Tabsheet Zeichnen ?
 
Hi delphiturbo,

Das Problem ist, dass TTabsheets keine (öffentliche) Canvas-Property besitzen.

Du kannst das Problem umgehen indem du eine Instanz von TCanvas erzeugst und dem Handle des erzeugten Canvas' den DC des Tabsheets übergibst. Mit dem so erzeugten Canvas kannst du dann auf das Tabsheet zeichnen.

Den DC eines Controls erhälst du mit Delphi-Referenz durchsuchenGetDC.

Gruß
Neutral General

sirius 10. Jun 2008 13:18

Re: auf Tabsheet Zeichnen ?
 
Bei TTabsheet ist ein Canvas nicht vorgesehen und existiert deswegen auch nicht.

Du musst dir also das Devcie Context Handle des Tabsheet-Windows besorgen (MSDN-Library durchsuchengetdc, MSDN-Library durchsuchenreleasedc) und entweder direkt mit der WinAPI darauf zeichnen oder du kapselst es in ein ControlCanvas. Schau dir dazu mal die Implementation von TCustomControl an.

Ich würde dir auch raten:
1. im Paint-Ereignis zu zeichnen. Ansonsten ist dein Gemälde ratz-fatz wieder weg.
2. Die Verweise auf globale Variablen zu umgehen

Edit: Den einen roten Kasten hatte ich ja,.... :gruebel:

Neutral General 10. Jun 2008 13:22

Re: auf Tabsheet Zeichnen ?
 
Ach ja... So nebenbei: Man gibt Objekte besser mit .Free frei, als mit Destroy ;)

Butch87 10. Jun 2008 14:00

Re: auf Tabsheet Zeichnen ?
 
öhmmm könnte man nich auch einfach nen Image auf das tabsheet setzen und über deren canvas zeichnen?!? :gruebel:
oder wär das zu einfach?!

mkinzler 10. Jun 2008 14:01

Re: auf Tabsheet Zeichnen ?
 
Oder eine PaintBox

Mikescher 10. Jun 2008 14:09

Re: auf Tabsheet Zeichnen ?
 
Zitat:

Zitat von mkinzler
Oder eine PaintBox

Besser ein Image Paintboxe verlieren ihr gezeichnetes Canvas wenn man sie nicht mehr sieht, Image nicht

DeddyH 10. Jun 2008 14:11

Re: auf Tabsheet Zeichnen ?
 
Zitat:

Zitat von Mikescher
Besser ein Image Paintboxe verlieren ihr gezeichnetes Canvas wenn man sie nicht mehr sieht, Image nicht

:?:

Fussball-Robby 10. Jun 2008 14:18

Re: auf Tabsheet Zeichnen ?
 
Zitat:

Zitat von DeddyH
Zitat:

Zitat von Mikescher
Besser ein Image Paintboxe verlieren ihr gezeichnetes Canvas wenn man sie nicht mehr sieht, Image nicht

:?:

Er meint, dass die PaintBox grau wird, wenn z.B. ein anderes Fenster darüber kommt. Das kann man allerdings verhindern, indem man im OnPaint-Ereignis zeichnet.


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:17 Uhr.
Seite 1 von 2  1 2      

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