AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Komponente mit dynamischen visuellen Controls

Ein Thema von haentschman · begonnen am 11. Nov 2016 · letzter Beitrag vom 12. Nov 2016
Antwort Antwort
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.292 Beiträge
 
Delphi 12 Athens
 
#1

Komponente mit dynamischen visuellen Controls

  Alt 11. Nov 2016, 09:27
Hallöle...

Ich habe mich an meine erste Komponente gewagt. Seid gnädig Dach Studium der Tutorials (Aufzählungstypen, Collections etc.) komme ich soweit zurecht. Ich habe nur ein Verständnisproblem mit Erzeugung dynamischer Komponenten.

Ziel:
Ein Collection Item soll hinzugefügt werden welches einen Button enthällt. Das Item ist da, aber visuell ist nichts zu sehen.

Frage:
1. Wie kann ich zur Designzeit externe (Buttons etc.) Komponenten hinzufügen
2. Was brauche ich um die externe Komponente zu erzeugen? (der constructor des Items wird nicht aufgerufen? )
3. Wie kann ich visuelle Änderungen des OI "anzeigen"?
4. Was fehlt mir? (außer Hirn...)

PS: z.B. die Caption eines ListviewItems (Collection) wird auch zur Designzeit geändert. Am Code des ListViewItems habe ich nix außergewönliches gesehen.

Danke...

