Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Komponente nur einmal pro Anwendung "zulassen" (https://www.delphipraxis.net/37296-komponente-nur-einmal-pro-anwendung-zulassen.html)

Alex_ITA01 4. Jan 2005 09:53


Komponente nur einmal pro Anwendung "zulassen"
 
Hallo erstmal,
ich wollte mal fragen, ob es eine Möglichkeit gibt, eine Komponente nur einmal in einer Anwendung zuzulassen. Also es darf nicht 3 oder 4 oder 2 mal diese Kompo pro Anwendung existieren...
Gibts da eine Möglichkeit?

MFG Alex

Joe24 4. Jan 2005 10:07

Re: Komponente nur einmal pro Anwendung "zulassen"
 
Spontan würde ich das so realisieren:

Über einen Timer mit GetParentForm.Components[ i] die Klasse aller untergeordneten Objekte erfassen. Bei doppeltem Vorkommen betreffende Objekte wieder freigeben.

Stevie 4. Jan 2005 10:10

Re: Komponente nur einmal pro Anwendung "zulassen"
 
Moin,

du erstellst eine Variable in der Komponenten-Unit und setzt diese beim Create auf True (oder inkrementierst sie, wenn eine maximale Anzahl) und beim Destroy umgekehrt. Im Create überprüfst du diese Variable und brichst eventuell den Vorgang mit einer Meldung ab.

MfG
Stevie

Alex_ITA01 4. Jan 2005 10:10

Re: Komponente nur einmal pro Anwendung "zulassen"
 
danke für den Tip, aber mit Timer wollte ich eigentlich nicht arbeiten und ich möchte wenn es möglich ist, schon das Drag&Drob aus der Komponentenpalette nur einmal erlauben (also das eben pro Anwendung die Kompo nur einmal vorkommt)

MFG Alex

Alex_ITA01 4. Jan 2005 10:11

Re: Komponente nur einmal pro Anwendung "zulassen"
 
hab ich mir auch so überlegt Stevie :-)

Nur wie breche ich das im Konstrutor ab? einfach Destroy aufrufen um alles freizugeben?

MFG Alex

Stevie 4. Jan 2005 10:14

Re: Komponente nur einmal pro Anwendung "zulassen"
 
Zitat:

Zitat von Alex_ITA01
hab ich mir auch so überlegt Stevie :-)

Nur wie breche ich das im Konstrutor ab? einfach Destroy aufrufen um alles freizugeben?

MFG Alex

Wenn, dann das i... :mrgreen:

Nein, bloß nicht den Destruktor aufrufen!!!
Ein
Delphi-Quellcode:
raise Exception.CreateFmt('Es existiert bereits ein Objekt vom Typ %s!', [ClassName]);
wird reichen.

Alex_ITA01 4. Jan 2005 10:16

Re: Komponente nur einmal pro Anwendung "zulassen"
 
achja das i war's...

Du meinst sicher den Destructor nicht aufrufen oder?

okay werde es mit einer Variable probieren und dann so "beenden"

Delphi-Quellcode:
raise Exception.CreateFmt('Es existiert bereits ein Objekt vom Typ %s!', [ClassName]);
MFG Alex

sakura 4. Jan 2005 10:18

Re: Komponente nur einmal pro Anwendung "zulassen"
 
Liste der Anhänge anzeigen (Anzahl: 1)
Eigentlich ganz einfach. Beiliegendes Beispiel hat allerdings einen Nachteil. Im Designmodus wird es nicht richtig funktionieren, wenn Du zwei Forms öffnest, wo die Komponente draufliegt (und diese nicht zur gleichen App gehören). Ansonsten müsste es eigentlich gehen. Der Trick besteht darin sich in einer privaten globalen Unit-Variablen zu merken, wie oft die Komponente erstellt wurde. Jedes Mal wenn diese erstellt wird, inkrementierst Du den Zähler, beim Zerstören dekrementierst Du den wieder.

Wenn der Zähler größer 1 wird, dann wirfst Du eine Exception raus. Immer im Destructor wieder dekrementieren, auch bei der Exception, da unter Win32 der auch wieder aufgerufen wird, wenn eine Exception auftritt (Resourcenfreigabe).

...:cat:...

sakura 4. Jan 2005 10:21

Re: Komponente nur einmal pro Anwendung "zulassen"
 
Zitat:

Zitat von Stevie
du erstellst eine Variable in der Komponenten-Unit und setzt diese beim Create auf True

Wird nicht gehen, da bei der letzten diese wieder auf False gesetzt wird, allerdings wird der der Destructor immer aufgerufen, auch wenn im Constructor eine Excpetion auftritt. Dann passiert folgendes:
  • Erste Komponente erstellen -> True
  • Zweite Komponente erstellen -> Exception
  • Destructor der zweiten Komponente setzt Var auf False
  • Dritte Komponente kann wieder erstellt werden, da jetzt False ;)

...:cat:...

Alex_ITA01 4. Jan 2005 10:24

Re: Komponente nur einmal pro Anwendung "zulassen"
 
danke schön für das Beispiel @Sakura
Ich glaube es geht :-) (Muss es nur schnell testen)

MFG Alex


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