Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Die Delphi-IDE (https://www.delphipraxis.net/62-die-delphi-ide/)
-   -   Eigene Komponente im Designer Verstecken (https://www.delphipraxis.net/194099-eigene-komponente-im-designer-verstecken.html)

4dk2 17. Okt 2017 10:49

Eigene Komponente im Designer Verstecken
 
Hallo Zusammen,

Ich hab eine Haupt-Komponente, die Im Designer SubKomponenten anlegt.
Möchte das ganze ähnlich machen wie bei TDataset und den Fields.
Also neues Feld TEST wird erzeugt = im QuellText entsteht TabelleTest:Tintegerfield.

Das Ganze geht bei mir auch, nur sind die erzeugten, nennen wir es mal "Felder", auf dem Formular als NonVisual-Komponenten sichtbar. Das möchte ich verhindern.

Was ich bei TComponent setzten oder überschreiben muss, hab ich bisher nicht rausgefunden.

himitsu 17. Okt 2017 12:03

AW: Eigene Komponente im Designer Verstecken
 
Weil du den Owner falsch setzt?

Deine Komponente ist der Besitzer der SubKomponenten,
aber wenn du stattdessen die Form als Besitzer angibst, dann fühlt sie sich natülich auch dafür verantwortlich und zeigt die an. :zwinker:

[Edit] Hmmmm, wie das bei den TFields läuft ... gute Frage.
Ich kenn es nur andersrum, also Delphi-Referenz durchsuchenSetSubComponent, wo man die Form nicht als Owner angibt, aber sie soll die SubKomponente dennoch speichern.

Sind deine Subkomponenten von TComponent abgeleitet?

4dk2 17. Okt 2017 12:59

AW: Eigene Komponente im Designer Verstecken
 
Liste der Anhänge anzeigen (Anzahl: 1)
Jup ist von TComponent,
bei SetSubComponent(true), erzeugt er nix mehr im Quelltext und formular.

habs mal als mini Test zusammengepackt, beim klicken auf "..." beim property DummyAdd legt er die an.
Ich weiss das da grade der Bezug von der neuen Komponente zum Master fehlt, zum testen für euch hab ich alles weg gelassen ;)



Delphi-Quellcode:
Type
  TTestComp=class(TComponent)
  private
    FWert: string;
    published
      property Wert:string read FWert write FWert;
  end;


  TTestCompMaster=class(TComponent)
  private
    FDummyAdd: string;
    published
      property DummyAdd:string read FDummyAdd write FDummyAdd;
  end;

//......
//aus register...

procedure Register;
begin
  RegisterComponents('DPTest', [TTestComp]);
  RegisterComponents('DPTest', [TTestCompMaster]);
  RegisterPropertyEditor(TypeInfo(string),TTestCompMaster,'DummyAdd',TTcTest_PropertyEditor);
end;

procedure TTcTest_PropertyEditor.Edit;
var tc:TComponent;
begin
 // Showmessage('EDIT');

  if GetComponent(0) is TComponent then
    tc:=TTestCompMaster(GetComponent(0));

  if not Assigned(tc) then exit;

  if tc.Owner is TForm then
    with TTestComp.Create(tc.Owner) do
    begin
      //SetSubComponent(true);
      Name:=GetUniqueName(Owner,ClassName);
    end;


 // Showmessage('EDIT ENDE');
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:48 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