Delphi-PRAXiS

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.

DoktorD 10. Nov 2010 13:44

AW: Komponente dauerhaft nil
 
Nach dem Umbenennen des Panels funktioniert es auch nicht
Wir haben es jetzt ...
Code:
Panel3gehtnicht.visible := False;

DoktorD 10. Nov 2010 13:49

AW: Komponente dauerhaft nil
 
PS: wir arbeiten hier mit Delphi 5, da wir QuickReport benötigen

Hansa 10. Nov 2010 13:50

AW: Komponente dauerhaft nil
 
Poste mal noch den DFM-Teil, wo das Panel2 ist. Meine Glaskugel sagt jedenfalls, dass das die letzte Stelle vor der Benutzung von Panel3 ist. Die IDE ist bei der Lokalisierung von Fehlerstellen etwas ungenau. 8-)

DoktorD 10. Nov 2010 14:00

AW: Komponente dauerhaft nil
 
Liste der Anhänge anzeigen (Anzahl: 1)
Im Anhang die DFM Datei

Siehe "Panel3" (dieses ist nil)
Habe es wieder umbenannt.

DoktorD 10. Nov 2010 14:48

AW: Komponente dauerhaft nil
 
Liste der Anhänge anzeigen (Anzahl: 2)
Hier mal der Unterschied zwischen dem Panel3 (immer nil) und einem Button der funktioniert.

siehe Anhang

Hawkeye219 10. Nov 2010 14:51

AW: Komponente dauerhaft nil
 
Hallo,

interessanter als die .dfm-Datei ist möglicherweise die zugehörige .pas-Datei. Vielleicht befindet sich die Panel-Variable nicht mehr im published-Bereich der Formular-Deklaration, sie könnte versehentlich in den private-, protected- oder public-Bereich verschoben worden sein. Dann ist sie zwar aus dem Quelltext heraus noch erreichbar, sie kann aber beim Laden der .dfm-Datei nicht mehr aktualisiert werden und behält daher ihren Default-Wert NIL.

Gruß Hawkeye

DoktorD 11. Nov 2010 10:15

AW: Komponente dauerhaft nil
 
Das Panel3 steht ganz normal unter der Typendeklaration:

Delphi-Quellcode:
type
  TFRMmw = class(TForm)
    ...
    Panel3: TPanel;
    Label44: TLabel;
    Label45: TLabel;
    Edit11: TEdit;
    Edit12: TEdit;
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    ...
Habe heute mal probiert alles aus dem OnCreate Ereignis ins OnActivate Ereignis zu kopieren.
Compilieren ging es ohne Probleme. Beim Debuggen geht er aber nicht ins OnActivate (Breakpoint gesetzt)
Warum wird denn hier das OnActivate übersprungen?

DeddyH 11. Nov 2010 10:17

AW: Komponente dauerhaft nil
 
Ist das OnActivate denn auch mit der Methode verknüpft (im OI zu kontrollieren)?

DoktorD 11. Nov 2010 10:58

AW: Komponente dauerhaft nil
 
Jo, mit doppelklick komme ich dann in die .pas Datei zum Activate. Also ist es verknüpft.

DeddyH 11. Nov 2010 11:00

AW: Komponente dauerhaft nil
 
Wenn im OI vorher nichts drinstand, dann ist es erst jetzt verknüpft.

DoktorD 11. Nov 2010 11:51

AW: Komponente dauerhaft nil
 
Es stand ja vorher auch schon drinne.

DeddyH 11. Nov 2010 12:26

AW: Komponente dauerhaft nil
 
Werden denn andere Breakpoints angesprungen? Falls nein, schau mal in die Projektoptionen, ob die ganzen Debuggingoptionen vielleicht ausgeschaltet sind.

DoktorD 11. Nov 2010 12:31

AW: Komponente dauerhaft nil
 
Ja, andere Breakpoints funktionieren.

stahli 11. Nov 2010 14:05

AW: Komponente dauerhaft nil
 
Hast Du mal versucht, alle dcu´s zu löschen und das Projekt komplett neu zu erzeugen?

DoktorD 11. Nov 2010 15:47

AW: Komponente dauerhaft nil
 
Habe eine Batchdatei CleanProject, die ich im Projektordner immer mal ausführe

Code:
del *.~*
del *.bak
del #*.*
del *.ddp
del *.dcu
del *.dcu
del *.exe
cd __history
cd..

stahli 11. Nov 2010 15:53

AW: Komponente dauerhaft nil
 
Ich hatte früher einmal ein ähnliches Problem durch Kopieren einer Unit. Der Compiler hat die alte verwendet und ich die neue...
Ich habe mich natürlich gewundert, dass meine Funktionen nicht ausgeführt wurden. :shock:


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:34 Uhr.

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