Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Dynamische Paintbox wird nicht angezeigt... (https://www.delphipraxis.net/54738-dynamische-paintbox-wird-nicht-angezeigt.html)

glkgereon 10. Okt 2005 19:06


Dynamische Paintbox wird nicht angezeigt...
 
Hi

Ich habe mir einen Typ von TPaintBox abgeleitet und erstelle dynamisch eine Instanz dieses Typs (MyPaintBox).
Zur Vereinfachung soll diese MyPaintBox in einem Panel mit alClient angezeigt werden, damit ich direkt im OI regeln kann, wo es angezeigt werden soll...

das versuche ich so:

Delphi-Quellcode:
constructor TMyPaintBox.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
  Parent:=TWinControl(AOwner);
end;

procedure TForm1.FormCreate(Sender: TObject);
var i:Integer;
begin
  PB:=TMyPaintBox.Create(Panel1);
  PB.Align:=alClient;
  PB.Show;
end;
aber ich kann dann malen was ich will....es passiert nichts.

Woran liegts?

Edit: Rechtschreibung :roll: und Randomize hat hier nichts zu suchen....

marabu 10. Okt 2005 19:53

Re: Dynamische Paintbox wird nicht angezeigt...
 
Hi Gereon,

vielleicht solltest du als erstes folgende Änderung machen:

Delphi-Quellcode:
constructor TMyPaintBox.Create(AOwner, AParent: TComponent);
begin
  inherited Create(AOwner);
  Parent := AParent;
end;

procedure TForm1.FormCreate(Sender: TObject);
var
  i: Integer;
begin
  PB := TMyPaintBox.Create(self, Panel1);
  PB.Align := alClient;
end;
Danach solltest du die Behandlungsroutine für das Ereignis OnPaint deiner Komponente untersuchen. Ich wüsste sonst nicht, warum die Darstellung unterbleiben sollte.

Grüße vom marabu

Luckie 10. Okt 2005 20:30

Re: Dynamische Paintbox wird nicht angezeigt...
 
Hast du auch den Parent zugewiesen?

glkgereon 10. Okt 2005 22:51

Re: Dynamische Paintbox wird nicht angezeigt...
 
hab das ganze jetzt so geändert (auch den Aufruf):
Delphi-Quellcode:
constructor THangManPB.Create(AParent, AOwner: TComponent);
begin
  inherited Create(AOwner);
  Parent:=TWinControl(AParent);
end;
es kommt aber immer noch nichts...

Zitat:

Danach solltest du die Behandlungsroutine für das Ereignis OnPaint deiner Komponente untersuchen. Ich wüsste sonst nicht, warum die Darstellung unterbleiben sollte.
was genau meinst du damit?
hast du mal ein beispiel? (ich mach das zum ersten mal :( )

SMO 10. Okt 2005 23:30

Re: Dynamische Paintbox wird nicht angezeigt...
 
Eine PaintBox wird nur zur Entwurfszeit, im Designer von Delphi, durch ein gestricheltes Rechteck dargestellt. An und für sich ist sie unsichtbar. Logisch, denn eine PaintBox dient ja quasi nur als Leinwand, auf die man mittels ihres OnPaint-Ereignisses selbst etwas zeichnen muss.

Dem OnPaint-Ereignis einen Handler zuweisen geht z.B. so:
Delphi-Quellcode:
// Methode aus deinem ersten Beitrag, etwas erweitert
procedure TForm1.FormCreate(Sender: TObject);
var i:Integer;
begin
  PB:=TMyPaintBox.Create(Panel1);
  PB.Align:=alClient;
  PB.OnPaint := MyPaintBoxPaint;
end;

// Methode von Form1, die der PaintBox als OnPaint-Handler zugewiesen wird
// Dieses Beispiel füllt die Fläche der PaintBox einfach nur mit blauer Farbe
procedure TForm1.MyPaintBoxPaint(Sender: TObject);
begin
  with Sender as TPaintBox do
  begin
    Canvas.Brush.Color := clBlue;
    Canvas.FillRect(ClientRect);
  end;
end;
Ich hoffe das hilft ein bisschen. Vielleicht solltest du erst mal mit statischen, mittels des Delphi Formdesigners platzierten PaintBoxes üben, bevor du dich an dynamische wagst.

glkgereon 11. Okt 2005 08:20

Re: Dynamische Paintbox wird nicht angezeigt...
 
ja, ich kenne das Prinzip bereits...

also es war alles richtig, nur musste ich im OnPaint alles neu gemalt werden, und das hatte ich irgendwie noch nicht...

Vielen Dank!!!

(Ihr werdet das fertige Programm wahrscheinlich noch zu sehen bekommen :) )


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