database - Make Non-Windowed Component Data Aware -


i have non-windowed component date property. make component data aware read , write capabilities date field. (in other words, if change date @ runtime, write new date property value dataset.) have googled examples, haven't been able find any. found several read-only examples, e.g., tdblabel, none allow changes written dataset. if can point me example, grateful.

here generic code approach question

unit unit1;  interface  uses    classes   ,db   ,dbctrls   ; type   tdataawarecomponent = class(tcomponent)   private     { private declarations }     fdatalink : tfielddatalink;     ffromdatechange : boolean;     function getdatafield: string;     function getdatasource: tdatasource;     function getfield: tfield;     function getreadonly: boolean;     procedure setdatafield(const value: string);     procedure setdatasource(const value: tdatasource);     procedure setreadonly(const value: boolean);     function getdateproperty: tdatetime;     procedure setdateproperty(const value: tdatetime);   protected     { protected declarations }     procedure datachange(sender : tobject);   public     { public declarations }     constructor create(aowner : tcomponent);override;     destructor  destroy;override;   public     property field        : tfield    read getfield;     property dateproperty : tdatetime read getdateproperty write setdateproperty;   published     { published declarations }    property datasource   : tdatasource           read getdatasource  write setdatasource;    property datafield    : string                read getdatafield   write setdatafield;    property readonly     : boolean               read getreadonly    write setreadonly;   end;  implementation  { tdataawarecomponent } {------------------------------------------------------------------------------} constructor tdataawarecomponent.create(aowner: tcomponent); begin   inherited create(aowner);   fdatalink                 := tfielddatalink.create;   fdatalink.control         := self;   fdatalink.ondatachange    := datachange; end; {------------------------------------------------------------------------------} destructor tdataawarecomponent.destroy; begin   fdatalink.free;   fdatalink := nil;   inherited; end; {------------------------------------------------------------------------------} procedure tdataawarecomponent.datachange(sender: tobject); begin   // here visual object display underlying field value.   // example if component tedit   // code  {  if fdatalink.active     self.text := field.asstring;     , on exit event of tedit code reversed     field can take value user entered.      since not need ui interaction propably event     useless you.     }     // of course there more issues should cover     // have complete working solution.     // demostration code.  end; {------------------------------------------------------------------------------} function tdataawarecomponent.getdatafield: string; begin   result := fdatalink.fieldname end; {------------------------------------------------------------------------------} function tdataawarecomponent.getdatasource: tdatasource; begin   result := fdatalink.datasource; end; {------------------------------------------------------------------------------} function tdataawarecomponent.getdateproperty: tdatetime; begin   //you not need separate property since can access directly field value.   result := 0;   if assigned(field) , (field.datatype in [fttime,ftdate,ftdatetime]       result := field.asdatetime; end; {------------------------------------------------------------------------------} function tdataawarecomponent.getfield: tfield; begin   result : fdatalink.field; end; {------------------------------------------------------------------------------} function tdataawarecomponent.getreadonly: boolean; begin   result := fdatalink.readonly; end; {------------------------------------------------------------------------------} procedure tdataawarecomponent.setdatafield(const value: string); begin   fdatalink.fieldname := value; end; {------------------------------------------------------------------------------} procedure tdataawarecomponent.setdatasource(const value: tdatasource); begin   fdatalink.datasource := value; end; {------------------------------------------------------------------------------} procedure tdataawarecomponent.setdateproperty(const value: tdatetime); begin   if assigned(field)    begin     ffromdatechange := true;     try       field.dataset.edit;       field.value := value;           ffromdatechange := false;     end;   end; end; {------------------------------------------------------------------------------} procedure tdataawarecomponent.setreadonly(const value: boolean); begin   fdatalink.readonly := value; end; {------------------------------------------------------------------------------}  end. 

Comments

Popular posts from this blog

java - Play! framework 2.0: How to display multiple image? -

gmail - Is there any documentation for read-only access to the Google Contacts API? -

php - Controller/JToolBar not working in Joomla 2.5 -