![]() |
auf Tabsheet Zeichnen ?
Hallo
ich habe einen Code, der auf fir Form1 zeichnet Ich habe nun ein Tabsheet auf Form1
Delphi-Quellcode:
Wie kann ich auf Tabsheet statt auf Form zeichnen ?
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; Mein Versuch war einfach so :
Delphi-Quellcode:
//Form1.Canvas.Draw
Form1.Tabsheet1.Canvas.Draw // error hier : Undeclared canvas ! |
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. |
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 ![]() Gruß Neutral General |
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 ( ![]() ![]() 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: |
Re: auf Tabsheet Zeichnen ?
Ach ja... So nebenbei: Man gibt Objekte besser mit .Free frei, als mit Destroy ;)
|
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?! |
Re: auf Tabsheet Zeichnen ?
Oder eine PaintBox
|
Re: auf Tabsheet Zeichnen ?
Zitat:
|
Re: auf Tabsheet Zeichnen ?
Zitat:
|
Re: auf Tabsheet Zeichnen ?
Zitat:
|
Re: auf Tabsheet Zeichnen ?
Dafür ist das OnPaint-Ereignis ja auch da. Beim TImage dürfte das übrigens auch passieren, wenn man keine Grafik lädt, sondern direkt auf den Canvas pinselt (und zwar nicht im OnPaint).
|
Re: auf Tabsheet Zeichnen ?
Zitat:
|
Re: auf Tabsheet Zeichnen ?
Weil TImage soweit ich weiß noch einen internen Buffer hat welcher im OnPaint kopiert wird
edit: wenn das image an einer Stelle nicht mehr verdeckt ist |
Re: auf Tabsheet Zeichnen ?
Trotzdem gehören alle Zeichenoperationen in ooPaint bzw. Paint
|
Re: auf Tabsheet Zeichnen ?
HI,
Zitat:
Delphi-Quellcode:
Deswegen bleibt der Inhalt erhalten. Bei einer Paintbox gibts keine Graphik. Hier wird alles (wirklich alles) über OnPaint gezeichnet. Deswegen verschwindet der Inhalt auch so schnell.
function TImage.GetCanvas: TCanvas;
var Bitmap: TBitmap; begin if Picture.Graphic = nil then begin Bitmap := TBitmap.Create; try Bitmap.Width := Width; Bitmap.Height := Height; Picture.Graphic := Bitmap; finally Bitmap.Free; end; end; if Picture.Graphic is TBitmap then Result := TBitmap(Picture.Graphic).Canvas else raise EInvalidOperation.Create(SImageCanvasNeedsBitmap); end; rollstuhlfahrer PS: @Delphiturbo: Such dir raus, was du willst/brauchst |
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:37 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz