Christian Iversen wrote:
<div class="moz-text-flowed" style="font-family: -moz-fixed">On 2009-07-28 12:08, Raditya Perdhevi wrote:
hi all,
i don't know if this is the right place to ask but i have a stupid question
how can i add a patch?

It certainly is! Although I'm not involved enough with the project to be totally sure, unfortunately :)
Patches are created and applied with a subversion client
http://en.wikipedia.org/wiki/Comparison_of_Subversion_clients
Also see the Lazarus wiki about getting the latest SVN trunc Lazarus code
If you want to submit a patch then create a bug report about the issue and upload your patch file to the bug report. If it is a good patch then one of the project managers will apply it to the product. Actually I think it should be compulsory to submit a patch with bug reports - maybe more would get resolved!!

some time ago i've added a small adjustment on RX component from
Lazarus-CCR, to be exactly, i've added this lines on rxlookup.pas
on OnClosePopup method in TRxCustomDBLookupEdit class

   if assigned(FRxPopUpForm) then
   begin
     FRxPopUpForm := nil;
   end;

This just seems superfluous. Isn't the FRxPopUpForm just a straight variable? Then just assign nil to it. There should be no need to check it for non-nility when you're just going to nil it anyway.

I worry about this code. Does the FRxPopUpForm get freed elsewhere? Without garbage collection you need to be wary of memory leaks.

I have not looked at the source you are working on so forgive me if the following comment is not applicable. It may in any case be a good tip for others on the mailing list.

To trash FRxPopUpForm  you could

FRxPopUpForm.Free;
FRxPopUpForm := nil;

Free checks for nil so you do not get an access violation even if it is already nil

Application forms should be created with the Application.CreateForm method so they get added to the Application's Forms list, to be drawn in the correct order and honour any fsStayOnTop settings. It should be left to the application to clean them up on exit.

Component related forms (as I think is the case that you are talking about) (or any other component you need to point to - not just forms) which are pointed to by a component field (F variable) (rather than by a local (method) variable) should best use the TComponent Notification procedure to nil the field if the form can be destroyed at run time before the component is destroyed

If you are creating the form in your component ...

FRxPopUpForm.Create(  {Self, nil or whatever});
FRxPopUpForm.FreeNotification(Self)


Otherwise if the RxPopUpForm already exists external to your component and you want to know if it gets destroyed ...

Declare a property in your component...

property RxPopUpForm : TRxPopUpForm read FRxPopUpForm write SetRxPopUpForm;

then implement the property setter

procedure TMyComponent.SetRxPopUpForm(Value: TRxPopUpForm );
begin
 if  (Value = FRxPopUpForm) then
   Exit;
 if Assigned(FRxPopUpForm) then
   FRxPopUpForm.RemoveFreeNotification(Self);
 FRxPopUpForm := Value;
 if Assigned(FRxPopUpForm) then
   FRxPopUpForm.FreeNotification(Self);
end
Either way you write a notification override procedure to nil the property.

procedure TMyComponent.Notification(AComponent: TComponent; Operation: TOperation);
begin
 inherited Notification(AComponent, Operation);
 case Operation of
 opRemove:
   if   (AComponent =  FRxPopUpForm) then
     FRxPopUpForm := nil;
 end; // case
end in this way you can free the FRxPopUpForm instance anywhere at any time and your component will know that it is now nil.


if you are creating and destroying FRxPopUpForm inside a method you just protect the code with a try .. finally block to make sure that you clean up the memory allocation.

Hope this is of help to somebody!










--
_______________________________________________
Lazarus mailing list
[email protected]
http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus

Reply via email to