AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Komponente existiert bereits beim Öffnen des Projekts
Thema durchsuchen
Ansicht
Themen-Optionen

Komponente existiert bereits beim Öffnen des Projekts

Ein Thema von MOCI · begonnen am 15. Sep 2006 · letzter Beitrag vom 15. Sep 2006
Antwort Antwort
MOCI

Registriert seit: 2. Aug 2006
12 Beiträge
 
#1

Komponente existiert bereits beim Öffnen des Projekts

  Alt 15. Sep 2006, 08:00
Hi Leute,

Ich hab ein Grid abgeleitet, beim Create hab ich inherited und dann frag ich ab csDesigning in ComponentState dann tu:
alle vorhandenden Columns löschen und erstelle 3 Columns mit dem Namen Self.Name + 'Clomun0' usw.

Daraus hab ich eine Komponente gemacht.
Wenn ich die Komponente compilier, installier und auf mein Formular ziehe, passt alles fein und läuft auch.
Schließ ich allerdings das Projekt und öffne es wieder, dann kommt die Meldung:

"Eine Komponente mit der Bezeichnung MeinGridColumn0 exisiert bereits."

Hat jemand von euch dazu eine Lösung?

danke
mfg MOCI
  Mit Zitat antworten Zitat
Benutzerbild von bernau
bernau

Registriert seit: 1. Dez 2004
Ort: Köln
1.268 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Komponente existiert bereits beim Öffnen des Projekts

  Alt 15. Sep 2006, 09:04
Zitat von MOCI:
alle vorhandenden Columns löschen und erstelle 3 Columns mit dem Namen Self.Name + 'Clomun0' usw.
......
"Eine Komponente mit der Bezeichnung MeinGridColumn0 exisiert bereits."
Ich tippe mal auf einen Tippfehler bei deiner Funktion um den Namen zuzuweisen.

Da der Fehler beim erzeugen des Formulares erscheint, vermute ich den Fehler im Constructor. Kannst du mal die Funktion create hier posten. Dort vermute ich den Fehler.



Gerd
  Mit Zitat antworten Zitat
MOCI

Registriert seit: 2. Aug 2006
12 Beiträge
 
#3

Re: Komponente existiert bereits beim Öffnen des Projekts

  Alt 15. Sep 2006, 09:18
Sorry, hab beim ersten Post verschrieben. Die Fehlermeldung kommt nicht bei den Columns sonder beim View:

Code:
  ViewVorhanden := False;

  for I := 0 to Self.ViewCount - 1 do
    if Self.Views[I] is TcxGridBandedTableView then
      if TcxGridBandedTableView(Self.Views[I]).Name = Self.Name + 'BandedTableView1' then
        ViewVorhanden := True;

  if not ViewVorhanden then begin
    //Löschen aller Views
    I := Self.ViewCount;
    for J := 0 to Self.ViewCount - 1 do
      Self.Views[0].Free;

    //Erstellen des neuen BandedTableViews
    NeuerView := Self.CreateView(TcxGridBandedTableView);
    NeuerView.Name := Self.Name + 'BandedTableView1';
    Self.ActiveLevel.GridView := TcxGridBandedTableView(NeuerView);

    //Band und Columns Createn und Standardwerte setzen
    StandardBandsCreaten(TcxGridBandedTableView(NeuerView));
    StandardColumnsCreaten(TcxGridBandedTableView(NeuerView));
    StandardWerteSetzen(TcxGridBandedTableView(NeuerView));
  end; // End If
  Mit Zitat antworten Zitat
Benutzerbild von bernau
bernau

Registriert seit: 1. Dez 2004
Ort: Köln
1.268 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: Komponente existiert bereits beim Öffnen des Projekts

  Alt 15. Sep 2006, 10:53
Ich kenne diese Komponente nicht, aber:

Zitat von MOCI:
Code:
if not ViewVorhanden then begin
    //Löschen aller Views
    I := Self.ViewCount;
    for J := 0 to Self.ViewCount - 1 do
      Self.Views[0].Free;

Warum definierst du "I" wenn du diese Variable nicht verwendest ? (Nur interessehalber)

Warum Self.Views[0].Free in einer Schleife? Ich gehe davon aus, das Views in irgendeiner Form eine Objectliste ist. Mit free gibst du das Objekt frei aber views.count wird doch nicht reduziert. Schau doch mal was views.count nach dem Durchlauf der Schleife sagt.

Oder sollte es vieleicht so heissen:

Code:

 for J := 0 to Self.ViewCount - 1 do
    Self.Views[J].Free;
 Self.Views.clear;
Wie gesagt. Ich kenne die Komponente nicht. Ich mutmasse nur.

Zitat von MOCI:
Code:
 
    NeuerView.Name := Self.Name + 'BandedTableView1';
Hier entsteht die Fehlermedung. Ein Anzeichen dafür, daß die Komponente mit dem Namen "BandedTableView1" in deiner Schleife, die vorher durchgelaufen ist, nicht freigegeben wurde.


Gerd
  Mit Zitat antworten Zitat
MOCI

Registriert seit: 2. Aug 2006
12 Beiträge
 
#5

Re: Komponente existiert bereits beim Öffnen des Projekts

  Alt 15. Sep 2006, 11:42
Zitat:
Warum definierst du "I" wenn du diese Variable nicht verwendest ? (Nur interessehalber)
Ich da was ausprobiert, deswegen hatte ich I definiert. hab es dann nicht gelöscht, weil es dann vergessen zu löschen.

Zitat:
Warum Self.Views[0].Free in einer Schleife? Ich gehe davon aus, das Views in irgendeiner Form eine Objectliste ist. Mit free gibst du das Objekt frei aber views.count wird doch nicht reduziert. Schau doch mal was views.count nach dem Durchlauf der Schleife sagt.
Wenn ich mit for J := 0 to Self.ViewCount - 1 durchgehe und den View[J], dann kommt eine
"Index außerhalb des maximalen Bereichs"-Meldung.
Ich könnte es auch mit downto machen, habs aber mal so probiert.

Views haltet alle einzelnen Views in einer Liste.
Allerdings gibt es hier keine clear -> leider. Aber es gibt bestimmt eine andere Möglichekeiten den View aus der Liste zu kicken.
Danke für den hinweis!!!
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#6

Re: Komponente existiert bereits beim Öffnen des Projekts

  Alt 15. Sep 2006, 11:54
Dein Problem wird folgendes sein. Du erstellst die Columns im Constructor. Wenn du dein Projekt dann schließt werden diese Columns aber mit gespeichert. Beim öffnen des Projektes wird dann:
1.) wieder deine Komponente erzeugt
2.) Deine Komponente erzeugt die Columns
3.) die DFM wird ausgelesen udn es wird versucht die gespeicherten Columns zu laden -> Bumm
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
MOCI

Registriert seit: 2. Aug 2006
12 Beiträge
 
#7

Re: Komponente existiert bereits beim Öffnen des Projekts

  Alt 15. Sep 2006, 12:03
Wie kann ich dem Abspeichern umgehen?
  Mit Zitat antworten Zitat
Antwort Antwort


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 19:49 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