![]() |
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. |
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. |
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 |
AW: Komponente dauerhaft nil
Reden wir hier eigentlich vom OnCreate-Ereignis der Form oder von Constructor und Co.?
|
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. |
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 :) |
AW: Komponente dauerhaft nil
Im Contructor werden die Komponenten schon geladen, aber man muß dieses auch erstmal zulassen.
Wann/wo wird Inherited aufgerufen? |
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. |
AW: Komponente dauerhaft nil
Zitat:
Im Create sind auch noch andere Komponenten mit denen ich keine Problem habe (Timer, usw.). Ich benutze hier das OnCreate Ereignis, keinen Constructor. |
AW: Komponente dauerhaft nil
Hier nochmal der Code.
Delphi-Quellcode:
PS: Das ist nicht mein Projekt, sondern von einem Kollegen, der einen Schlaganfall hatte. Leider kann ich diesen dazu nicht mehr befragen.
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; |
AW: Komponente dauerhaft nil
Nach dem Umbenennen des Panels funktioniert es auch nicht
Wir haben es jetzt ...
Code:
Panel3gehtnicht.visible := False;
|
AW: Komponente dauerhaft nil
PS: wir arbeiten hier mit Delphi 5, da wir QuickReport benötigen
|
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-)
|
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. |
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 |
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 |
AW: Komponente dauerhaft nil
Das Panel3 steht ganz normal unter der Typendeklaration:
Delphi-Quellcode:
Habe heute mal probiert alles aus dem OnCreate Ereignis ins OnActivate Ereignis zu kopieren.
type
TFRMmw = class(TForm) ... Panel3: TPanel; Label44: TLabel; Label45: TLabel; Edit11: TEdit; Edit12: TEdit; procedure FormCreate(Sender: TObject); procedure Button1Click(Sender: TObject); ... Compilieren ging es ohne Probleme. Beim Debuggen geht er aber nicht ins OnActivate (Breakpoint gesetzt) Warum wird denn hier das OnActivate übersprungen? |
AW: Komponente dauerhaft nil
Ist das OnActivate denn auch mit der Methode verknüpft (im OI zu kontrollieren)?
|
AW: Komponente dauerhaft nil
Jo, mit doppelklick komme ich dann in die .pas Datei zum Activate. Also ist es verknüpft.
|
AW: Komponente dauerhaft nil
Wenn im OI vorher nichts drinstand, dann ist es erst jetzt verknüpft.
|
AW: Komponente dauerhaft nil
Es stand ja vorher auch schon drinne.
|
AW: Komponente dauerhaft nil
Werden denn andere Breakpoints angesprungen? Falls nein, schau mal in die Projektoptionen, ob die ganzen Debuggingoptionen vielleicht ausgeschaltet sind.
|
AW: Komponente dauerhaft nil
Ja, andere Breakpoints funktionieren.
|
AW: Komponente dauerhaft nil
Hast Du mal versucht, alle dcu´s zu löschen und das Projekt komplett neu zu erzeugen?
|
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.. |
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 02:18 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