Announcement

Collapse
No announcement yet.

DBEdit und Datenbankstatus

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • DBEdit und Datenbankstatus

    Hallo,

    ich möchte eine TDBEdit - Komponente dazu bringen auf die unterschiedlichen Datenban-stati zu reagieren. Im Insert-Modus soll sie eine andere Farbe bekommen.
    Und das Ganze dann natürlich als Komponente. Welches Ereignis kommt überhaupt in Frage. TDBedit.Datasource.OnStateChange?
    Ich habe einiges ausprobiert, komme aber irgendwie nicht weiter. Bin für jeden Tip dankbar.

    Peter

  • #2
    Hi Peter,
    das ist nicht so einfach, da die benötigte Methode DataChange leider Private ist und nicht so einfach geerbt werden kann.
    Auch das FieldDataLink ist nur Private.
    Das folgende Beispiel umgeht das etwas mit einer Hilfsklasse:
    <CODE>
    unit ExtDBCtrls;
    interface
    uses Classes, DBCtrls, Mask, db, Graphics;
    type
    THackDBEdit = class(TCustomMaskEdit)
    private
    protected
    FDataLink: TFieldDataLink;
    end;
    TExtDBEdit = class(TDBEdit)
    private
    InheritedDataChange: TNotifyEvent;
    procedure DataChange(Sender: TObject);
    protected
    public
    constructor Create(AOwner: TComponent); override;
    end;
    procedure Register;
    implementation
    procedure Register;
    begin
    RegisterComponents('Peter', [TExtDBEdit]);
    end;
    constructor TExtDBEdit.Create(AOwner: TComponent);
    begin
    inherited;
    InheritedDataChange := THackDBEdit(Self).FDataLink.OnDataChange;
    THackDBEdit(Self).FDataLink.OnDataChange := DataChange;
    end;
    procedure TExtDBEdit.DataChange(Sender: TObject);
    begin
    with THackDBEdit(Self) do
    begin
    InheritedDataChange(Sender);
    if FDataLink.DataSet.State = dsInsert then
    Color := clYellow
    else
    Color := clWindow;
    end;
    end;
    end.
    </CODE>
    Gruß, Fran

    Comment


    • #3
      Ach ja,
      empfehlenswerter ist eine Komponente mit einem Property von Typ TDataLink. Dieses mit deiner DataSource verbinden und DataChange des DataLink benutzen, um gleich alle Edits des Forms zu aktualisieren...
      Fran

      Comment


      • #4
        Hallo Frank,

        erstmal vielen Dank, funktioniert einwandfrei. Ich muss zugeben, dass ich so schnell nicht darauf gekommen wäre.
        Ich wollte ursprünglich die Prozedur SetDatasource verwenden um das Ereignis OnStateChange von Datasource zu überschreiben.
        War aber 'ne Sackgasse. Deinen Zweiten Vorschlag werde ich mal überdenken; da ich aber in erster Linie nur einzelne Felder behandeln will ist die erste Lösung die richtige.

        Gruss,
        Pete

        Comment

        Working...
        X