Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Komponente dauerhaft nil (https://www.delphipraxis.net/155852-komponente-dauerhaft-nil.html)

DoktorD 10. Nov 2010 12:54

Komponente dauerhaft nil
 
Guten Tag,

Haben ein Prolbem mit einer Komponente im Projekt.
Und zwar wird das Create einer Form aufgerufen und hierbei wird eine Eigenschaft eines Panels, welches auf der Form sitzt gesetzt.

Panel3.Visible := TRUE;

Panel3 ist jedoch immer NIL. Wird die Zeile aufgerufen kommt es natürlich zu einer Zugriffsverletzung.

Habt Ihr vieleicht eine Idee wonach ich noch suchen kann um dieses Problem zu beseitigen?

Vielen Dank im Voraus.

himitsu 10. Nov 2010 13:02

AW: Komponente dauerhaft nil
 
Existiert dieses Panel3 auch in der DFM (auf der Form)?

Nur weil eine Variable / ein Feld mit diesem Namen existiert, muß nicht von der VCL darin eine Komponente angelegt/verlinkt werden.

DoktorD 10. Nov 2010 13:06

AW: Komponente dauerhaft nil
 
Ja, scheint alles OK zu sein in der DFM. Hier der Ausschnitt. In den Panels sind noch Labels und Edits drinne. Die sind zur Laufzeit auch nil.

Code:
object Panel3: TPanel
    Left = 128
    Top = 272
    Width = 185
    Height = 65
    TabOrder = 26
    object Label44: TLabel
      Left = 8
      Top = 16
      Width = 74
      Height = 16
      Caption = 'konvertiert'
      Font.Charset = DEFAULT_CHARSET
      Font.Color = clWindowText
      Font.Height = -13
      Font.Name = 'MS Sans Serif'
      Font.Style = [fsBold]
      ParentFont = False
    end
    object Label45: TLabel
      Left = 8
      Top = 32
      Width = 26
      Height = 16
      Caption = 'von'
      Font.Charset = DEFAULT_CHARSET
      Font.Color = clWindowText
      Font.Height = -13
      Font.Name = 'MS Sans Serif'
      Font.Style = [fsBold]
      ParentFont = False
    end
    object Edit11: TEdit
      Left = 112
      Top = 8
      Width = 60
      Height = 21
      TabOrder = 0
      Text = 'Edit11'
    end
    object Edit12: TEdit
      Left = 112
      Top = 32
      Width = 60
      Height = 21
      TabOrder = 1
      Text = 'Edit12'
    end
  end

himitsu 10. Nov 2010 13:08

AW: Komponente dauerhaft nil
 
Reden wir hier eigentlich vom OnCreate-Ereignis der Form oder von Constructor und Co.?

DoktorD 10. Nov 2010 13:18

AW: Komponente dauerhaft nil
 
Es handelt sich um das Create.

procedure TFRMmw.FormCreate(Sender: TObject);

Haben eben auch nochmal probiert eine neue Komponente hinzuzufügen und die Eigenschaften aufzurufen. Hier ist der Fehler ebenfalls. Auch wieder nil.

Medium 10. Nov 2010 13:23

AW: Komponente dauerhaft nil
 
Dann ist klar was da schief läuft. Create() wird VOR dem Erstellen aller automatischer Komponenten ausgeführt, das Ereignis OnCreate() danach, quasi als letzter zum Erzeugen gehörender Schritt.

Edit: Wobei ich mir auf ein mal nicht mehr 100%ig sicher bin. *hust* Aber einen Versuch isses wert :)

himitsu 10. Nov 2010 13:27

AW: Komponente dauerhaft nil
 
Im Contructor werden die Komponenten schon geladen, aber man muß dieses auch erstmal zulassen.

Wann/wo wird Inherited aufgerufen?

Bernhard Geyer 10. Nov 2010 13:30

AW: Komponente dauerhaft nil
 
Zeig doch mal den Kompletten Code deines FormCreate-Eventhandler.

(@himitsu, Medium): Das ist nicht der Konstruktor sondern der Eventhandler für OnCreate.

DoktorD 10. Nov 2010 13:33

AW: Komponente dauerhaft nil
 
Zitat:

Zitat von himitsu (Beitrag 1060763)
Wann/wo wird Inherited aufgerufen?

Wie meinst du das? Wo müsste ich das denn aufrufen?
Im Create sind auch noch andere Komponenten mit denen ich keine Problem habe (Timer, usw.).

Ich benutze hier das OnCreate Ereignis, keinen Constructor.

DoktorD 10. Nov 2010 13:35

AW: Komponente dauerhaft nil
 
Hier nochmal der Code.
Delphi-Quellcode:
procedure TFRMmw.FormCreate(Sender: TObject);
VAR
 Hilf   :   Integer;
begin
   Timer1.Interval := 0;
   Timer1.Enabled := False;
   Datenzeigenret := DAtenzeigen;
   FTyp_IDRet     := Ftyp_ID;
   Panel2.Visible := FALSE;
   Panel3.visible := False;
end;
PS: Das ist nicht mein Projekt, sondern von einem Kollegen, der einen Schlaganfall hatte. Leider kann ich diesen dazu nicht mehr befragen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:38 Uhr.
Seite 1 von 3  1 23      

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