trichview.support
Re: freeing controls |
Author |
Message |
Michael Philbrick |
Posted: 02/11/2005 19:56:49 Sergey, I forgot one important thing in my first post. Actually, my sequence of events is this: 1) AddControlEx (using an instance of a control as shown in the code in my original post -- btnYes) 2) once the control has been clicked (in this case a button) it is no longer needed so I call DeleteControl to remove it. 3) if it is needed again as the user is interacting with the document I call AddControlEx again using the same instance of the local variable (btnYes). 4) again, it is deleted after it is clicked 5) finally, I clear the entire TRichViewEdit control which supposedly frees the controls or controls. In my original post, the problem I am having actually happens when I create the control only once, not twice as in the above example. What I left out of my description is that I call DeleteControl. Since I will never have more than one instance of the control at the same time, it seems that the most logical solution is to be able to call a function after I am done with the control that truly deletes it and frees the memory without having to call TRichViewEdit.Clear. I need to make sure that the pointer to the control is completely freed so that btnYes=nil. This does not seem to happen even when Clear is called. Thanks. "Michael Philbrick" <[email protected]> wrote: > >Sergey, > >Here is my code: > > with rvMacNav do begin > btnYes := TBitBtn.Create(nil); > AddControlEx('', btnYes, -1, rvvaMiddle); > FormatTail; > with btnYes do begin > Kind := bkYes; > Default := False; > Width := 50; > OnClick := btnYesClick; > end; > end; > >My understanding is that I do not need to free this component. If I call >rvMacNav.Clear, according to the documentation, this component will be freed. > >However, that does not seem to be the result I am getting. I may create and >destroy multiple instances during one session. In each case I will create >an instance, later call Clear, then create another instance, call Clear, >etc. I will never create two instances without clearing in between. > >However, when I run this code in a rvMacNavKeyUp event: > >if (btnYes <> nil) and (btnYes.Parent <> nil) and (char(Key) in ['Y','N']) >then ... > >It will return True in the following instance: > >1) create the component with the above code. >2) call rvMacNav.Clear >3) create the component again. >4) call rvMacNav.Clear > >In other words, it will not return True the first time it is created and >supposedly destroyed with Clear. It will only happen after the second and >subsequent Clear statements. > >I realize that there may be some problems with my code and I cannot really >send you all of it. Therefore, could you clarify a few things for me: > >1) Is it true that calling TRichViewEdit.Clear should completely free a component >so TComponent=nil? >2) Is there any problem with creating multiple instances of a component without >calling Clear? >3) Is there any way to destroy the component without calling Clear? >4) What is the best way to test to see if a component exists? I thought about >SelectControl or FindControl but I really don't want the overhead of iterating >through all the items in the document. There must be something simpler than >the test I used, particularly because it appears to fail the second time >around. > >Thanks. > >(I know that I have been asking a lot of questions, but that is a good thing >-- I am doing so much more with this component that I could do with the last >word processing component I used!!) > |
Powered by ABC Amber Outlook Express Converter