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 Namensgenerierung von Subkomponenten (https://www.delphipraxis.net/142961-namensgenerierung-von-subkomponenten.html)

Neutral General 6. Nov 2009 20:21


Namensgenerierung von Subkomponenten
 
Hi,

Ein etwas komischer Titel :mrgreen: Ich baue gerade an einer Art PageControl für Arme.
Bin allerdings kein besonders erfahrener Komponentenentwickler...
Habs aber geschafft dass meine Pages jetzt erstellt werden. Allerdings ohne Name (zur Designtime etwas nervig).

Ich hätte halt auch dass diese Namen automatisch generiert werden. So wie "Tabsheet1", "Tabsheet2" etc.
Kriege es aber nicht hin. Bzw. ich könnte selbst mitzählen, aber ich habe im Hinterkopf, dass es irgendwie automatisch geht. Weiß allerdings nicht (mehr) wie.. :gruebel:

Gruß
Neutral General

Neutral General 7. Nov 2009 11:21

Re: Namensgenerierung von Subkomponenten
 
Liste der Anhänge anzeigen (Anzahl: 1)
Tut mir Leid dass ich jetzt schon pushe, aber wenn ichs heute Abend um halb 10 mache, dann ist wieder keiner online :stupid:

Hab mal ein Bild angehangen was mein Problem "in Aktion" zeigt. Die "Pages" meines "TPanelControl"s bekommen halt keinen Namen zugewiesen wenn ich sie zur Designtime hinzufüge...
Ich will prinzipiell ja sowas ähnliches wie ein PageControl bauen. Die Tabsheets sind in der Liste aber auch irgendwie so halb transparent dargestellt... Meine Pages nicht. Weiß nicht in wie weit das jetzt mit meinem Problem zusammen hängt. Ich hab mir schon den Code vom PageControl und vom Tabsheet angeguckt, aber konnte da keine nützlichen Infos rausziehen :(

Hier auch ein bisschen Code von mir, der evtl relevant sein könnte:

Delphi-Quellcode:
// Im Moment noch etwas chaotisch aufgrund von "Ausprobierphase"

constructor TPanelControl.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
  FIndex := -1;
  FPanels := TPanelSheetList.Create(false);
end;

procedure TPanelControl.AddPage;
var tmp: TPanelSheet;
      f: TCustomForm;
begin
  f := Owner as TCustomForm;

  if csDesigning in ComponentState then
    tmp := TPanelSheet.Create(f)
  else
    tmp := TPanelSheet.Create(Self);
  tmp.Parent := Self;

  if f.Designer <> nil then
    f.Designer.Modified;

  FPanels.Add(tmp);
  FIndex := FPanels.Count-1;
end;


{ TPanelSheet }

constructor TPanelSheet.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
  Align := alClient;
end;
Und dann ein KomponentenEditor für TPanelControl:

Delphi-Quellcode:
unit ComponentEditors;

interface

uses DesignIntf, DesignEditors,

     PanelControl;

type
  TPanelControlEditorPopup = class(TComponentEditor)
  public
    function GetVerbCount: Integer; override;
    function GetVerb(Index: Integer): string; override;
    procedure ExecuteVerb(Index: Integer); override;
  end;

procedure Register;

implementation

procedure Register;
begin
  RegisterComponentEditor(TPanelControl, TPanelControlEditorPopup);
end;

{ TPanelControlEditorPopup }

procedure TPanelControlEditorPopup.ExecuteVerb(Index: Integer);
begin
  TPanelControl(Component).AddPage;
end;

function TPanelControlEditorPopup.GetVerb(Index: Integer): string;
begin
  Result := '&Add Page';
end;

function TPanelControlEditorPopup.GetVerbCount: Integer;
begin
  Result := 1;
end;

end.
Sowohl TPanelControl als auch TPanelSheet sind von TCustomPanel abgeleitet.

Wäre echt froh, wenn mir jemand helfen könnte :?

Gruß
Neutral General

Mithrandir 7. Nov 2009 11:43

Re: Namensgenerierung von Subkomponenten
 
Zitat:

Zitat von Neutral General
Ich baue gerade an einer Art PageControl für Arme.

Warum, die Version von Delphi ist doch für Arme und Reiche gleichermaßen. :gruebel:

Neutral General 7. Nov 2009 11:47

Re: Namensgenerierung von Subkomponenten
 
Zitat:

Zitat von Daniel G
Zitat:

Zitat von Neutral General
Ich baue gerade an einer Art PageControl für Arme.

Warum, die Version von Delphi ist doch für Arme und Reiche gleichermaßen. :gruebel:

Ok, dann anders gesagt: TPageControl kann etwas nicht, was ich aber brauche. Von daher versuche ich mich an einer für mich "reicheren" Komponente, die allerdings weniger kann als TPageControl :mrgreen:

Uwe Raabe 7. Nov 2009 18:06

Re: Namensgenerierung von Subkomponenten
 
Wenn du im DesignEditor irgendwie an die erzeugte Page herankommst (z.B. indem AddPage die erzeugte Page zurückgibt), kannst du ihm auch einen Namen geben:

Delphi-Quellcode:
procedure TPanelControlEditorPopup.ExecuteVerb(Index: Integer);
var
  newPage: TPanelSheet;
begin
  newPage := TPanelControl(Component).AddPage;
  newPage.Name := Designer.UniqueName('PanelSheet');
end;

Neutral General 8. Nov 2009 01:42

Re: Namensgenerierung von Subkomponenten
 
Zitat:

Zitat von Uwe Raabe
Wenn du im DesignEditor irgendwie an die erzeugte Page herankommst (z.B. indem AddPage die erzeugte Page zurückgibt), kannst du ihm auch einen Namen geben:

Delphi-Quellcode:
procedure TPanelControlEditorPopup.ExecuteVerb(Index: Integer);
var
  newPage: TPanelSheet;
begin
  newPage := TPanelControl(Component).AddPage;
  newPage.Name := Designer.UniqueName('PanelSheet');
end;

Danke! Genau das habe ich gesucht :kiss: :)


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