AGB  ·  Datenschutz  ·  Impressum  







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

Eigene Komponente mit TField-Properties

Ein Thema von Stevie · begonnen am 27. Sep 2004 · letzter Beitrag vom 27. Sep 2004
Antwort Antwort
Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
4.027 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#1

Eigene Komponente mit TField-Properties

  Alt 27. Sep 2004, 16:20
Hallo Leute,

ich versuche, eine Komponente zu schreiben, die mehrere Properties vom Typ TField hat. Allerdings scheitere ich daran, sie im OI auch mit der DropDownList zu versehen. Wenn ich ein Feld DataField nenne, dann klappt das, heißt es anders, dann nicht. Muss ich für die Properties irgendeinen PropertyEditor oder so registrieren?? Bitte helft mir! Hier mein SourceCode:
Delphi-Quellcode:
unit Security;

interface

uses
  Windows, Messages, SysUtils, Classes, DBCtrls, DB;

type
  TSecurity = class(TComponent)
  private
    FDataLink: TFieldDataLink;
    FUserNameDataLink: TFieldDataLink;
    FPasswordDataLink: TFieldDataLink;
    function GetDataSource: TDataSource;
    function GetField(const Index: Integer): string;
    procedure SetDataSource(const Value: TDataSource);
    procedure SetField(const Index: Integer; const Value: string);
  protected
  public
    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;
  published
    property UserNameField: string index 2 read GetField write SetField;
    property PasswordField: string index 1 read GetField write SetField;
    property DataField: string index 0 read GetField write SetField;
    property DataSource: TDataSource read GetDataSource write SetDataSource;
  end;

procedure Register;

implementation

procedure Register;
begin
  RegisterComponents('Beispiele', [TSecurity]);
end;

{ TSecurity }

constructor TSecurity.Create(AOwner: TComponent);
begin
  inherited;
  FDataLink := TFieldDataLink.Create;
  FUserNameDataLink := TFieldDataLink.Create;
  FPasswordDataLink := TFieldDataLink.Create;
end;

destructor TSecurity.Destroy;
begin
  FreeAndNil(FDataLink);
  FreeAndNil(FUserNameDataLink);
  FreeAndNil(FPasswordDataLink);
  inherited;
end;

function TSecurity.GetDataSource: TDataSource;
begin
  Result := FDataLink.DataSource;
end;

function TSecurity.GetField(const Index: Integer): string;
begin
  case Index of
    0: Result := FDataLink.FieldName;
    1: Result := FPasswordDataLink.FieldName;
    2: Result := FUserNameDataLink.FieldName;
  end;
end;

procedure TSecurity.SetDataSource(const Value: TDataSource);
begin
  if not (FDataLink.DataSourceFixed and (csLoading in ComponentState) and
    FUserNameDataLink.DataSourceFixed and FPasswordDataLink.DataSourceFixed) then
  begin
    FDataLink.DataSource := Value;
    FUserNameDataLink.DataSource := Value;
    FPasswordDataLink.DataSource := Value;
  end;
  if Value <> nil then
    Value.FreeNotification(Self);
end;

procedure TSecurity.SetField(const Index: Integer; const Value: string);
begin
  case Index of
    0: FDataLink.FieldName := Value;
    1: FPasswordDataLink.FieldName := Value;
    2: FUserNameDataLink.FieldName := Value;
  end;
end;

end.
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
4.027 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#2

Re: Eigene Komponente mit TField-Properties

  Alt 27. Sep 2004, 17:13
Und wieder ein Problem, dass selber gelöst wurde...
RegisterPropertyEditor(TypeInfo(string), TSecurity, 'UserNameField', TDataFieldProperty); TDataFieldProperty liefert die Feldnamen über die DataSource des Objektes (die Property muss auch DataSource heißen) zurück. Warum klappt die Sache aber mit dem Property DataField?? Weil für jedes TComponent-Objekt dieser PropertyEditor schon registriert ist.
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight
  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 00:21 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