Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi OnFormCreate (Paintbox) (https://www.delphipraxis.net/154839-onformcreate-paintbox.html)

netmario 27. Sep 2010 17:23

OnFormCreate (Paintbox)
 
Guten Tag,

ich wollte, dass meine Paintbox beim starten weiß ist. Da es über die Eigenschaften nicht klappen wollte, habe ich mir folgenden Code zusammen gebastelt:
Code:
procedure TForm1.FormCreate(Sender: TObject);
begin
  Paintbox1.canvas.brush.color:=clblack;
  Paintbox1.Canvas.FillRect(Rect(0,0,paintbox1.width,paintbox1.height));
end;
Wenn ich jetzt das Programm starte ist die Paintbox trotzdem nicht weiß. Das komische ist, wenn ich den selben Code bei einem OnButtonClick Event einfüge funktioniert es. Wo ist der Fehler?

Vielen Dank!

Progman 27. Sep 2010 17:36

AW: OnFormCreate (Paintbox)
 
Im OnCreate wird doch erst alles erzeugt, da ist die PaintBox möglicherweise noch gar nicht "functionsfähig". Versuchs doch mal im OnShow.

Bernhard Geyer 27. Sep 2010 17:55

AW: OnFormCreate (Paintbox)
 
Zitat:

Zitat von netmario (Beitrag 1052420)
Wenn ich jetzt das Programm starte ist die Paintbox trotzdem nicht weiß. Das komische ist, wenn ich den selben Code bei einem OnButtonClick Event einfüge funktioniert es. Wo ist der Fehler?

Vieleicht solltest du deinen Quellcode ins OnPaint-Ereignis legen? Eine Paintbox ist "dumm" und stellt dir nur eine Zeichenfläche zur Verfügung in der du selbst zeichnest. und das die Paintbox "dumm" ist wird sich auch nicht gemerkt was du einmal gezeichnet hast und du musst jedesmal alles neu (im OnPaint) neu Zeichnen.

shmia 27. Sep 2010 18:00

AW: OnFormCreate (Paintbox)
 
Liste der Anhänge anzeigen (Anzahl: 1)
Im Anhang ist ein kleines Demo (exe + sourcecode) für die Paintbox.
Es ist gut kommentiert - damit dürfte das was in Beitrag #3 gesagt wurde klarer werden.

netmario 27. Sep 2010 18:09

AW: OnFormCreate (Paintbox)
 
Vielen Dank! Hat funktioniert.

Bomberbb 27. Sep 2010 19:02

AW: OnFormCreate (Paintbox)
 
Ich löse so etwas gerne mit einer Funktion Nachformcreate. Die ich dann direkt nach dem Erzeugen aufrufe.
Code:
Form1:=TForm1.Create(self);
Form1.NachFormCreate;
Form1.Showmodal;

xZise 27. Sep 2010 20:08

AW: OnFormCreate (Paintbox)
 
Aber das wird nicht funktionieren.

Weil wie gesagt wurde, das TPaintBox sofort überschrieben wird. Zumindest dürfte es im "ShowModal" wieder weg sein. Und ansonsten muss du nur ein Fenster drüber bewegen und es wäre wieder weg.

Und wo liegt der Sinn der Methode? Weil das ist doch quasi so:
  • TForm.Create();
  • FormCreate();
  • NachFormCreate();
  • ShowModal();
Das "NachFormCreate" ist doch quasi "FormCreate". Zumindest solange nichts zwischen "FormCreate" und "NachFormCreate" ist, dürfte das nichts bringen.

MfG
Fabian

Matze 27. Sep 2010 20:18

AW: OnFormCreate (Paintbox)
 
Zitat:

Zitat von Progman (Beitrag 1052423)
Im OnCreate wird doch erst alles erzeugt, da ist die PaintBox möglicherweise noch gar nicht "functionsfähig".

Stimmt das eigentlich?
Früher glaubte ich das auch, aber ich konnte noch nie einen Fehler erzeugen, indem ich im OnCreate auf VCL-Controls zugegriffen habe.
Das funktionierte bisher immer. :gruebel:

xZise 27. Sep 2010 20:21

AW: OnFormCreate (Paintbox)
 
Moin,
wenn man sich TCustomForm.Create() anguckt, dann ruft er FOnCreate relativ spät auf:

Delphi-Quellcode:
constructor TCustomForm.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
{$IF DEFINED(CLR)}
  GlobalNameSpace.AcquireWriterLock(MaxInt);
{$ELSE}
  GlobalNameSpace.BeginWrite;
{$IFEND}
  try
    FCreatingMainForm := Application.FCreatingMainForm;
    if FCreatingMainForm then
      Application.FCreatingMainForm := False;

    InitializeNewForm;
    if (ClassType <> TForm) and not (csDesigning in ComponentState) then
    begin
      Include(FFormState, fsCreating);
      try
        if not InitInheritedComponent(Self, TForm) then
          raise EResNotFound.CreateFmt(SResNotFound, [ClassName]);
      finally
        Exclude(FFormState, fsCreating);
      end;
{$IF NOT DEFINED(CLR)}
      if OldCreateOrder then
{$IFEND}
        DoCreate;
    end;
  finally
{$IF DEFINED(CLR)}
    GlobalNameSpace.ReleaseWriterLock;
{$ELSE}
    GlobalNameSpace.EndWrite;
{$IFEND}
  end;
end;
MfG
Fabian

Satty67 27. Sep 2010 20:33

AW: OnFormCreate (Paintbox)
 
Wenn OldCreateOrder false ist, dann im gezeigten Quelltext garnicht?
Delphi-Quellcode:
procedure TCustomForm.AfterConstruction;
begin
  if not OldCreateOrder then DoCreate;


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