![]() |
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 ! |
Re: Zentrale Komponenten Verwaltung?
@Christian
erstmals Danke das du soviel geduld mit mir hast. Ich weis es ist ab und zu schwierig jemanden was zu erklären wenn man selber nicht mal weis wie das ganze funktionieren soll. Ich habe mich für die Variante {1} entschieden. habe da immer noch das Problem das wenn ich die Komponente (TDemoControll) von der Form lösche das ein Fehler auftritt. Tau :hi: |
Re: Zentrale Komponenten Verwaltung?
Hallo zusammen
@Ferber habe mir dein Beispiel angeschaut ist nicht so ganz das richtige. Aber ist eine sehr interessanter Ansatz währe zum überlegen. Ich glaube ich bin schon etwas weiter gekommen. Trotzdem habe ich immer noch einen Fehler. z.B. 1) = OK Form1 ich habe beide Komponenten auf der form da ist alles OK. Auch beim entfernen von den einzelnen Komponenten. Egal in welcher Reihenfolge die Komponenten entfernt werden. z.B. 2) = Fehler Auf der Form1 ist die Komponente TcwDemoADOQuery und im DatenModul ist eine Komponente TcwDemoControl dise zwei sind miteinander verbunden. Ich lösche die Komponente aus dem DatenModul dann entsteht der Fehler. Zugriffsverletzung bei Adresse.... Der Code schaut momentan so aus
Delphi-Quellcode:
Bin mir sicher es ist nur eine kleinnichkeit aber mit großer Wirkung
unit cwDemoADOQuery;
interface uses SysUtils, Classes, DB, ADODB, cwDemoControl, Controls, Forms; type TcwDemoADOQuery = class(TADOQuery) private FLookControl: TcwDemoControl; procedure SetFocusControl(const Value: TcwDemoControl); protected procedure Notification(AComponent: TComponent; Operation: TOperation); override; public published property LookControl: TcwDemoControl read FLookControl write SetFocusControl; end; procedure Register; implementation procedure Register; begin RegisterComponents('Eigene', [TcwDemoADOQuery]); end; procedure TcwDemoADOQuery.Notification(AComponent: TComponent; Operation: TOperation); begin inherited; if (Operation = opRemove) then if (AComponent = FLookControl) then FLookControl := nil; end; procedure TcwDemoADOQuery.SetFocusControl(const Value: TcwDemoControl); begin if Value = FLookControl then Exit; FLookControl := Value; end; end. Tau :hi: |
Re: Zentrale Komponenten Verwaltung?
Hi Tau !
Hab mir deinen code genau angesehen, ist Ok. Der Fehler muss irgendwoanders sein, falls ich nicht doch was übersehen habe. :? Poste mal den Rest (evtl. als Anhang) vielleicht sitzt der Wurm dort !? :? |
Re: Zentrale Komponenten Verwaltung?
Hallo zusammen
@Ferber Der Code für TcwDemoControl schaut momentan so aus
Delphi-Quellcode:
Tau
unit cwDemoControl;
interface uses SysUtils, Classes, Graphics, Controls; type TcwDemoControl = class(TComponent) private FFocusControl: TWinControl; FFont: TFont; FZahl1: Integer; FZahl2: Integer; procedure SetFocusControl(Value: TWinControl); protected procedure Notification(AComponent: TComponent; Operation: TOperation); override; property FocusControl: TWinControl read FFocusControl write SetFocusControl; public constructor Create(AOwner: TComponent); override; destructor Destroy; override; published property Font: TFont read FFont write FFont; property Zahl1: Integer read FZahl1 write FZahl1; property Zahl2: Integer read FZahl2 write FZahl2; end; procedure Register; implementation procedure Register; begin RegisterComponents('Eigene', [TcwDemoControl]); end; constructor TcwDemoControl.Create(AOwner: TComponent); begin inherited Create(AOwner); FFont := TFont.Create; end; destructor TcwDemoControl.Destroy; begin FFont.Free; inherited Destroy; end; procedure TcwDemoControl.Notification(AComponent: TComponent; Operation: TOperation); begin inherited; if (Operation = opRemove) and (AComponent = FFocusControl) then FFocusControl := nil; end; procedure TcwDemoControl.SetFocusControl(Value: TWinControl); begin FFocusControl := Value; if Value <> nil then Value.FreeNotification(Self); end; end. :hi: |
Re: Zentrale Komponenten Verwaltung?
Hallo Ferber
Habe einiges getestet. Der Fehler tritt auch dann auf wenn ich den Code bis auf das Minimum reduziere. :wall: :wall: :wall: [Edit]Es ist immer noch der gleiche Fehler[Edit] Code Beispiel:
Delphi-Quellcode:
Tau
unit cwDemoControl;
interface uses SysUtils, Classes, Graphics, Controls; type TcwDemoControl = class(TComponent) private protected public published end; procedure Register; implementation procedure Register; begin RegisterComponents('Eigene', [TcwDemoControl]); end; end. :hi: |
Re: Zentrale Komponenten Verwaltung?
Hallo Leute
Hat keiner einen Tipp für mich? :wall: :wall: :wall: Oder kann jemand bitte überprüfen ob der Fehler bei ihm auch auftritt oder nur bei mir. :gruebel: :gruebel: würde mir schon etwas weiter helfen. Tau :hi: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:00 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