AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Objekt als Komponenteneigenschaft

Ein Thema von blablab · begonnen am 11. Okt 2010 · letzter Beitrag vom 11. Okt 2010
Antwort Antwort
blablab

Registriert seit: 3. Jan 2006
509 Beiträge
 
Delphi 7 Enterprise
 
#1

Objekt als Komponenteneigenschaft

  Alt 11. Okt 2010, 14:26
Hallo!

Ich entwickel zur Zeit eine Komponente "SelDir" mit der man einen Ordner von der Festplatte auswählen kann. Jetzt möchte ich zu dieser Komponente eine neue Komponente "SelDirDialog" machen, die aus einem Fenster mit einer "SelDir" Komponente, einem OK- und Abbrechen-Knopf besteht. Das ganze sollte dann eine nicht-visuelle Komponente mit einer Execute-methode werden, wie die Dialog-Komponenten von Delphi.
Mein Problem ist nun, dass alle Optionen des Dialogs eigentlich schon in der "SelDir"-Komponente stecken. Zum Beispiel der ausgewählte Pfad ist eine Eigenschaft von "SelDir". Um darauf zugreifen zu können müsste ich also der "SelDirDialog"-Komponente eine Eigenschaft Pfad geben, die dann den Pfad von der "SelDir"-Komponente zurückgibt. Ich müsste also letztendlich fast alle Eigenschaften von "SelDir" in "SelDirDialog" reinkopieren.

Um das zu verhindern hab ich mir überlegt ich mach in "SelDirDialog" folgende Eigenschaft:
Delphi-Quellcode:
   published
      property SelDir: TSelDir read FSelDir;
Das Problem ist jetzt nur, dass die im Objektinspektor eingestellten Eigenschaften von SelDir keine Wirkung haben. Wenn ich die Komponente "SelDirDialog" zur Entwicklungszeit in mein Formular ziehe wird Create aufgerufen und eine "SelDir"-Komponente erzeugt. Sobald das Programm gestartet wird, passiert das gleiche nochmal und die "SelDir"-Komponente hat wieder Standardeinstellungen.

Ich steh wirklich aufm Schlauch und komm hier einfach nicht weiter. Alle Eigenschaften kopieren möchte ich wenns geht nicht, denn sobald ich eine Eigenschaft der "SelDir"-Komponente änder (die sich ja noch in der Entwicklung befindet) muss ich dieselbe Änderung auch an der "SelDirDialog"-Komponente vornehmen.

Habt ihr Ideen was ich hier (stattdessen) machen könnte?

Grüße
blablab

Geändert von blablab (11. Okt 2010 um 15:02 Uhr)
  Mit Zitat antworten Zitat
angos

Registriert seit: 26. Mai 2004
Ort: Rheine
549 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Objekt also Komponenteneigenschaft

  Alt 11. Okt 2010, 14:41
Hi,

das hört sich für mich stark danach an, dass du die SeldirDialog-Komponente auf Grundlage von Seldir machen solltest, also:

 TSeldirDialog= class(TSelDir) Damit werden alle Eigenschaften von Seldir auch in SelDirDialog verfügbar und bei Änderungen an Seldir auch automatisch nach seldirdialog übertragen

Grüße
Ansgar
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#3

AW: Objekt also Komponenteneigenschaft

  Alt 11. Okt 2010, 14:54
Im Objektinspektor werden nur Objektproperties angezeigt, die lesbar und beschreibbar sind.
Dein Property ist nicht beschreibbar.
Delphi-Quellcode:
published
  property SelDir: TSelDir read FSelDir write SetSelDir;
                                        ^^^^^^^^^^^^^^^
Andreas
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#4

AW: Objekt als Komponenteneigenschaft

  Alt 11. Okt 2010, 15:04
Ist das wirklich so?

Ich kenne Komponenten, die zeigen mir ihre Version im OI an, die ist aber Gray und kann ich definitiv nicht ändern
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#5

AW: Objekt als Komponenteneigenschaft

  Alt 11. Okt 2010, 15:08
Ich entwickel zur Zeit eine Komponente "SelDir" mit der man einen Ordner von der Festplatte auswählen kann.
Da bist du nicht der Erste.
Schon vor 10 Jahren wurde so eine Komponente entwickelt.
Angehängte Dateien
Dateityp: zip PathDialog.zip (4,6 KB, 5x aufgerufen)
Andreas
  Mit Zitat antworten Zitat
blablab

Registriert seit: 3. Jan 2006
509 Beiträge
 
Delphi 7 Enterprise
 
#6

AW: Objekt als Komponenteneigenschaft

  Alt 11. Okt 2010, 15:12
@angos:
Das hab ich auch ausprobiert, allerdings ist es dann keine nicht-visuelle Komponente mehr, da diese immer den Vorfahr TComponent haben müssen. (Korrigiert mich falls ich falsch liege).

@shmia:
Ich kann im Objektinspektor auf SelDir zugreifen. Mit Read kann ich den Zeiger auf SelDir auslesen und somit auf SelDir zugreifen und dessen Eigenschaften auch ändern. Write bewirkt nur, dass ich den zeiger auf SelDir auch ändern kann und somit meiner SelDirDialog-Komponente eine fremde SelDir-Komponente zuweisen kann. Das möchte ich aber nicht.

Das Probmlem ist ja gerade, dass wenn ich die Eigenschaften von SelDir im Objektinspektor ändere, das zwar Auswirkungen auf das SelDir zur Entwicklungszeit hat, aber nicht auf das SelDir zur Laufzeit.
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#7

AW: Objekt als Komponenteneigenschaft

  Alt 11. Okt 2010, 15:31
Ich kenne Komponenten, die zeigen mir ihre Version im OI an, die ist aber Gray und kann ich definitiv nicht ändern
Dann wurde das in höheren Delphi Versionen verbessert.
Bei Delphi 5 braucht man den Schreibzugriff auch wenn das so aussieht:
Delphi-Quellcode:
procedure TMeinKomponenten.SetVersion(const Value:string);
begin
  // nichts tun
end;
Andreas
  Mit Zitat antworten Zitat
blablab

Registriert seit: 3. Jan 2006
509 Beiträge
 
Delphi 7 Enterprise
 
#8

AW: Objekt als Komponenteneigenschaft

  Alt 11. Okt 2010, 16:01
Also so wie es aussieht kann das gar nicht gehen. Selbst wenn ich read und write verwende
Delphi-Quellcode:
published
  property SelDir: TSelDir read FSelDir write SetSelDir;
Speichert sich Delphi die Einstellungen die ich an SelDir vornehme gar nicht.

Das bedeutet ich muss wohl leider alle Eigenschaften und ihre Defaultwerte einzeln kopieren...
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#9

AW: Objekt als Komponenteneigenschaft

  Alt 11. Okt 2010, 16:10
Die Klasse TSelDir muss Folgendes erfüllen:
1.) von TPersistent direkt oder indirekt abgeleitet
2.) die Methode Assign muss überschrieben werden
Wenn man Assign nicht überschreibt, dann meldet Delphi beim Öffnen eines Formular mit deiner Komponente:
Code:
Klasse TSelDir kann nicht zu TSelDir zugewiesen werden
Die Methode SetSelDir muss so aussehen:
Delphi-Quellcode:
procedure TSelDirDialog.SetSelDir(const Value:SelDir);
begin
  FSelDir.Assign(Value);
end;
Andreas
  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 14:39 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