AGB  ·  Datenschutz  ·  Impressum  







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

Eigene TImage Komponente mit Dataset

Ein Thema von Heiko54 · begonnen am 16. Aug 2012 · letzter Beitrag vom 17. Aug 2012
Antwort Antwort
Heiko54

Registriert seit: 16. Aug 2012
3 Beiträge
 
#1

Eigene TImage Komponente mit Dataset

  Alt 16. Aug 2012, 12:57
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?
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.114 Beiträge
 
Delphi 12 Athens
 
#2

AW: Eigene TImage Komponente mit Dataset

  Alt 16. Aug 2012, 13:26
Ist dein DataSet-Property als Published deklariert?

Kannst du in der DataSource das "OwnComponent.DataSet" manuell eintragen und nimmt Delphi es auch an?
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Heiko54

Registriert seit: 16. Aug 2012
3 Beiträge
 
#3

AW: Eigene TImage Komponente mit Dataset

  Alt 16. Aug 2012, 14:05
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?
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.114 Beiträge
 
Delphi 12 Athens
 
#4

AW: Eigene TImage Komponente mit Dataset

  Alt 16. Aug 2012, 14:31
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:
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;
und auf der form liegt ein "MyImage1" rum.

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)
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (16. Aug 2012 um 14:34 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#5

AW: Eigene TImage Komponente mit Dataset

  Alt 16. Aug 2012, 15:12
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;
.....
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
Heiko54

Registriert seit: 16. Aug 2012
3 Beiträge
 
#6

AW: Eigene TImage Komponente mit Dataset

  Alt 17. Aug 2012, 08:44
Danke ihr beiden für die Antworten.

hab himitsus Ansatz verfolgt. Jetzt sieht es im Form Designer schon logischer aus.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.114 Beiträge
 
Delphi 12 Athens
 
#7

AW: Eigene TImage Komponente mit Dataset

  Alt 17. Aug 2012, 09:07
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 )
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  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 05:18 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