Delphi Component Creation.. Getting Beyond First Base -


i've used vbto starting point plus lot of study of delphi 6 user's guide. can make new component compile, can't figure way display can finish debugging it. , 50 years of programming experience isn't helping. here guts of component:

type    tchangeevent = procedure(sender: tobject; v: string) of object;  ttxtspnr = class(twincontrol)    lbl: tlabel;    txt: tedit;    scrll:   tscrollbar;  private    fonchange: tchangeevent;    busy, tweaked: boolean;    newvalue: string;  protected    procedure changed(v: string); dynamic;    property onchange: tchangeevent read fonchange write fonchange;    procedure scrllchange(sender: tobject);    procedure scrllscroll(sender: tobject; scrollcode: tscrollcode; var scrollpos: integer);    procedure txtenter(sender: tobject);    procedure txtkeyup(sender: tobject; var key: word; shift: tshiftstate);    procedure txtexit(sender: tobject);    procedure txt_validate(var cancel: boolean);  public    function getcaption(): string;    procedure setcaption(new_caption: string);    function getmax(): smallint;    procedure setmax(new_max: smallint);    function maxof(a: double; b: longint): olevariant;    function minof(a: olevariant; b: longint): olevariant;    function getmin(): smallint;    procedure setmin(new_min: smallint);    function gettext(): string;    procedure settext(new_text: string);    constructor create(aowner: tcomponent); override;    destructor destroy; override;  published    property caption: string read getcaption write setcaption;    property enabled: boolean read getenabled write setenabled;    property max: smallint read getmax write setmax;    property min: smallint read getmin write setmin;    property text: string read gettext write settext;  end; var   txtspnr: ttxtspnr; implementation   uses math;  {$r *.dfm}   procedure ttxtspnr.changed(v: string); begin    if assigned(fonchange) fonchange(self,v); end;   constructor ttxtspnr.create(aowner: tcomponent); begin    inherited create(aowner);  lbl := tlabel.create(self);  lbl begin    parent := self;  end;  txt := tedit.create(self);  txt begin    parent := self;  end;  scrll := tscrollbar(self);  scrll begin    parent := self;  end; end;  

and here's test driver:

type    tform1 = class(tform)    ftxtspnr: ttxtspnr;    procedure formcreate(sender: tobject);  private    { private declarations }  public    { public declarations }  end; var    form1: tform1; implementation   {$r *.dfm}   procedure tform1.formcreate(sender: tobject); begin    ftxtspnr := ttxtspnr.create(self);  ftxtspnr begin    left:=10;    top:=10;    visible:=true;    show;  end; end;  

but doesn't compile , says, in constructor, "an object can't own parent". take out parent settings, compiles doesn't display components. missing?

first,

scrll := tscrollbar(self); 

should of course read

scrll := tscrollbar.create(self); 

second,

ftxtspnr := ttxtspnr.create(self); ftxtspnr begin   left:=10;   top:=10;   visible:=true;   show; end; 

should be

ftxtspnr := ttxtspnr.create(self); ftxtspnr begin   parent := self;   left := 10;   top := 10; end; 

you forgot set parent.

also, global variable

var    txtspnr: ttxtspnr; 

looks dangerous. if don't know why added 2 lines, should remove them.


Comments

Popular posts from this blog

basic authentication with http post params android -

vb.net - Virtual Keyboard commands -

css - Firefox for ubuntu renders wrong colors -