![]() |
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 |
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. |
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 |
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 |
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 |
Re: Komponente nur einmal pro Anwendung "zulassen"
Zitat:
Nein, bloß nicht den Destruktor aufrufen!!! Ein
Delphi-Quellcode:
wird reichen.
raise Exception.CreateFmt('Es existiert bereits ein Objekt vom Typ %s!', [ClassName]);
|
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:
MFG Alex
raise Exception.CreateFmt('Es existiert bereits ein Objekt vom Typ %s!', [ClassName]);
|
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:... |
Re: Komponente nur einmal pro Anwendung "zulassen"
Zitat:
...:cat:... |
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 21:22 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