TPanel und zeichnen
TPanel und zeichnen
Kann man in den Canvas eines TPanel etwas zeichnen? Ein Panel1.Canvas.Rectangle(0,0,50,50) hat leider nichts gebracht.
Harry
Harry
-
- Beiträge: 155
- Registriert: Mi 22. Aug 2007, 14:52
- OS, Lazarus, FPC: Mandriva Linux 2008 (L 0.9.28 FPC 2.2.4)
- CPU-Target: 32Bit
- Wohnort: 65719 Hofheim am Taunus
- Kontaktdaten:
Re: TPanel und zeichnen
Das geht, man muss nur auch Pen.Color und Brush.Color auf z.B. clBlack oder clRed setzen, denn z.B. Weiss auf Weiss sieht man schlecht
Und dann wichtigste: Diese Zeichnungen müssen in das Ereignis OnPaint rein, sonst sind sie ja nicht dauerhaft, d.h. vielleicht bleiben sie sichtbar, solange das Fenster nicht neu aufgebaut werden muss. Sendet der Fenster-Manager aber eine Paint-Message an die Anwendung, schwuppdiewupp ist die Canvas wieder leer.

Und dann wichtigste: Diese Zeichnungen müssen in das Ereignis OnPaint rein, sonst sind sie ja nicht dauerhaft, d.h. vielleicht bleiben sie sichtbar, solange das Fenster nicht neu aufgebaut werden muss. Sendet der Fenster-Manager aber eine Paint-Message an die Anwendung, schwuppdiewupp ist die Canvas wieder leer.
Re: TPanel und zeichnen
OK, danke, hab's.
Ein Panel scheint ja keinen OnPaint-Event zu haben (jedenfalls bietet mir Lazarus keinen an). Aber wenn ich in das Panel eine TPaintBox setze und in deren OnPaint-Event zeichne, dann klappt alles wunderbar.
Hab's bisher immer nur im OnPaint-Event des TForms versucht.
Harry
Ein Panel scheint ja keinen OnPaint-Event zu haben (jedenfalls bietet mir Lazarus keinen an). Aber wenn ich in das Panel eine TPaintBox setze und in deren OnPaint-Event zeichne, dann klappt alles wunderbar.
Hab's bisher immer nur im OnPaint-Event des TForms versucht.
Harry
-
- Beiträge: 155
- Registriert: Mi 22. Aug 2007, 14:52
- OS, Lazarus, FPC: Mandriva Linux 2008 (L 0.9.28 FPC 2.2.4)
- CPU-Target: 32Bit
- Wohnort: 65719 Hofheim am Taunus
- Kontaktdaten:
Re: TPanel und zeichnen
Auch ein Panel hat ein OnPaint-Ereignis. Ist aber (glaube ich) nicht published und man siehts nicht im Objekt-Inspector.
Kann man aber "per Hand" auf eine eigene Routine setzen.
Wird auch angeboten mit dem Code-Tool, wenn man den punkt (und ein "o") eingibt und 1 sek. wartet.
Kann man aber "per Hand" auf eine eigene Routine setzen.
Wird auch angeboten mit dem Code-Tool, wenn man den punkt (und ein "o") eingibt und 1 sek. wartet.
-
- Lazarusforum e. V.
- Beiträge: 7192
- Registriert: So 19. Nov 2006, 12:06
- OS, Lazarus, FPC: Linux Mint 19.3
- CPU-Target: AMD
- Wohnort: Oldenburg(Oldenburg)
Re: TPanel und zeichnen
Ein Panel ist eigentlich nicht zum zeichnen da, es geht zwar, aber zum zeichnen solltest du andere Wege nehmen, z.b.:
01 - Über eine TPaintBox oder eine TImage, beide unterscheiden sich nur geringfügig.
Je, nach Vorhaben ist eine TPaintBox oder eine TImage am besten geeignet.
02 - Du kannst dir auch deine eigene Komponente erstellen, indem du von TCustomControl ableitest. Diese Klasse verfügt über eine Canvas Eigenschaft, die du auch fürs Zeichnen nehmen kannst.
01 - Über eine TPaintBox oder eine TImage, beide unterscheiden sich nur geringfügig.
Je, nach Vorhaben ist eine TPaintBox oder eine TImage am besten geeignet.
02 - Du kannst dir auch deine eigene Komponente erstellen, indem du von TCustomControl ableitest. Diese Klasse verfügt über eine Canvas Eigenschaft, die du auch fürs Zeichnen nehmen kannst.
MFG
Michael Springwald
Michael Springwald
-
- Beiträge: 1102
- Registriert: Di 5. Aug 2008, 09:37
- OS, Lazarus, FPC: Windows ,Linux,FreeBSD,Dos (L trunk FPC trunk)
- CPU-Target: 32/64,PPC(+64), ARM
- Wohnort: Eindhoven (Niederlande)
Re: TPanel und zeichnen
Das Problem ist glaube ich das manche Systemen (wie zb QT) kein Zeichnen ausserhalb das Paint-event erlauben. Es ist besser wann moeglich TPaintBox zu nutzen.
-
- Lazarusforum e. V.
- Beiträge: 7192
- Registriert: So 19. Nov 2006, 12:06
- OS, Lazarus, FPC: Linux Mint 19.3
- CPU-Target: AMD
- Wohnort: Oldenburg(Oldenburg)
Re: TPanel und zeichnen
Stimmt. Das Problem kann ich immer noch nicht nach vollziehen. Weil es Technisch einfach nicht umzusetzen ist. Ich kann es mir nicht vorstellen.
Schließlich ist der Canvas ja immer eine Zeichen Fläche. Warum sollte das anders sein ? Gerade bei einem Panel. Das Panel ist dafür zwar nicht ausgelegt, aber möglich ist es. Ich frage mich sowieso warum das Panel einen Public Canvas hat. Bei anderen Komponenten währe das viel sinvoller wenn man dort mehr Einfluss auf das Zeichnen hätte.
PS: Für 2D Spiele habe ich auch eine eigene 2D Engine geschrieben auf Bases von Canvas. Hier im Forum gibt es sie zum Downloaden. Viele sachen die unter DOS möglich sind/waren sind es auch bei meiner 2D Engine. Sie ist für Spiele ausgelegt wie Snake, Sokubahn, Brekout und soweiter. Aber auch für komplexere Spiele wie Run & Jump Spiele. Allerdings sollte die Objekte nicht allzu aufwendig sein. Z.B. nicht so viele Animationen und sowas. Möglich währe sowas, aber nicht um beding sinnvoll.
Schließlich ist der Canvas ja immer eine Zeichen Fläche. Warum sollte das anders sein ? Gerade bei einem Panel. Das Panel ist dafür zwar nicht ausgelegt, aber möglich ist es. Ich frage mich sowieso warum das Panel einen Public Canvas hat. Bei anderen Komponenten währe das viel sinvoller wenn man dort mehr Einfluss auf das Zeichnen hätte.
PS: Für 2D Spiele habe ich auch eine eigene 2D Engine geschrieben auf Bases von Canvas. Hier im Forum gibt es sie zum Downloaden. Viele sachen die unter DOS möglich sind/waren sind es auch bei meiner 2D Engine. Sie ist für Spiele ausgelegt wie Snake, Sokubahn, Brekout und soweiter. Aber auch für komplexere Spiele wie Run & Jump Spiele. Allerdings sollte die Objekte nicht allzu aufwendig sein. Z.B. nicht so viele Animationen und sowas. Möglich währe sowas, aber nicht um beding sinnvoll.
MFG
Michael Springwald
Michael Springwald
Re: TPanel und zeichnen
Ich arbeite unter Mac OS mit Carbon. Hier kann man -- laut einem Wiki-Eintrag -- anscheinend tatsächlich nicht außerhalb des jeweiligen OnPaint-Events zeichnen. Einige eigene Versuche bestätigen dies. Wenn man auf Portabilität aus ist sollte man das dann wohl auf allen Plattformen beachten.marcov hat geschrieben:Das Problem ist glaube ich das manche Systemen (wie zb QT) kein Zeichnen ausserhalb das Paint-event erlauben. Es ist besser wann moeglich TPaintBox zu nutzen.
Harry