Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Objekterstellung zur Laufzeit (https://www.delphipraxis.net/106182-objekterstellung-zur-laufzeit.html)

haentschman 6. Jan 2008 22:30


Objekterstellung zur Laufzeit
 
...Guten Abend :-D

ich benutze die Komponente XPMenu.
- da bekanntlicherweise D2005-D2007 einfriert, wenn man das Editorfenster schließt und man die Komponente auf der Form hat
( kein Scherz.. gibt es sogar Info hier im Forum ) muß es zur Laufzeit eingebunden werden.

...soweit auch kein Problem.
Delphi-Quellcode:
XPMenu1:= TXPMenu.Create(FMain);
XPMenu1.UseSystemColors:= False;
XPMenu1.UseDimColor:= True;
XPMenu1.IconBackColor:= clMaroon;
XPMenu1.Gradient:= True;
XPMenu1.SelectColor:= clMaroon;
XPMenu1.SelectBorderColor:= clMaroon;
XPMenu1.XPContainers:= [xccForm, xccPanel];
XPMenu1.XPControls:= [xcMainMenu,xcPopupMenu];
XPMenu1.AutoDetect:= True;
XPMenu1.Active:= True;
...allerdings nur für FMain.
...wie kann ich das auf alle Formulare erweitern ?
...oder muß ich für jede Form eine Instanz erstellen und am Ende wieder freigeben ?

PS: an die Hilfe von D2007 muß ich mich erst gewöhnen... :oops:

Danke...

Bernhard Geyer 6. Jan 2008 22:38

Re: Objekterstellung zur Laufzeit
 
Zitat:

Zitat von haentschman
...allerdings nur für FMain.

Kein Wunder wenn du FMain im Konstruktor angiebst.
Zitat:

Zitat von haentschman
...wie kann ich das auf alle Formulare erweitern ?

Einfach die passende Formularinstanz angeben. Evtl. gleich 'ne Funktion mit übergabeparameter machen oder einen Basisklasse von TForm ableiten
Zitat:

Zitat von haentschman
... und am Ende wieder freigeben ?

Das macht die realisierte Owner-Pattern von Delphi schon ganz alleine wenn du ein von TComponent abgeleitete Komponente beim Konstruktor einen Parent angiebst.

haentschman 6. Jan 2008 22:51

Re: Objekterstellung zur Laufzeit
 
Danke für die schnelle Reaktion...

...das das mit dem FMain zusammenhängt war mir klar. Das Create verlangt AOwner: TComponent :gruebel:

Zitat:

passende Formularinstanz
:gruebel: habe schon die Klasse versucht (TForm)...

Zitat:

[DCC Fehler] Main.pas(164): E2010 Inkompatible Typen: 'TComponent' und 'Class reference'
...FMain ist das Hauptformular
...alle anderen werden von dort Modal geöffnet.

PS: die Hilfe zu Formularinstanzen bezieht sich nur auf dynamische Erzeugung von Formularen :(

...für Euch ist das einfach... ich habe da noch Defizite :oops:

haentschman 7. Jan 2008 18:45

Re: Objekterstellung zur Laufzeit
 
... kann mich bitte jemand in die Richtung schubsen... :wink:
... das mit der Formularinstanz verstehe ich nicht :oops:
... ich steh auf dem Schlauch :oops:

Danke...

mkinzler 7. Jan 2008 18:48

Re: Objekterstellung zur Laufzeit
 
Delphi-Quellcode:
XPMenu1:= TXPMenu.Create(<Formularinstanz>);

haentschman 7. Jan 2008 19:08

Re: Objekterstellung zur Laufzeit
 
... ja und das verstehe ich nicht.

was ist die Formularinstanz aller Formulare ?
TForm ist ja nur die übergeordnete Klasse...

...das ist warscheinlich so einfach :oops:

:?: gibt es überhaupt eine übrgeordnete Formularinstanz für alle ?
:?: sollte ich für jedes FormularXPMenu1:= TXPMenu.Create(FormularName);schreiben

mkinzler 7. Jan 2008 19:12

Re: Objekterstellung zur Laufzeit
 
Grundlagen OOP:

TForm1: Klasse

Von dieser Klasse kann man mehrere Instanzen erzeugen.

Standardmässig heißt die Instanz, die automatisch vom Formulardesigner erzeugt wird wie die Klasse ohne das T; also TForm1 -> Form1

Also kann es keine Formularinstanz aller Formulare geben.

haentschman 7. Jan 2008 19:18

Re: Objekterstellung zur Laufzeit
 
Zitat:

Grundlagen OOP:
..ich weiß :duck: learning by doing...

...also für jedes Formular eine Intanz von XPMeu erzeugen...

Danke... :hi:

mkinzler 7. Jan 2008 19:20

Re: Objekterstellung zur Laufzeit
 
Oder eine eigene Basisklasse/Class-Helper für TForm schreiben, in der die Erzeugung des Menüs erfolgt.

RavenIV 8. Jan 2008 08:41

Re: Objekterstellung zur Laufzeit
 
Dumme Frage:
Warum benutzt Du das XPMenu mit D2007?

Meines Wissens nach braucht man das nicht mehr, weil D2007 Menus im XP-Style erstellt.


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