![]() |
Eigene TImage Komponente mit Dataset
Hallo Zusammen,
ich habe eine Komponente von TImage abgeleitet. Diese hat einige Daten intern gespeichert, diese möchte ich in einem Grid visualisieren. Dazu veröffentliche ich das DataSet in der Komponente. Mein Problem ist jetzt, dass ich im Designer in einer auf der Form liegenden DataSource Komponente im Property Editor unter DataSet mein OwnComponent.DataSet nicht angeboten bekommen. Habt ihr dazu eine Idee? |
AW: Eigene TImage Komponente mit Dataset
Ist dein DataSet-Property als Published deklariert?
Kannst du in der DataSource das "OwnComponent.DataSet" manuell eintragen und nimmt Delphi es auch an? |
AW: Eigene TImage Komponente mit Dataset
ist als published deklariert.
in FormCreate kann ich dies zuweisen. im Designer bekomm ich eine Exception "Ungültiger Eigenschaftswert". Mit welchen Werten / Objekten füllt der Designer die Auswahllisten? Verwendet er Infos aus der Klasse oder aus dem DFM, dieses hab ich ja nicht? |
AW: Eigene TImage Komponente mit Dataset
Um welche Delphiversion handelt es sich denn?
So, ich hab grade kurz nachgesehn und getestet. Ich kann hier nicht direkt auf das "DataSet"-Property zugreifen, aber auf die DataSet-Komonente in dem "DataSet" geht es, wenn da als Owner deren Elternkomponente angegeben ist. Dort im Property-Editor geht es also nur auf die DFMs und nicht auf die Klassen. Bei uns sieht es in etwa so aus
Delphi-Quellcode:
und auf der form liegt ein "MyImage1" rum.
type
TMyImage = class(TImage) private FDataSet: TDataSet; published constructor Create(Owner: TComponent); override; property DataSet: TDataSet read FDataSet stored False; end; constructor TMyImage.Create(Owner: TComponent); begin inherited; FDataSet := TDataSet.Create(Self); FDataSet.Name := 'ImageDataSet'; end; Mit "MyImage1.DataSet" geht es nicht, aber "MyImage1.ImageDataSet" funktioniert. (Wir haben sogar schon Form/Frame übergreifenden Zugriff und der Propertyeditor bietet uns das auch zur Auswahl an, also wenn die Unit/DFM im selben Package oder zumindestens im Delphi geöffnet ist und natürlich in den Uses drinsteht) |
AW: Eigene TImage Komponente mit Dataset
Delphi-Quellcode:
TCTFlowDatalink = class(TDataLink)
private FFieldCount: Integer; FModified: Boolean; FInUpdateData: Boolean; protected procedure ActiveChanged; override; procedure DataSetChanged; override; procedure DataSetScrolled(Distance: Integer); override; procedure LayoutChanged; override; procedure RecordChanged(Field: TField); override; procedure UpdateData; override; public constructor Create(aCTFlow: TCTFlow); destructor Destroy; override; procedure Modified; procedure Reset; property FieldCount: Integer read FFieldCount; end; TCTFlow... Private FDataLink: TCTFlowDatalink; function GetDataSource: TDataSource; procedure SetDataSource(const Value: TDataSource); Public constructor Create(AOwner: Tcomponent); destructor Destroy;overload; Published property DataSource: TDataSource read GetDataSource write SetDataSource; ... implementation constructor TCTFlow.Create(AOwner: Tcomponent); begin inherited; .... FDataLink := CreateDataLink; end; destructor TCTFlow.Destroy; begin ...... FreeAndNil(FDataLink); inherited; end; function TCTFlow.GetDataSource: TDataSource; begin Result := FDataLink.DataSource; end; procedure TCTFlow.SetDataSource(const Value: TDataSource); begin if Value = FDataLink.DataSource then Exit; if Assigned(Value) then if Assigned(Value.DataSet) then if Value.DataSet.IsUnidirectional then DatabaseError(SDataSetUnidirectional); FDataLink.DataSource := Value; if Value <> nil then Value.FreeNotification(self); end; function TCTFlow.CreateDataLink: TCTFlowDatalink; begin Result := TCTFlowDatalink.Create(self); end; ..... |
AW: Eigene TImage Komponente mit Dataset
Danke ihr beiden für die Antworten.
hab himitsus Ansatz verfolgt. Jetzt sieht es im Form Designer schon logischer aus. |
AW: Eigene TImage Komponente mit Dataset
Wenn du die interne Komponente so nennst, wie das Property, dann sieht es bestimmt noch logischer aus. (das sollten wir hier wohl auch mal machen :stupid: )
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:31 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-2025 by Thomas Breitkreuz