Entwickler-Ecke

Grafische Benutzeroberflächen (VCL & FireMonkey) - Background-Erase beim TPanel unterbinden


Pellaeon - So 06.11.05 17:07
Titel: Background-Erase beim TPanel unterbinden
Hiho,

also mein Problem: ich habe ne Anwendung, welche mit OpenGL was anzeigt und dieses auf ein TPanel. Wenn ich das Programm starte passiert jedocj folgendes: in der formShow zeichne ich das erste mal. Dieses Bild wird dann von dem Panel wieder mit der Standardfarbe übermalt, sodass ich erst wieder ein Neuzeichnen auslösen muss damit ich meine Grafik sehe.

Wie kann ich das abschalten, dass das TPanel sich mit der Standardfarbe übermalt beim Start?

MfG Pellaeon


Tilman - Fr 11.11.05 13:21

Moin,
Folgenden Tipp auf eigene Gefahr.
Leite eine neue Komponente von TPanel ab und überschreibe Paint, >>ohne<< inherited aufzurufen. Dann malt sich die kompo nicht mehr selbst. Im Folgenden Beispiel habe ich zusätzlich eine Methode "zeige" eingeführt, nur um zu Beweisen das die Komponente überhaupt da ist.


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
var
  Form1: TForm1;

implementation

{$R *.dfm}
type
newp = class(TPanel)
procedure paint; override;
procedure zeige;
end;

procedure newp.paint;
begin
// Hier steht nix - also passiert nix
end;

procedure newp.zeige;
begin
inherited paint;  // nur zur Überprüfung
end;

var a: newp;
procedure TForm1.Button1Click(Sender: TObject);

begin
a := newp.Create(self);
a.Parent := self;
a.left := 100;
a.Top := 100;
a.Width := 100;
a.Height := 200;
a.Show;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
a.zeige;
end;