![]() |
Komponente mit dynamischen visuellen Controls
Hallöle...:P
Ich habe mich an meine erste Komponente gewagt. Seid gnädig :thumb: 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? :gruebel:) 3. Wie kann ich visuelle Änderungen des OI "anzeigen"? 4. Was fehlt mir? (außer Hirn...:lol:) 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. :gruebel: Danke... |
AW: Komponente mit dynamischen visuellen Controls
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. |
AW: Komponente mit dynamischen visuellen Controls
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. :P 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. :gruebel:
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. |
AW: Komponente mit dynamischen visuellen Controls
Liste der Anhänge anzeigen (Anzahl: 1)
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") |
AW: Komponente mit dynamischen visuellen Controls
Danke...:P
Ich schaue mir das zu einem späteren Zeitpunkt an. :P Ich habe es zurückgestellt... |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:57 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