[Lazarus] lazarus and patches

ik idokan at gmail.com
Tue May 4 11:21:57 CEST 2010


On Mon, 3 May 2010 14:52:30 +0300
Juha Manninen <juha.manninen at phnet.fi> wrote:

> Hi
> 
> I have been converting EssModel Delphi program, partly as an exercise and 
> partly because it could develop into a useful program or component.
> It is a reverse engineering class diagram tool.
> 
> I am facing more problems than expected. This is not related to Delphi 
> converter in Lazarus but to the manual editing after it.
> 
> First, the code uses a trick. It typecast controls like TForm to a local 
> TCrackControl just to reach the protected TControl.OnMouseDown and such.
> 
>   type
>     TCrackControl = class(TControl);  // <-- empty local class
>   var
>     found: TControl;
>     cc: TCrackControl;
> 
> and later:
>   // 'found' can be TForm or anything.
>   cc:=TCrackControl(found);  // <-- error
>   cc.OnMouseDown := ...
> 
> It gives 'RunError(219)', and the whole Lazarus may become unstable.
> The typecast is actually OK because the controls inherit from TControl and 
> OnMouseDown is defined there. According to Mattias this system is even used in 
> Lazarus itself. In a small test project the same system worked for me, too.
> ???
> 
> The program used interfaces heavily, actually in a clever way. I thought they 
> cause the above problem and changed the code quite much to get rid of 
> interfaces. No difference, it still doesn't work.
> 
> Next problem: I noticed there are TActions defined in a DataModule which is 
> created in MainForm.OnActivate handler, and the actions are used in form's 
> menu and button. I thought it causes problems and I copied everything from 
> DataModule to MainForm. I set the actions carefully like they were before and 
> now menu items work but open-button does not. The exact same action is 
> triggered by menuitem but not by button!
> So, this refactoring didn't solve any problems but created a new one.

Did you notice that there are two OpenButton? One has the action, the
other not.


Mattias




More information about the Lazarus mailing list