Entwickler-Ecke
Grafische Benutzeroberflächen (VCL & FireMonkey) - TFrame OnCreate global überschreiben
Delete - Di 07.05.13 13:42
Titel: TFrame OnCreate global überschreiben
Hallo,
ich hab eine komische Sache, die ich gerade nicht verstehe.
Ich habe eine neue Unit "FormsNew.pas". Diese unit habe ich in allen Projekt-Dateien in der Uses-List nach "Forms" eingebunden! In der Unit habe ich Folgendes zu stehen:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| TForm = class(Forms.TForm) public constructor Create(AOwner: TComponent); override; end; .. .. .. constructor TForm.Create(AOwner: TComponent); begin inherited Create(AOwner); end; |
Ich benutze auch viele Frames. Analog zu dazu habe ich Folgendes:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| TFrame = class(Forms.TFrame) public constructor Create(AOwner: TComponent); override; end; .. .. .. constructor TFrame.Create(AOwner: TComponent); begin inherited Create(AOwner); end; |
Hat einer eine Ahnung, warum das für TFrame nicht funzt das Create zu überschreiben...?!?! (Helpers gehen auch nicht!)
Danke vorab,
Gruß
rd3
jaenicke - Mi 08.05.13 09:08
Bei mir funktioniert das (Delphi XE3). :nixweiss:
Um welche Delphiversion geht es denn?
Delete - Mi 08.05.13 09:38
XE. Hmm... Das ist ja merkwürdig...
Delete - Mi 08.05.13 09:45
Hab mal ein Sample abgehangen und kommentiert. in das Forms-OnCreate wird reingesprungen... in das Frame-Ding nicht...?!
WasWeißDennIch - Mi 08.05.13 10:02
Verleg die überschriebene Frame-Klasse in die Frame-Unit, dann geht es. Ansonsten handelt es sich ja trotz Namensgleichheit um unterschiedliche TFrame-Klassen.
Delete - Mi 08.05.13 10:08
Ich hatte das ja in einer anderen Unit. Diese hatte ich dann nach Forms in der uses-List eingebunden. Hab recht viele Frames... In denen möchte ich einfach nur die Unit hinzufügen - fertig. Bei den TForms geht es ja... Weißt du, wie ich das meine?
WasWeißDennIch - Mi 08.05.13 10:19
Ich habe gerade Folgendes probiert: ein Unit namens NewFrame geschrieben.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22:
| unit NewFrame;
interface
uses Classes, Forms;
type TFrame = class(Forms.TFrame) public constructor Create(AOwner: TComponent); override; end;
implementation
constructor TFrame.Create(AOwner: TComponent); begin inherited; end;
end. |
Einen Frame erstellt und in dessen Unit als Letztes NewFrame eingebunden. Dann ein Formular erstellt mit diesem Frame darauf und siehe da: der Haltepunkt in NewFrame wird angesprungen. Dann einen weiteren Frame (auch wieder mit der NewFrames-Unit), auf das Formular gepackt und auch dort wirkt der Haltepunkt.
Delete - Mi 08.05.13 10:23
In dem "echten Projekt" hab ich das exakt so gemacht. Bei mir wird da nicht reingesprungen... Deswegen dieser Thread!
Das ist ja verflixt!
Ich glaube, ich mach erstmal eine andere Baustelle. Vielleicht seh ich den Wald vor lauter Bäumen nicht...?! Danke Euch!
Delete - Mi 08.05.13 10:29
Hab das Sample-Projekt nochmal aktualisiert. s. Anhang. Da funktioniert es tatsächlich auch... In dem "echten Projekt" geht es nicht. Shit. Dann muss es was anderes sein. Danke.
jaenicke - Mi 08.05.13 12:03
Werden die Frames vielleicht manuell erstellt? Ein anderer Konstruktor benutzt?
Delete - Mi 08.05.13 12:48
Teilweise neue Constructor. Teilweise zur Design-, teilweise zur Laufzeit erstellt. Manchmal auch virtual und nicht override. Trotzdem schleife ich inherited Create(AOwner) mit. Ich krieg nicht mal diese Kompilier-Bullets an der Seite... Das ist echt sonderbar...
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!