Geändert von haentschman (11. Nov 2016 um 10:31 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.336 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Komponente mit dynamischen visuellen Controls

  Alt 11. Nov 2016, 09:52
Zeigst Du mal Screenshots und skizzierst, was Du anders erwartest?
(Vielleicht auch einen Auszug aus der DFM.)

Mir ist nicht klar, ob Du ein Problem mit den Collections und dem Komponenteneditor hast oder mit der eigenen Komponente an sich.
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.292 Beiträge
 
Delphi 12 Athens
 
#3

AW: Komponente mit dynamischen visuellen Controls

  Alt 11. Nov 2016, 10:11
Hallo...

Das ganze soll eine Tab Bar werden. Die Tabs sollen per OI (CollectionItem = TdToolPanelTab) definiert werden. In dem Moment wo ich den TdToolTPanelTab hinzufüge, soll auch der Button, mit Vorgaben aufgefüllt, erscheinen.
Was fehlt?

PS: Das ist nur ein Testentwurf zum Üben.
PS: Die Columns der Listview sind ein Beispiel. Mit Hinzufügen der Column wird die visual angezeigt... so hätte ich das mit dem Button.
PS: Irgendwo muß doch der Button definiert werden.
Delphi-Quellcode:
unit dToolPanel;

interface

uses
  SysUtils, Classes, Forms, Controls, ExtCtrls, Graphics,
  Generics.Collections,
  AdvPanel, AdvGlowButton;

type
  TdToolPanelTab = class;

  TOpenDirection = (odLeft, odRight);

  TOnClosePanel = procedure(Sender: TObject; Panel: TdToolPanelTab) of object;
  TOnOpenPanel = procedure(Sender: TObject; Panel: TdToolPanelTab) of object;

  TdToolPanelTab = class(TCollectionItem) // der eigentliche Tab
  strict private
    FOpenWith: Integer;
    FPanelForm: TForm;
    FPanelButton: TAdvGlowButton;
    FPanelButtonImageIndex: Integer;
  public
    constructor Create(Collection: TCollection; Parent: TWinControl); reintroduce;
    destructor Destroy; override;
    property PanelForm: TForm read FPanelForm write FPanelForm; // die Form für den Content
    property PanelButton: TAdvGlowButton read FPanelButton write FPanelButton; // der Button für den Tab
  published
    property PanelButtonImageIndex: Integer read FPanelButtonImageIndex write FPanelButtonImageIndex;
    property OpenWith: Integer read FOpenWith write FOpenWith; // legt die Breite des PanelForms fest
  end;

  TPanelList = class(TCollection) // die Collection der Tabs
  private
    function GetItem(Index: Integer): TdToolPanelTab;
    procedure SetItem(Index: Integer; Value: TdToolPanelTab);
  protected
    FOwner: TAdvPanel;
  public
    constructor Create(Owner: TAdvPanel; Parent: TWinControl);
    function Add: TdToolPanelTab;
    function Owner: TAdvPanel;
    property Items[Index: Integer]: TdToolPanelTab read GetItem write SetItem; default;
  end;

  TdToolPanel = class(TAdvPanel) // die Basis
  strict private
    FOpenDirection: TOpenDirection;
    FPanels: TPanelList;
    FActivePanel: TdToolPanelTab;
    FButtonImages: TImageList;
    FButtonHeight: Integer;
    procedure SetActivePanel(const Value: TdToolPanelTab);
  private

  protected

  public
    procedure Loaded; override;
  published
    constructor Create(Owner: TComponent); override;
    destructor Destroy; override;
    property ActivePanel: TdToolPanelTab read FActivePanel write SetActivePanel;
    property Panels: TPanelList read FPanels write FPanels;
    property ButtonImages: TImageList read FButtonImages write FButtonImages;
    property ButtonHeight: Integer read FButtonHeight write FButtonHeight default 100;
    property OpenDirection: TOpenDirection read FOpenDirection write FOpenDirection;
  end;

  procedure Register;

implementation

{ TdToolPanel }

// Initialisierung
constructor TdToolPanel.Create;
begin
  inherited;
  FPanels := TPanelList.Create(nil, Self);
  FOpenDirection := odLeft;
  FButtonHeight := 100;
end;

destructor TdToolPanel.Destroy;
begin
  FPanels.Free;
  inherited;
end;

procedure TdToolPanel.Loaded;
begin
  inherited;
  //
end;

procedure TdToolPanel.SetActivePanel(const Value: TdToolPanelTab);
begin
  FActivePanel := Value;

  //

end;

{ TdToolPanelTab }

constructor TdToolPanelTab.Create(Collection: TCollection; Parent: TWinControl);
begin
  inherited Create(Collection);
  FPanelButton := TAdvGlowButton.Create(nil);
// FPanelButton.Parent := Parent;
  FPanelButton.Align := alTop;
  FPanelButton.AlignWithMargins := True;
  FPanelButton.Caption := '';
  FPanelButton.Margins.Bottom := 0;
  FPanelButton.Margins.Left := 2;
  FPanelButton.Margins.Right := 2;
  FPanelButton.Margins.Top := 2;

  FPanelForm := TForm.Create(nil);
end;

destructor TdToolPanelTab.Destroy;
begin
  FPanelForm.Free;
  FPanelButton.Free;
  inherited;
end;

{ TPanelList }

// Initialisation
constructor TPanelList.Create(Owner: TAdvPanel; Parent: TWinControl);
begin
  inherited Create(TdToolPanelTab);
  FOwner := Owner;
end;

// Getter // Setter
function TPanelList.GetItem(Index: Integer): TdToolPanelTab;
begin
  Result := TdToolPanelTab(inherited GetItem(Index));
end;

procedure TPanelList.SetItem(Index: Integer; Value: TdToolPanelTab);
begin
  inherited SetItem(Index, Value);
end;

// Work
function TPanelList.Add: TdToolPanelTab;
begin
  Result := TdToolPanelTab(inherited Add);
end;

function TPanelList.Owner: TAdvPanel;
begin
  Result := FOwner;
end;

procedure Register;
begin
  RegisterComponents('DIMOWA', [TdToolPanel]);
end;

end.

Geändert von haentschman (11. Nov 2016 um 10:18 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.336 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: Komponente mit dynamischen visuellen Controls

  Alt 11. Nov 2016, 19:01
Ich werfe Dir hier einfach mal ein altes Control vor die Füße.
Ist schon so lange her, dass ich nicht mehr alles nachvollziehen kann - aber funktioniert hatte es.

Ich hoffe, das stimmt jetzt so:

Die Collection enthält ja nichts sichtbares, sondern nur die Aufbauvorschriften für sichtbare Controls.
Schau Dir mal in der DFM ein Grid bzw. dessen Columns an.

Wenn man in der IDE einen speziellen PropertyEditor dafür bauen will, macht das nochmal einen Aufwand.
Das könnte ich ggf. auch nochmal raussuchen, wenn ich es noch finde.

Vielleicht bringt Dich die pas ja schon weiter. (Suche mal nach "Parent")
Angehängte Dateien
Dateityp: pas ssCustomItemsBox.pas (28,9 KB, 5x aufgerufen)
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.292 Beiträge
 
Delphi 12 Athens
 
#5

AW: Komponente mit dynamischen visuellen Controls

  Alt 12. Nov 2016, 08:40
Danke...

Ich schaue mir das zu einem späteren Zeitpunkt an. Ich habe es zurückgestellt...
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:26 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