<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML xmlns="http://www.w3.org/TR/REC-html40" xmlns:v = 
"urn:schemas-microsoft-com:vml" xmlns:o = 
"urn:schemas-microsoft-com:office:office" xmlns:w = 
"urn:schemas-microsoft-com:office:word" xmlns:st1 = 
"urn:schemas-microsoft-com:office:smarttags"><HEAD>
<META http-equiv=Content-Type content="text/html; charset=iso-8859-1">
<META content="MSHTML 6.00.2900.2722" name=GENERATOR><!--[if !mso]>
<STYLE>v\:* {
        BEHAVIOR: url(#default#VML)
}
o\:* {
        BEHAVIOR: url(#default#VML)
}
w\:* {
        BEHAVIOR: url(#default#VML)
}
.shape {
        BEHAVIOR: url(#default#VML)
}
</STYLE>
<![endif]--><o:SmartTagType name="City" 
namespaceuri="urn:schemas-microsoft-com:office:smarttags"></o:SmartTagType><o:SmartTagType 
name="Street" 
namespaceuri="urn:schemas-microsoft-com:office:smarttags"></o:SmartTagType><o:SmartTagType 
name="address" 
namespaceuri="urn:schemas-microsoft-com:office:smarttags"></o:SmartTagType><o:SmartTagType 
name="country-region" 
namespaceuri="urn:schemas-microsoft-com:office:smarttags"></o:SmartTagType><o:SmartTagType 
name="place" 
namespaceuri="urn:schemas-microsoft-com:office:smarttags"></o:SmartTagType><o:SmartTagType 
name="PersonName" 
namespaceuri="urn:schemas-microsoft-com:office:smarttags"></o:SmartTagType><!--[if !mso]>
<STYLE>
st1\:*{behavior:url(#default#ieooui) }
</STYLE>
<![endif]-->
<STYLE>
<!--
 /* Font Definitions */
 @font-face
        {font-family:Tahoma;
        panose-1:2 11 6 4 3 5 4 4 2 4;}
 /* Style Definitions */
 p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0cm;
        margin-bottom:.0001pt;
        font-size:12.0pt;
        font-family:"Times New Roman";}
a:link, span.MsoHyperlink
        {color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {color:blue;
        text-decoration:underline;}
p
        {mso-margin-top-alt:auto;
        margin-right:0cm;
        mso-margin-bottom-alt:auto;
        margin-left:0cm;
        font-size:12.0pt;
        font-family:"Times New Roman";}
span.EmailStyle18
        {mso-style-type:personal-reply;
        font-family:Arial;
        color:navy;}
@page Section1
        {size:21.0cm 842.0pt;
        margin:72.0pt 89.85pt 72.0pt 89.85pt;}
div.Section1
        {page:Section1;}
-->
</STYLE>
<!--[if gte mso 9]><xml>
 <o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
 <o:shapelayout v:ext="edit">
  <o:idmap v:ext="edit" data="1" />
 </o:shapelayout></xml><![endif]--></HEAD>
<BODY lang=EN-US vLink=blue link=blue bgColor=white>
<DIV><FONT face=Arial size=2>Okay. I didn't consider persistent TMenuItems on 
the form.</FONT></DIV>
<DIV><FONT face=Arial size=2>In Stacey's example it's a bit unclear when the 
TMenuitems are being freed, but&nbsp;I would do the following</FONT></DIV>
<DIV><FONT face=Arial size=2></FONT>&nbsp;</DIV>
<DIV>
<DIV>
<P class=MsoNormal><FONT face="Courier New" size=2><SPAN 
style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'">MyMenuItem: 
IMyMenuItem;</SPAN></FONT><o:p></o:p></P></DIV>
<DIV>
<P class=MsoNormal><FONT face="Times New Roman" size=3><SPAN 
style="FONT-SIZE: 12pt">&nbsp;<o:p></o:p></SPAN></FONT></P></DIV>
<DIV>
<P class=MsoNormal><FONT face="Courier New" size=2><SPAN 
style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'">... // Do some 
stuff.</SPAN></FONT><o:p></o:p></P></DIV>
<DIV>
<P class=MsoNormal><FONT face="Times New Roman" size=3><SPAN 
style="FONT-SIZE: 12pt">&nbsp;<o:p></o:p></SPAN></FONT></P></DIV>
<DIV>
<P class=MsoNormal><FONT face="Courier New" size=2><SPAN 
style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'">MyMenuItem := 
RootMenuItem.AddMenuItem('Hello World', HelloWorldClick);</SPAN></FONT></P>
<P class=MsoNormal><FONT face="Courier New" size=2><SPAN 
style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'">MyMenuItem._AddRef; 
//increase the reference count to prevent premature 
destruction</SPAN></FONT><o:p></o:p></P></DIV>
<DIV>
<P class=MsoNormal><FONT face="Times New Roman" size=3><SPAN 
style="FONT-SIZE: 12pt">&nbsp;<o:p></o:p></SPAN></FONT></P></DIV>
<DIV>
<P class=MsoNormal><FONT face="Courier New" size=2><SPAN 
style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'">... // Later 
on</SPAN></FONT><o:p></o:p></P></DIV>
<DIV>
<P class=MsoNormal><FONT face="Times New Roman" size=3><SPAN 
style="FONT-SIZE: 12pt">&nbsp;<o:p></o:p></SPAN></FONT></P></DIV>
<DIV>
<P class=MsoNormal><FONT face="Courier New" size=2><SPAN 
style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"><SPAN 
style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'">//MyMenuItem</SPAN>.MyFree; 
</SPAN></FONT></P>
<P class=MsoNormal><FONT face="Courier New" size=2><SPAN 
style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"><SPAN 
style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'">MyMenuItem._Release; 
//decrement the reference count </SPAN></SPAN></FONT></P>
<P class=MsoNormal><FONT face="Courier New" size=2><SPAN 
style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"><SPAN 
style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'">{the object is freed when 
variable MyMenuItem&nbsp;goes out of scope}</SPAN></SPAN></FONT></P>
<P class=MsoNormal><FONT face="Courier New" size=2><SPAN 
style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"></SPAN></FONT>&nbsp;</P></DIV></DIV>
<DIV><FONT face=Arial size=2>Todd.</FONT></DIV>
<DIV><FONT face=Arial size=2></FONT>&nbsp;</DIV>
<DIV>----- Original Message ----- </DIV>
<BLOCKQUOTE 
style="PADDING-RIGHT: 0px; PADDING-LEFT: 5px; MARGIN-LEFT: 5px; BORDER-LEFT: #000000 2px solid; MARGIN-RIGHT: 0px">
  <DIV 
  style="BACKGROUND: #e4e4e4; FONT: 10pt arial; font-color: black"><B>From:</B> 
  <A title=dugdavid@dbsolutions.co.nz 
  href="mailto:dugdavid@dbsolutions.co.nz">David Brennan</A> </DIV>
  <DIV style="FONT: 10pt arial"><B>To:</B> <A title=delphi@ns3.123.co.nz 
  href="mailto:delphi@ns3.123.co.nz">'NZ Borland Developers Group - Delphi 
  List'</A> </DIV>
  <DIV style="FONT: 10pt arial"><B>Sent:</B> Thursday, September 29, 2005 4:03 
  PM</DIV>
  <DIV style="FONT: 10pt arial"><B>Subject:</B> RE: [DUG] How do you free an 
  Object Instance when you haveanInterfaceReference?</DIV>
  <DIV><BR></DIV>
  <DIV class=Section1>
  <P class=MsoNormal><FONT face=Arial color=navy size=2><SPAN 
  style="FONT-SIZE: 10pt; COLOR: navy; FONT-FAMILY: Arial">Ideally 
  yes.<o:p></o:p></SPAN></FONT></P>
  <P class=MsoNormal><FONT face=Arial color=navy size=2><SPAN 
  style="FONT-SIZE: 10pt; COLOR: navy; FONT-FAMILY: Arial"><o:p>&nbsp;</o:p></SPAN></FONT></P>
  <P class=MsoNormal><FONT face=Arial color=navy size=2><SPAN 
  style="FONT-SIZE: 10pt; COLOR: navy; FONT-FAMILY: Arial">Unfortunately you can 
  get in trouble if you let a TComponent descendent (eg TMyComponent) which is 
  used normally on your forms (eg streamed from the DFM) free itself when the 
  interface reference count reaches zero. The problem is that the VCL doesn’t 
  create your object as an interface and doesn’t maintain an interface pointer 
  too it (so ref count = 0). That’s OK… but the first time something (ie your 
  code) queries an interface from a TMyComponent (ref count = 1) and then 
  releases the interface (ref count = 0)… whoops, there goes your TMyComponent, 
  even though you didn’t want to release it and was still necessary for your 
  form.<o:p></o:p></SPAN></FONT></P>
  <P class=MsoNormal><FONT face=Arial color=navy size=2><SPAN 
  style="FONT-SIZE: 10pt; COLOR: navy; FONT-FAMILY: Arial"><o:p>&nbsp;</o:p></SPAN></FONT></P>
  <P class=MsoNormal><FONT face=Arial color=navy size=2><SPAN 
  style="FONT-SIZE: 10pt; COLOR: navy; FONT-FAMILY: Arial">There are other 
  possible issues, such as keeping interface references to VCL created 
  TComponents and then having the VCL free your component when the form gets 
  freed – even though you still have an interface pointer to it. There are ways 
  around these in specific cases but basically if you want to keep pointers to 
  TComponents then if at all possible they should be as TComponent pointers, 
  with Notify implemented by your owning object, etc (ie the way the VCL does 
  it).<o:p></o:p></SPAN></FONT></P>
  <P class=MsoNormal><FONT face=Arial color=navy size=2><SPAN 
  style="FONT-SIZE: 10pt; COLOR: navy; FONT-FAMILY: Arial"><o:p>&nbsp;</o:p></SPAN></FONT></P>
  <P class=MsoNormal><FONT face=Arial color=navy size=2><SPAN 
  style="FONT-SIZE: 10pt; COLOR: navy; FONT-FAMILY: Arial">If Stacey is under 
  control of all places where his controls are created, who owns them, etc then 
  fine, but if it is also used as a normal TComponent then I would think 
  twice.<o:p></o:p></SPAN></FONT></P>
  <P class=MsoNormal><FONT face=Arial color=navy size=2><SPAN 
  style="FONT-SIZE: 10pt; COLOR: navy; FONT-FAMILY: Arial"><o:p>&nbsp;</o:p></SPAN></FONT></P>
  <DIV>
  <P class=MsoNormal><FONT face=Arial color=navy size=2><SPAN 
  style="FONT-SIZE: 10pt; COLOR: navy; FONT-FAMILY: Arial">David.</SPAN></FONT><FONT 
  color=navy><SPAN style="COLOR: navy">&nbsp;<o:p></o:p></SPAN></FONT></P>
  <P class=MsoNormal><FONT face="Times New Roman" color=navy size=3><SPAN 
  style="FONT-SIZE: 12pt; COLOR: navy">&nbsp;</SPAN></FONT><o:p></o:p></P></DIV>
  <DIV>
  <DIV class=MsoNormal style="TEXT-ALIGN: center" align=center><FONT 
  face="Times New Roman" size=3><SPAN style="FONT-SIZE: 12pt">
  <HR tabIndex=-1 align=center width="100%" SIZE=2>
  </SPAN></FONT></DIV>
  <P class=MsoNormal><B><FONT face=Tahoma size=2><SPAN 
  style="FONT-WEIGHT: bold; FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">From:</SPAN></FONT></B><FONT 
  face=Tahoma size=2><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> 
  delphi-bounces@ns3.123.co.nz [mailto:delphi-bounces@ns3.123.co.nz] <B><SPAN 
  style="FONT-WEIGHT: bold">On Behalf Of </SPAN></B>Todd Martin<BR><B><SPAN 
  style="FONT-WEIGHT: bold">Sent:</SPAN></B> Thursday, 29 September 2005 3:36 
  p.m.<BR><B><SPAN style="FONT-WEIGHT: bold">To:</SPAN></B> <st1:PersonName 
  w:st="on">NZ Borland Developers Group - <st1:place 
  w:st="on">Delphi</st1:place> List</st1:PersonName><BR><B><SPAN 
  style="FONT-WEIGHT: bold">Subject:</SPAN></B> Re: [DUG] How do you free an 
  Object Instance when you have 
  anInterfaceReference?</SPAN></FONT><o:p></o:p></P></DIV>
  <P class=MsoNormal><FONT face="Times New Roman" size=3><SPAN 
  style="FONT-SIZE: 12pt"><o:p>&nbsp;</o:p></SPAN></FONT></P>
  <DIV>
  <P class=MsoNormal><FONT face=Arial size=2><SPAN 
  style="FONT-SIZE: 10pt; FONT-FAMILY: Arial">Hi 
  Stacey</SPAN></FONT><o:p></o:p></P></DIV>
  <DIV>
  <P class=MsoNormal><FONT face="Times New Roman" size=3><SPAN 
  style="FONT-SIZE: 12pt">&nbsp;<o:p></o:p></SPAN></FONT></P></DIV>
  <DIV>
  <P class=MsoNormal><FONT face=Arial size=2><SPAN 
  style="FONT-SIZE: 10pt; FONT-FAMILY: Arial">You should never "free" an 
  interface. </SPAN></FONT><o:p></o:p></P></DIV>
  <DIV>
  <P class=MsoNormal><FONT face=Arial size=2><SPAN 
  style="FONT-SIZE: 10pt; FONT-FAMILY: Arial">Implement reference counting in 
  TMenuItem (see TInterfacedObject). The object will be destroyed automatically, 
  when all variables that reference it (eg MyMenuItem) go out of 
  scope.</SPAN></FONT><o:p></o:p></P></DIV>
  <DIV>
  <P class=MsoNormal><FONT face="Times New Roman" size=3><SPAN 
  style="FONT-SIZE: 12pt">&nbsp;<o:p></o:p></SPAN></FONT></P></DIV>
  <DIV>
  <P class=MsoNormal><FONT face=Arial size=2><SPAN 
  style="FONT-SIZE: 10pt; FONT-FAMILY: Arial">Todd.</SPAN></FONT><o:p></o:p></P></DIV>
  <DIV>
  <P class=MsoNormal><FONT face="Times New Roman" size=3><SPAN 
  style="FONT-SIZE: 12pt">&nbsp;<o:p></o:p></SPAN></FONT></P></DIV>
  <DIV>
  <P class=MsoNormal><FONT face="Times New Roman" size=3><SPAN 
  style="FONT-SIZE: 12pt">----- Original Message ----- 
  <o:p></o:p></SPAN></FONT></P></DIV>
  <BLOCKQUOTE 
  style="BORDER-RIGHT: medium none; PADDING-RIGHT: 0cm; BORDER-TOP: medium none; PADDING-LEFT: 4pt; PADDING-BOTTOM: 0cm; MARGIN: 5pt 0cm 5pt 3.75pt; BORDER-LEFT: black 1.5pt solid; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none">
    <DIV style="font-color: black">
    <P class=MsoNormal style="BACKGROUND: #e4e4e4"><B><FONT face=Arial 
    size=2><SPAN 
    style="FONT-WEIGHT: bold; FONT-SIZE: 10pt; FONT-FAMILY: Arial">From:</SPAN></FONT></B><FONT 
    face=Arial size=2><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"> <A 
    title=stacey@cjntech.co.nz href="mailto:stacey@cjntech.co.nz">Stacey 
    Verner</A> <o:p></o:p></SPAN></FONT></P></DIV>
    <DIV>
    <P class=MsoNormal><B><FONT face=Arial size=2><SPAN 
    style="FONT-WEIGHT: bold; FONT-SIZE: 10pt; FONT-FAMILY: Arial">To:</SPAN></FONT></B><FONT 
    face=Arial size=2><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"> <A 
    title=delphi@ns3.123.co.nz href="mailto:delphi@ns3.123.co.nz">NZ Borland 
    Developers Group - Delphi List</A> <o:p></o:p></SPAN></FONT></P></DIV>
    <DIV>
    <P class=MsoNormal><B><FONT face=Arial size=2><SPAN 
    style="FONT-WEIGHT: bold; FONT-SIZE: 10pt; FONT-FAMILY: Arial">Sent:</SPAN></FONT></B><FONT 
    face=Arial size=2><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"> 
    Thursday, September 29, 2005 3:06 PM<o:p></o:p></SPAN></FONT></P></DIV>
    <DIV>
    <P class=MsoNormal><B><FONT face=Arial size=2><SPAN 
    style="FONT-WEIGHT: bold; FONT-SIZE: 10pt; FONT-FAMILY: Arial">Subject:</SPAN></FONT></B><FONT 
    face=Arial size=2><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"> [DUG] 
    How do you free an Object Instance when you have an 
    InterfaceReference?<o:p></o:p></SPAN></FONT></P></DIV>
    <DIV>
    <P class=MsoNormal><FONT face="Times New Roman" size=3><SPAN 
    style="FONT-SIZE: 12pt"><o:p>&nbsp;</o:p></SPAN></FONT></P></DIV>
    <DIV>
    <P class=MsoNormal><FONT face=Arial size=2><SPAN 
    style="FONT-SIZE: 10pt; FONT-FAMILY: Arial">If you have an object the 
    implements and interface, and you have a reference<BR>to the interface, how 
    do you free the object using the reference to the 
    interface?</SPAN></FONT><o:p></o:p></P></DIV>
    <DIV>
    <P class=MsoNormal><FONT face="Times New Roman" size=3><SPAN 
    style="FONT-SIZE: 12pt">&nbsp;<o:p></o:p></SPAN></FONT></P></DIV>
    <DIV>
    <P class=MsoNormal><FONT face=Arial size=2><SPAN 
    style="FONT-SIZE: 10pt; FONT-FAMILY: Arial">I have the following 
    (simplified) interface and classes.</SPAN></FONT><o:p></o:p></P></DIV>
    <DIV>
    <P class=MsoNormal><FONT face="Times New Roman" size=3><SPAN 
    style="FONT-SIZE: 12pt">&nbsp;<o:p></o:p></SPAN></FONT></P></DIV>
    <DIV>
    <P class=MsoNormal><FONT face="Courier New" size=2><SPAN 
    style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'">interface</SPAN></FONT><o:p></o:p></P></DIV>
    <DIV>
    <P class=MsoNormal><FONT face="Times New Roman" size=3><SPAN 
    style="FONT-SIZE: 12pt">&nbsp;<o:p></o:p></SPAN></FONT></P></DIV>
    <DIV>
    <P class=MsoNormal><FONT face="Courier New" size=2><SPAN 
    style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'">type</SPAN></FONT><o:p></o:p></P></DIV>
    <DIV>
    <P class=MsoNormal><FONT face="Times New Roman" size=3><SPAN 
    style="FONT-SIZE: 12pt">&nbsp;<o:p></o:p></SPAN></FONT></P></DIV>
    <DIV>
    <P class=MsoNormal><FONT face="Courier New" size=2><SPAN 
    style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'">&nbsp; IMyMenuItem = 
    interface<BR>&nbsp;&nbsp;&nbsp; function AddMenuItem(PCaption: String; 
    POnClick: TNotifyEvent): IMyMenuItem;<BR>&nbsp;&nbsp;&nbsp; procedure 
    MyFree;<BR>&nbsp; end;</SPAN></FONT><o:p></o:p></P></DIV>
    <DIV>
    <P class=MsoNormal><FONT face="Times New Roman" size=3><SPAN 
    style="FONT-SIZE: 12pt">&nbsp;<o:p></o:p></SPAN></FONT></P></DIV>
    <DIV>
    <P class=MsoNormal><FONT face="Courier New" size=2><SPAN 
    style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'">&nbsp; TMyMenuItem = 
    class(TMenuItem, IMyMenuItem)<BR>&nbsp; public<BR>&nbsp;&nbsp;&nbsp; 
    function AddMenuItem(PCaption: String; POnClick: TNotifyEvent): 
    IMyMenuItem;<BR>&nbsp;&nbsp;&nbsp; procedure MyFree;<BR>&nbsp; 
    end;</SPAN></FONT><o:p></o:p></P></DIV>
    <DIV>
    <P class=MsoNormal><FONT face="Times New Roman" size=3><SPAN 
    style="FONT-SIZE: 12pt">&nbsp;<o:p></o:p></SPAN></FONT></P></DIV>
    <DIV>
    <P class=MsoNormal><FONT face="Courier New" size=2><SPAN 
    style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'">&nbsp; TMyTBMenuItem = 
    class(TTBItem, IMyMenuItem)<BR>&nbsp; public<BR>&nbsp;&nbsp;&nbsp; function 
    AddMenuItem(PCaption: String; POnClick: TNotifyEvent): 
    IMyMenuItem;<BR>&nbsp;&nbsp;&nbsp; procedure MyFree;<BR>&nbsp; 
    end;</SPAN></FONT><o:p></o:p></P></DIV>
    <DIV>
    <P class=MsoNormal><FONT face="Times New Roman" size=3><SPAN 
    style="FONT-SIZE: 12pt">&nbsp;<o:p></o:p></SPAN></FONT></P></DIV>
    <DIV>
    <P class=MsoNormal><FONT face="Courier New" size=2><SPAN 
    style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'">implementation;</SPAN></FONT><o:p></o:p></P></DIV>
    <DIV>
    <P class=MsoNormal><FONT face="Times New Roman" size=3><SPAN 
    style="FONT-SIZE: 12pt">&nbsp;<o:p></o:p></SPAN></FONT></P></DIV>
    <DIV>
    <P class=MsoNormal><FONT face="Courier New" size=2><SPAN 
    style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'">function 
    TMyMenuItem.AddMenuItem(PCaption: String; POnClick: TNotifyEvent): 
    IMyMenuItem;<BR>var<BR>&nbsp; LMenuItem: TMyMenuItem;<BR>begin<BR>&nbsp; 
    LMenuItem := TMyMenuItem.Create(PParent.Owner);<BR>&nbsp; LMenuItem.Caption 
    := PCaption;<BR>&nbsp; LMenuItem.OnClick := POnClick;<BR>&nbsp; Result := 
    LMenuItem;<BR>end;</SPAN></FONT><o:p></o:p></P></DIV>
    <DIV>
    <P class=MsoNormal><FONT face="Times New Roman" size=3><SPAN 
    style="FONT-SIZE: 12pt">&nbsp;<o:p></o:p></SPAN></FONT></P></DIV>
    <DIV>
    <P class=MsoNormal><FONT face="Courier New" size=2><SPAN 
    style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'">procedure 
    TMyMenuItem.MyFree;<BR>begin<BR>&nbsp; 
    Free;<BR>end;</SPAN></FONT><o:p></o:p></P></DIV>
    <DIV>
    <P class=MsoNormal><FONT face="Times New Roman" size=3><SPAN 
    style="FONT-SIZE: 12pt">&nbsp;<o:p></o:p></SPAN></FONT></P></DIV>
    <DIV>
    <P class=MsoNormal><FONT face="Courier New" size=2><SPAN 
    style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'">function 
    TMyTBMenuItem.AddMenuItem(PCaption: String; POnClick: TNotifyEvent): 
    IMyMenuItem;<BR>var<BR>&nbsp; LMenuItem: TMyTBMenuItem;<BR>begin<BR>&nbsp; 
    LMenuItem := TMyTBMenuItem.Create(PParent.Owner);<BR>&nbsp; 
    LMenuItem.Caption := PCaption;<BR>&nbsp; LMenuItem.OnClick := 
    POnClick;<BR>&nbsp; Result := 
    LMenuItem;<BR>end;</SPAN></FONT><o:p></o:p></P></DIV>
    <DIV>
    <P class=MsoNormal><FONT face="Times New Roman" size=3><SPAN 
    style="FONT-SIZE: 12pt">&nbsp;<o:p></o:p></SPAN></FONT></P></DIV>
    <DIV>
    <P class=MsoNormal><FONT face="Courier New" size=2><SPAN 
    style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'">procedure 
    TMyTBMenuItem.MyFree;<BR>begin<BR>&nbsp; 
    Free;<BR>end;</SPAN></FONT><o:p></o:p></P></DIV>
    <DIV>
    <P class=MsoNormal><FONT face="Times New Roman" size=3><SPAN 
    style="FONT-SIZE: 12pt">&nbsp;<o:p></o:p></SPAN></FONT></P></DIV>
    <DIV>
    <P class=MsoNormal><FONT face=Arial size=2><SPAN 
    style="FONT-SIZE: 10pt; FONT-FAMILY: Arial">The intention of this is to 
    allow you to dynamically create menu items, but<BR>it doesn't matter if you 
    have a normal menu (TMenuItem) or a<BR>Toolbar 2000 menu (TTBItem). You just 
    deal with IMyMenuItem and the correct<BR>objects are created behind the 
    scenes.</SPAN></FONT><o:p></o:p></P></DIV>
    <DIV>
    <P class=MsoNormal><FONT face="Times New Roman" size=3><SPAN 
    style="FONT-SIZE: 12pt">&nbsp;<o:p></o:p></SPAN></FONT></P></DIV>
    <DIV>
    <P class=MsoNormal><FONT face=Arial size=2><SPAN 
    style="FONT-SIZE: 10pt; FONT-FAMILY: Arial">This works pretty well except I 
    have an intermittent access violations when 
    freeing.</SPAN></FONT><o:p></o:p></P></DIV>
    <DIV>
    <P class=MsoNormal><FONT face="Times New Roman" size=3><SPAN 
    style="FONT-SIZE: 12pt">&nbsp;<o:p></o:p></SPAN></FONT></P></DIV>
    <DIV>
    <P class=MsoNormal><FONT face="Courier New" size=2><SPAN 
    style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'">MyMenuItem: 
    IMyMenuItem;</SPAN></FONT><o:p></o:p></P></DIV>
    <DIV>
    <P class=MsoNormal><FONT face="Times New Roman" size=3><SPAN 
    style="FONT-SIZE: 12pt">&nbsp;<o:p></o:p></SPAN></FONT></P></DIV>
    <DIV>
    <P class=MsoNormal><FONT face="Courier New" size=2><SPAN 
    style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'">... // Do some 
    stuff.</SPAN></FONT><o:p></o:p></P></DIV>
    <DIV>
    <P class=MsoNormal><FONT face="Times New Roman" size=3><SPAN 
    style="FONT-SIZE: 12pt">&nbsp;<o:p></o:p></SPAN></FONT></P></DIV>
    <DIV>
    <P class=MsoNormal><FONT face="Courier New" size=2><SPAN 
    style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'">MyMenuItem := 
    RootMenuItem.AddMenuItem('Hello World', 
    HelloWorldClick);</SPAN></FONT><o:p></o:p></P></DIV>
    <DIV>
    <P class=MsoNormal><FONT face="Times New Roman" size=3><SPAN 
    style="FONT-SIZE: 12pt">&nbsp;<o:p></o:p></SPAN></FONT></P></DIV>
    <DIV>
    <P class=MsoNormal><FONT face="Courier New" size=2><SPAN 
    style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'">... // Later 
    on</SPAN></FONT><o:p></o:p></P></DIV>
    <DIV>
    <P class=MsoNormal><FONT face="Times New Roman" size=3><SPAN 
    style="FONT-SIZE: 12pt">&nbsp;<o:p></o:p></SPAN></FONT></P></DIV>
    <DIV>
    <P class=MsoNormal><FONT face="Courier New" size=2><SPAN 
    style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'">MMyMenuItem.MyFree; // 
    Intermiitent access violation here!</SPAN></FONT><o:p></o:p></P></DIV>
    <DIV>
    <P class=MsoNormal><FONT face="Times New Roman" size=3><SPAN 
    style="FONT-SIZE: 12pt">&nbsp;<o:p></o:p></SPAN></FONT></P></DIV>
    <DIV>
    <P class=MsoNormal><FONT face=Arial size=2><SPAN 
    style="FONT-SIZE: 10pt; FONT-FAMILY: Arial">I don't actually like the fact 
    that I have MyFree. It was the only way I could think of doing it at the 
    time.</SPAN></FONT><o:p></o:p></P></DIV>
    <DIV>
    <P class=MsoNormal><FONT face="Times New Roman" size=3><SPAN 
    style="FONT-SIZE: 12pt">&nbsp;<o:p></o:p></SPAN></FONT></P></DIV>
    <DIV>
    <P class=MsoNormal><FONT face=Arial size=2><SPAN 
    style="FONT-SIZE: 10pt; FONT-FAMILY: Arial">Stacey</SPAN></FONT><o:p></o:p></P></DIV>
    <DIV>
    <P class=MsoNormal><FONT face="Times New Roman" size=3><SPAN 
    style="FONT-SIZE: 12pt">&nbsp;<o:p></o:p></SPAN></FONT></P></DIV>
    <P class=MsoNormal><FONT face="Courier New" size=2><SPAN 
    style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'">Stacey 
    Verner&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
    Ph:&nbsp;&nbsp; +64-9-4154790<BR>Software 
    Developer&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Fax:&nbsp; 
    +64-9-4154791<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
    DDI:&nbsp; +64-9-4154797<BR>CJN Technologies Ltd.&nbsp;&nbsp;&nbsp;&nbsp; 
    Email: </SPAN></FONT><A href="mailto:stacey@cjntech.co.nz"><FONT 
    face="Courier New" size=2><SPAN 
    style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'">stacey@cjntech.co.nz</SPAN></FONT></A><BR><st1:Street 
    w:st="on"><st1:address w:st="on"><FONT face="Courier New" size=2><SPAN 
    style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'">PO Box 302-278, 
    North</SPAN></FONT></st1:address></st1:Street><FONT face="Courier New" 
    size=2><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"> Harbour, 
    <st1:City w:st="on">Auckland</st1:City> 1330, <st1:country-region 
    w:st="on"><st1:place w:st="on">New 
    Zealand</st1:place></st1:country-region><BR><st1:Street 
    w:st="on"><st1:address w:st="on">12 Piermark Drive, 
    North</st1:address></st1:Street> Harbour, <st1:place w:st="on"><st1:City 
    w:st="on">Auckland</st1:City>, <st1:country-region w:st="on">New 
    Zealand</st1:country-region></st1:place><BR>Visit our website at 
    </SPAN></FONT><A href="http://www.cjntech.co.nz/"><FONT face="Courier New" 
    size=2><SPAN 
    style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'">http://www.cjntech.co.nz/</SPAN></FONT></A><FONT 
    face="Courier New" size=2><SPAN 
    style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"> 
    </SPAN></FONT><o:p></o:p></P>
    <DIV>
    <P class=MsoNormal><FONT face="Times New Roman" size=3><SPAN 
    style="FONT-SIZE: 12pt">&nbsp;<o:p></o:p></SPAN></FONT></P></DIV>
    <DIV class=MsoNormal style="TEXT-ALIGN: center" align=center><FONT 
    face="Times New Roman" size=3><SPAN style="FONT-SIZE: 12pt">
    <HR align=center width="100%" SIZE=2>
    </SPAN></FONT></DIV>
    <P class=MsoNormal><FONT face="Times New Roman" size=3><SPAN 
    style="FONT-SIZE: 12pt">_______________________________________________<BR><st1:place 
    w:st="on">Delphi</st1:place> mailing 
    list<BR>Delphi@ns3.123.co.nz<BR>http://ns3.123.co.nz/mailman/listinfo/delphi<o:p></o:p></SPAN></FONT></P>
    <DIV class=MsoNormal style="TEXT-ALIGN: center" align=center><FONT 
    face="Times New Roman" size=3><SPAN style="FONT-SIZE: 12pt">
    <HR align=center width="100%" SIZE=2>
    </SPAN></FONT></DIV>
    <P class=MsoNormal><FONT face="Times New Roman" size=3><SPAN 
    style="FONT-SIZE: 12pt">No virus found in this incoming message.<BR>Checked 
    by AVG Anti-Virus.<BR>Version: 7.0.344 / Virus Database: 267.11.8/113 - 
    Release Date: 27/09/2005<o:p></o:p></SPAN></FONT></P></BLOCKQUOTE></DIV>
  <P>
  <HR>

  <P></P>_______________________________________________<BR>Delphi mailing 
  list<BR>Delphi@ns3.123.co.nz<BR>http://ns3.123.co.nz/mailman/listinfo/delphi<BR>
  <P>
  <HR>

  <P></P>No virus found in this incoming message.<BR>Checked by AVG 
  Anti-Virus.<BR>Version: 7.0.344 / Virus Database: 267.11.8/113 - Release Date: 
  27/09/2005<BR></BLOCKQUOTE></BODY></HTML>