AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Komponente nur einmal pro Anwendung "zulassen"
Thema durchsuchen
Ansicht
Themen-Optionen

Komponente nur einmal pro Anwendung "zulassen"

Ein Thema von Alex_ITA01 · begonnen am 4. Jan 2005 · letzter Beitrag vom 4. Jan 2005
Antwort Antwort
Seite 1 von 2  1 2      
Alex_ITA01

Registriert seit: 22. Sep 2003
1.115 Beiträge
 
Delphi 12 Athens
 
#1

Komponente nur einmal pro Anwendung "zulassen"

  Alt 4. Jan 2005, 09:53
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
Let's fetz sprach der Frosch und sprang in den Mixer
  Mit Zitat antworten Zitat
Joe24

Registriert seit: 21. Dez 2004
Ort: Berlin
51 Beiträge
 
#2

Re: Komponente nur einmal pro Anwendung "zulassen"

  Alt 4. Jan 2005, 10:07
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.
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
4.008 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#3

Re: Komponente nur einmal pro Anwendung "zulassen"

  Alt 4. Jan 2005, 10:10
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
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight
  Mit Zitat antworten Zitat
Alex_ITA01

Registriert seit: 22. Sep 2003
1.115 Beiträge
 
Delphi 12 Athens
 
#4

Re: Komponente nur einmal pro Anwendung "zulassen"

  Alt 4. Jan 2005, 10:10
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
Let's fetz sprach der Frosch und sprang in den Mixer
  Mit Zitat antworten Zitat
Alex_ITA01

Registriert seit: 22. Sep 2003
1.115 Beiträge
 
Delphi 12 Athens
 
#5

Re: Komponente nur einmal pro Anwendung "zulassen"

  Alt 4. Jan 2005, 10:11
hab ich mir auch so überlegt Stevie

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

MFG Alex
Let's fetz sprach der Frosch und sprang in den Mixer
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
4.008 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#6

Re: Komponente nur einmal pro Anwendung "zulassen"

  Alt 4. Jan 2005, 10:14
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...

Nein, bloß nicht den Destruktor aufrufen!!!
Ein raise Exception.CreateFmt('Es existiert bereits ein Objekt vom Typ %s!', [ClassName]); wird reichen.
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight
  Mit Zitat antworten Zitat
Alex_ITA01

Registriert seit: 22. Sep 2003
1.115 Beiträge
 
Delphi 12 Athens
 
#7

Re: Komponente nur einmal pro Anwendung "zulassen"

  Alt 4. Jan 2005, 10:16
achja das i war's...

Du meinst sicher den Destructor nicht aufrufen oder?

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

raise Exception.CreateFmt('Es existiert bereits ein Objekt vom Typ %s!', [ClassName]); MFG Alex
Let's fetz sprach der Frosch und sprang in den Mixer
  Mit Zitat antworten Zitat
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: München
11.412 Beiträge
 
Delphi 11 Alexandria
 
#8

Re: Komponente nur einmal pro Anwendung "zulassen"

  Alt 4. Jan 2005, 10:18
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).

......
Angehängte Dateien
Dateityp: zip onetimer_821.zip (6,0 KB, 3x aufgerufen)
Daniel W.
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: München
11.412 Beiträge
 
Delphi 11 Alexandria
 
#9

Re: Komponente nur einmal pro Anwendung "zulassen"

  Alt 4. Jan 2005, 10:21
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

......
Daniel W.
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
Alex_ITA01

Registriert seit: 22. Sep 2003
1.115 Beiträge
 
Delphi 12 Athens
 
#10

Re: Komponente nur einmal pro Anwendung "zulassen"

  Alt 4. Jan 2005, 10:24
danke schön für das Beispiel @Sakura
Ich glaube es geht (Muss es nur schnell testen)

MFG Alex
Let's fetz sprach der Frosch und sprang in den Mixer
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:44 Uhr.
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