Jump to content
dummzeuch

INTAServices.AddMasked seems to be broken in Delphi 12

Recommended Posts

After wasting two days trying to find a solution for this issue, I just filed a bug report with Embarcadero:

 

RSP-44007: Actions / menus display wrong images for plugins

 

Description

When a plugin (both, package or dll based) adds actions / menu entries with images using INTAServices.AddMasked and assigns the index of this call to the ImageIndex property of an action, the menu entries associated with these actions do not display the correct image but apparently some random image of the plugin.

The same issue also exists in the Customize Toolbars dialog where it also schows the wrong images.

I will attach the source code for a plugin based on David Hoyle's example in his book, so I am pretty sure there isn't a mistake. But the first time I noticed this problem was in GExperts. The same code that worked fine in all older Delphi versions now also shows the wrong images.

 

This corresponds to the GExperts bug report #331: Editor Toolbar Configuration buttons

 

Please vote for it.

 

If any of the other plugin developers has got an idea how to work around this issue, I'm open for suggestions.

Share this post


Link to post

I have dropped using AddMasked for quite a while in favor of AddImages using a T(Virtual)ImageList and TActionList in dedicated datamodules. You can find that approach in https://github.com/UweRaabe/DelphiCodeCoveragePlugin.

 

Note that unloading and reloading a plugin may scramble the image mapping. Alas I have not found a reliable test case up to now.

 

  • Like 1

Share this post


Link to post
18 hours ago, Uwe Raabe said:

I have dropped using AddMasked for quite a while in favor of AddImages using a T(Virtual)ImageList and TActionList in dedicated datamodules. You can find that approach in https://github.com/UweRaabe/DelphiCodeCoveragePlugin.

Thanks for the hint. I thought about that approach too, but unfortunately that's very difficult to do with the current way GExperts works: Each expert registers its own action / image with the IDE, removes the action when the expert is disabled and adds it again when the expert is enabled. All this without restarting the IDE. On top of that this API was introduced at some time after Delphi 6 (haven't checked when exactly), so I'd need to use two different ways to still support all currently supported Delphi versions.

 

Btw: Are you aware that Project Magician registers an action without a name? That means it cannot be added reliably to a toolbar. I found that today while investigating an issue with the GExperts Editor Toolbar.

Edited by dummzeuch

Share this post


Link to post
2 hours ago, dummzeuch said:

Are you aware that Project Magician registers an action without a name?

Not until you mentioned it. Will be fixed in the next release.

Share this post


Link to post
Posted (edited)

I just tried to use AddImages instead. Unfortunately this doesn't work either in Delphi 12 but works fine in older versions (those that support it).

Maybe it doesn't like being used in addition to AddMasked, or I am doing something else wrong.

 

Another day wasted on broken IDE functionality. 😞

Edited by dummzeuch

Share this post


Link to post
15 hours ago, dummzeuch said:

I just tried to use AddImages instead. Unfortunately this doesn't work either in Delphi 12 but works fine in older versions (those that support it).

Maybe it doesn't like being used in addition to AddMasked, or I am doing something else wrong.

It was the additional calls to AddMasked. If I comment these out, the images are assigned correctly to the actions. So now I have to figure out a way to avoid these calls. And then ifdef the whole stuff to only run on Delphi 12 (and possibly later, or maybe starting with the first Delphi version that supports AddImages) ...

Share this post


Link to post

Nailed it. Took me "only" a few days to work around this bug 😞

The up side is that in the process I did quite some clean up of the GExperts code.

 

I wonder how many new bugs I have introduced by this change.

Anybody brave enough to test it? I just committed the code.

Share this post


Link to post

Downloaded and installed.  What specifically would you like tested?

Edited by Ian Branch

Share this post


Link to post

The changes I made concentrated on two areas:

 

1. Moving the code previously in the special editor enhancements part to a new expert with that name. So there is no longer a tab in the configuration dialog for the editor enhancements, instead there is a new expert and the configuration is done through that experts own configuration dialog. (This was done to achieve 2. more easily.)

2. Restructuring the way images are assigned to actions registered with the IDE. This should fix the problem described in the original post.

 

Everything else should continue working as before.

Share this post


Link to post

Dowloaded and installed the latest rev 4182.

After 20 minutes of testing, all good so far.

  • Thanks 1

Share this post


Link to post

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×