![]() |
Zentrale Komponenten Verwaltung?
Hallo Leute
Würde auch mal wieder etwas Hilfe brauchen. :wall: Ich versuche gerade wieder einmal eine Komponente mit folgenden Ansprüchen zu erstellen. Ich habe einen menge Komponenten die immer den Selben Eigenschaften haben. Für diesen fall möchte ich eine Komponente schreiben. Die mir die Eigenschaften der Komponente verwaltet. Eine Komponente die egal ob die Komponente auf einen Form oder Datenmodul oder auf einen Frame liegt. So auf die art einer Zentralen Verwaltung der einzelnen Komponenten sein ( nur TEdit ) oder ( nur TPanel z.B. ). Es geht mir nicht darum wie ich die einzelnen Eigenschaften Erstellen muss, sondern wie ich eine Verbindung z.B. zu allen TEdit herstellen kann um die Eigenschaften zu Ändern sei’s jetzt in Designtime als auch zur Laufzeit im Programm. Währe sehr froh wenn mir da jemand, ein bar hilfreiche Tipps oder Anregungen geben könnte. Oder gibt es da schon irgendeine Thema darüber zum nachlesen? Tau :hi: |
Re: Zentrale Komponenten Verwaltung?
![]() |
Re: Zentrale Komponenten Verwaltung?
Hallo Tau :hi:
guck dir mal ![]() mfg Christian |
Re: Zentrale Komponenten Verwaltung?
Hallo Leute
@Bernhard ich möchte eine eigene Komponente erstellen und keine Kaufen. @Christian Zur Laufzeit suchen und ändern ist nicht das Problem. Ich möchte zu einer Komponente Eigenschaften hinzufügen so auf die art wie z.B. Font mit einigen Eigenschaften. Hab schon einiges ausprobiert aber leider mit mäßigen erfolg. Tau :hi: |
Re: Zentrale Komponenten Verwaltung?
Zitat:
1.) Du willst ne Komponente mit Eigenschaften und "Untereigenschaften" --> ne Klasse als property nehmen 2.) Du willst solche Eigenschaften zuweisen --> ![]() 3.) Du willst überprüfen, welche Eigenschaften eine Klasse hat --> ![]() 4.) Du willst ner vorhandenen Komponente ne neue Eigenschaft verpassen --> neue Kompunente ableiten 5.) ... :gruebel: ... Ich rate mal es war Punkt 3, oder? Wenn ich das, was du meinst, gar nicht aufgeführt habe, musst du dein Problem noch etwas genauer und... eindeutiger beschreiben. Dann muss ich auch keine Fallunterscheidungen mehr machen... mfg Christian |
Re: Zentrale Komponenten Verwaltung?
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo Leute
@Christian Danke für die Anregungen. Habe etwas rumgebastelt währe froh wenn mir jemand erklären könnte wo ich meinem Fehler habe. Bin, was Komponenten Entwicklung anbelangt quasi ein Neuling. Habe ein kleines Demo beigefügt. Tau :hi: |
Re: Zentrale Komponenten Verwaltung?
Zitat:
Also jetzt mal im Ernst: Wenn du uns sagst, wo dein Problem genau liegt und dieses auch so beschreibst, dass wir uns was darunter vorstellen können, helfen wir gerne. Ohne einen Anhaltspunkt wird das aber schwierig... mfg Christian |
Re: Zentrale Komponenten Verwaltung?
Hallo Christian
ich bekomme eine Abstrakten Fehler wenn ich die Komponente TDemoControll Lösche (Designtime) und sie ist noch mit der TDemoAdoQuery verbunden. Tau :hi: |
Re: Zentrale Komponenten Verwaltung?
Zitat:
Ich hoffe nun - d.h. ich weiß es immer noch nicht 100%ig - herausgefunden zu haben, wo das Problem liegt:
Delphi-Quellcode:
Es gibt 2 Möglichkeiten, wie du 2 Komponenten "verbinden" kannst: Entweder du machst ne published property({1}) und lässt das den User im ObjektInspektor machen. Oder du erstellst die Komponente oder Klasse selbst({2}) und gibst sie im Destruktor wieder frei({3}). Aber bitte nicht beide Versionen mischen.
published
property LookControll: TcwDemoControl read FLookControll write FLookControll;{1} { Published-Deklarationen } end; ... constructor TcwDemoADOQuery.Create(AOwner: TComponent); begin inherited Create(AOwner); FLookControll := TcwDemoControl.Create(Self);{2} end; ... destructor TcwDemoADOQuery.Destroy; begin // FLookControll.Free;{3} inherited Destroy; end; Also entweder du nimmst Zeile {1} oder {2} und {3}(letzteres natürlich nicht auskommentiert)... mfg Christian |
Re: Zentrale Komponenten Verwaltung?
Hi Tau !
IMHO wäre es sinnvoll du würdest dir Komponenten ableiten, den Constructor überschreiben, und dort die nötigen Eigenschaften einstellen. Das was du dir wünschst sieht etwa so aus.
Delphi-Quellcode:
Ist blos ein Beispiel für TEdit und die Eigenschaft Color.
unit MasterCompo;
interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TMasterComponent = class(TComponent) private FMasterEdit:TEdit; procedure SetMasterEdit(const Value: TEdit); protected procedure Notification(AComponent: TComponent; Operation: TOperation); override; public procedure UpdateComponents(Parent:TComponent); published property MasterEdit:TEdit read FMasterEdit write SetMasterEdit; end; procedure Register; implementation procedure Register; begin RegisterComponents('MyCtrls', [TMasterComponent]); end; { TMasterComponent } procedure TMasterComponent.Notification(AComponent: TComponent; Operation: TOperation); begin inherited; if (Operation = opRemove) then if (AComponent = FMasterEdit) then FMasterEdit := nil; end; procedure TMasterComponent.SetMasterEdit(const Value: TEdit); begin if Value=FMasterEdit then exit; FMasterEdit := Value; UpdateComponents(Owner); // nur in diesem Formular // UpdateComponents(Application) // in der ganzen Anwendung end; procedure TMasterComponent.UpdateComponents(Parent:TComponent); var i:Integer; Compo:TComponent; // Compo:TComponent - nur wegen der Rekursion / Compo:TEdit - keine Rekursion möglich begin if FMasterEdit=nil then exit; for i:=0 to Parent.ComponentCount-1 do begin Compo:=Parent.Components[i]; if Compo is TEdit then if Compo<>FMasterEdit then begin TEdit(Compo).Color:=FMasterEdit.Color; // ... hier gewünschte Eigenschaften kopieren - Bitte nicht den Namen :mrgreen: end; if Compo.ComponentCount>0 then // rekursion UpdateComponents(Compo); end; end; end. Wichtig beim Bezug auf andere Komponenten ist Notification !!! :) PS: Schade dass die :mrgreen: s nicht im Quellcode funzen ! |
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:30 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 by Thomas Breitkreuz