9
votes

We have a modified menus.pas.

At

uses ...,Controls,...;

The compiler raised a fatal error:

[DCC Fatal Error] Menus.pas(*): F2051 Unit Controls was compiled with a different version of Menus.TPopupMenu

tried:

deleted all dcu in the project.

build

build all

tried adding the file to library path which leads to add db folder(from vcl too) and then to

[DCC Error] jpeg.pas(872): E2065 Unsatisfied forward or external declaration: 'jpeg_save_markers'

which is a dead end.

deleted the controls.dcu (all 3) and the delphi did not know automaticaly to recompile them, instead reported that controls.dcu is missing.

2
IIRC, if you modify a file from delphi's source, you need to recompile all in a specific order, I've never done it...user497849
So, you have modified the Menus.pas in the Delphi's source folder ? You need to notice, that the debug and runtime *.dcu files are stored in the ..\lib directory and optionally subdirectories (I have only Delphi 2009 by hand at this time, so it might be slightly different)TLama
Better do not change any file in any of the default delphi folders. Put all your modified source files in a folder of your own and include this folder in the search path of project options (or in library path in options if you're sure you'll always use the modified files).Sertac Akyuz
You need to make sure you don't modify the interface section. You may also need to explicitly set the compiler options at the head of the modified Menus.pas file. Set them to the default Delphi options. Find out what they are by creating a new project and press Ctrl+O ODavid Heffernan
Similar questions, How to recompile a specific unit from the VCL? and Can I recompile the .PAS files used by the Delphi IDE? and How to patch a method in Classes.pas. David's answer here is more to the point, hand's on information, though.LU RD

2 Answers

14
votes

Here is how I handle modifications to VCL source files:

  • Make a copy of the file in your project structure. Either add the file to your project, or make sure the search path finds your modified file.
  • Make modifications, but only in the implementation section. You are not able to modify the interface section if you use any other units that themselves use the unit you are modifying.
  • Explicitly set the compiler options at the top of the modified source file. Use default Delphi options, as found by pressing CTRL+O O in a default vanilla project.

I'd guess that one of the final two bullet points is what is tripping you up.

1
votes

In Delphi XE7 (and below) themes and styles are totally unusable.

So, I patched the file ( Delphi XE7\source\vcl\Vcl.Themes.pas ) add it to the project file, compiled it and got a DCU. I replaced the old DCU ( Delphi XE7\lib\win32\release\Vcl.Themes.dcu - same for "debug" folder) with the new one. Everything works smooth now. I don't even have to link the PAS file to my projects.