Results 1 to 6 of 6

Thread: DataSource.StateChange doorgeven aan componenten

  1. #1
    Rifleman Numero uno
    Join Date
    Oct 2001
    Posts
    204

    DataSource.StateChange doorgeven aan componenten

    Hoe kan ik er voor zorgen, dat bij een DataSource.StateChange
    alle gekoppelde componenten afhankelijk van de state een andere kleur krijgen.
    Wel op een generieke manier, dus niet gewoonweg invullen van OnStateChange.
    De gekoppelde componenten zijn allemaal afgeleide componenten, welke aangepast mogen worden.

    mvg,
    Patrick Huijgens

  2. #2
    Senior Member
    Join Date
    Dec 2001
    Location
    Rotterdam
    Posts
    219
    De database aware controls van borland doen dit dmv een TDatalink (of afgeleide ervan):
    Code:
    constructor TDBEdit.Create(AOwner: TComponent);
    begin
      inherited Create(AOwner);
      inherited ReadOnly := True;
      ControlStyle := ControlStyle + [csReplicatable];
      FDataLink := TFieldDataLink.Create;
      FDataLink.Control := Self;
      FDataLink.OnDataChange := DataChange;
      FDataLink.OnEditingChange := EditingChange;
      FDataLink.OnUpdateData := UpdateData;
      FDataLink.OnActiveChange := ActiveChange;
    end;
    De Datasource van deze componenten wordt gemapt op de FDataLink.DataSource.

    Bij een wijziging van de status zal voor een DBEdit via de Datalink een van de vier gekoppelde event methods worden aangeroepen. (weet even niet meer welke, kunnen er ook meerdere zijn)

    Als jou componenten zijn afgeleid van die van bij borland dan zou je deze constructie kunnen gebruiken als ze daar niet vergeten waren hoe je componenten moet bouwen....
    Deze event methods (DataChange, EditingChange, UpdateData, ActiveChange) staan weer eens in de private sectie.....terwijl voor het mooie ze best protected hadden mogen zijn én virtual.

    Enige wat er op zit is netjes zelf een extra TDataLink (of TFieldDataLink: deze biedt wat On... event properties) toe te voegen aan je componenten en zo'n zelfde constructie op te bouwen.
    In een van deze event methods (of een combinatie) kan je dan de state opvragen en aan de hand daarvan de kleur van je component zetten.
    Last edited by Pim Klingens; 16-Apr-02 at 17:32.

  3. #3
    Je zou het ook kunnen omdraaien en een eigen TDataSource maken die dat regelt. De datasource heeft een lijst van DataLinks (DataLinks), een TFieldDataLink heeft een property Control. Als je nu je controls een interface laat ondersteunen kun je die met GetInterface afvragen en via de interface de enabled/disabled status zetten.
    Marcel

  4. #4
    Rifleman Numero uno
    Join Date
    Oct 2001
    Posts
    204
    Allereerst bedankt voor de snelle antwoorden.
    Het antwoord van Pim is handig als je 1 type component hebt, maar ik heb
    er een stuk of 10, dus lijkt me die van Marcel in mijn geval handiger.

    Ik snap de oplossing echter niet helemaal:
    Ik had voor mijn componenten al een interface geimplementeerd, om zo een readonly state te zetten. Dit werd aangestuurd door het scherm, waarbij je de componentenlijst gewoon af kunt lopen op zoek naar componenten met de juiste interface geimplementeerd.

    Zoals ik het begrijp, kun je dit zelfde bij de DataSource doen, door de Datalinks lijst te doorlopen!?
    Hier zie ik echter het licht nog niet...
    Je hebt een lijst van Pointers. Je zoekt in die lijst objecten van het type TFieldDataLink, maar helaas... het is geen lijst van objecten, maar pointers...
    dus geen type-check.
    Alleen de TFieldDataLink heeft "Control"...
    Hoe kom ik hier dan aan?

    mvg,
    Patrick Huijgens

  5. #5
    Die pointer kun je typecasten naar een TObject en dan controleren of het een TFieldDataLink is. Dat zal meestal het geval zijn want volgens mij hebben alle data-aware controls een TFieldDataLink. Als je die eenmaal hebt kun je bij je control om op je interface te controleren.
    Marcel

  6. #6
    Rifleman Numero uno
    Join Date
    Oct 2001
    Posts
    204
    Werkt perfect. Bedankt.

    mvg,
    Patrick Huijgens

    P.S. Deze kan volgens mij naar subgroep: Database ipv Algemeen

Thread Information

Users Browsing this Thread

There are currently 1 users browsing this thread. (0 members and 1 guests)

Similar Threads

  1. Replies: 3
    Last Post: 11-Jun-04, 00:30

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •