Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Zentrale Komponenten Verwaltung? (https://www.delphipraxis.net/62328-zentrale-komponenten-verwaltung.html)

Tau 2. Feb 2006 23:12


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:

Bernhard Geyer 3. Feb 2006 08:10

Re: Zentrale Komponenten Verwaltung?
 
ElPack -> Style Manager

r2c2 3. Feb 2006 08:59

Re: Zentrale Komponenten Verwaltung?
 
Hallo Tau :hi:
guck dir mal Delphi-Referenz durchsuchenFindComponent, [oh]Components[][/oh] und [oh]Controls[][/oh] an...

mfg

Christian

Tau 3. Feb 2006 15:31

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:

r2c2 3. Feb 2006 17:28

Re: Zentrale Komponenten Verwaltung?
 
Zitat:

Zitat von Tau
Ich möchte zu einer Komponente Eigenschaften hinzufügen so auf
die art wie z.B. Font mit einigen Eigenschaften.

Ich bin mir noch nicht ganz sicher wo dein Problem liegt. Ich schreib einfach mal waas zu allen Möglichkeiten:
1.) Du willst ne Komponente mit Eigenschaften und "Untereigenschaften" --> ne Klasse als property nehmen
2.) Du willst solche Eigenschaften zuweisen --> Delphi-Referenz durchsuchenAssign
3.) Du willst überprüfen, welche Eigenschaften eine Klasse hat --> Delphi-Referenz durchsuchenRTTI
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

Tau 3. Feb 2006 21:57

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:

r2c2 4. Feb 2006 10:06

Re: Zentrale Komponenten Verwaltung?
 
Zitat:

Habe etwas rumgebastelt währe froh wenn mir jemand
erklären könnte wo ich meinem Fehler habe.
Tut mir Leid, aber meine Glaskugel ist etwas eingerostet... *Glaskugel putzt* ...hm...:gruebel:...äh... ich glaub, da musst du mir helfen. Ich kann seinbar nur im Dunkeln hellsehen...

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

Tau 4. Feb 2006 12:14

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:

r2c2 4. Feb 2006 14:54

Re: Zentrale Komponenten Verwaltung?
 
Zitat:

ich bekomme eine Abstrakten Fehler wenn ich die Komponente TDemoControll Lösche (Designtime)
und sie ist noch mit der TDemoAdoQuery verbunden.
Ah! Jetzt wird das ganze doch etwas klarer... Jetzt mal ehrlich: Guck dir mal deinen ersten Post an und sag mir, ob irgendjemand außer dir auch nur den Hauch einer Chance haben konnte, zu verstehen, was dein Problem ist...

Ich hoffe nun - d.h. ich weiß es immer noch nicht 100%ig - herausgefunden zu haben, wo das Problem liegt:
Delphi-Quellcode:
  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;
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.

Also entweder du nimmst Zeile {1} oder {2} und {3}(letzteres natürlich nicht auskommentiert)...

mfg

Christian

Ferber 4. Feb 2006 16:27

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:
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.
Ist blos ein Beispiel für TEdit und die Eigenschaft Color.
Wichtig beim Bezug auf andere Komponenten ist Notification !!!

:)

PS: Schade dass die :mrgreen: s nicht im Quellcode funzen !

Tau 4. Feb 2006 16:28

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:

Tau 4. Feb 2006 17:49

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:
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.
Bin mir sicher es ist nur eine kleinnichkeit aber mit großer Wirkung

Tau
:hi:

Ferber 4. Feb 2006 18:13

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 !? :?

Tau 4. Feb 2006 19:29

Re: Zentrale Komponenten Verwaltung?
 
Hallo zusammen

@Ferber

Der Code für TcwDemoControl schaut momentan so aus
Delphi-Quellcode:
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.
Tau
:hi:

Tau 4. Feb 2006 22:27

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:
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.
Tau
:hi:

Tau 6. Feb 2006 10:30

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