9
votes

After years of Delphi development I now have hundreds of forms shared throughout our Applications. Compilation ranges from Delphi 7 through to XE, thus one form might be opened in any IDE. The well-known Explicitxxx property addition after Delphi 7 has solutions to avoid a form accidentally acquiring properties that earlier compilers can't process (e.g Andreas's DDevExtensions) but I'd like a more positive 'switch' that prevented Delphi from making or saving any form modifications at all. Period.

Of course you could use the read-only flag, and a version control system provides additional means particulay of seeing that such a modification has occured. What I'd really like though is a {$LockDFM} switch that I could put in the form's unit, or a context menu option when viewing the form layout.

Can anyone think of a neat way of achieving this?

Thanks

4
I'm not aware of anything. I rely on my VCS and merge program to deal with this. Plus Andreas's wonderful add-ons. Same as you then!David Heffernan

4 Answers

8
votes

The only thing I can think of (other than the read-only/VCS options you mentioned) is the Edit menu's Lock Controls option. This sets a flag that prevents controls from being moved around. I'm not sure how much good it would actually do, as I've never tried it; I just know it's there.

3
votes

Helo

I am pretty sure that Delphi has no such a thing. I have been searching for a solution to this problem as well.

But, theres one thing you can do: You can write your own Delphi addon using OTA (Open Tools API). I know that there are a few classes which are able to notify you when something are about to be saved. You can intercept this event and decide if you wanna save it (in your case, if it is a DFM).

BTW, if you have plans to do such component, tell me. :)

EDIT:

I have found a piece of code that may help you. Extracted from http://www.gexperts.org/otafaq.html

  TMyFormNotifier = class(TNotifierObject, IOTANotifier, IOTAFormNotifier)
  protected
     procedure FormActivated;
     procedure FormSaving;
     procedure ComponentRenamed(ComponentHandle: TOTAHandle; const OldName, NewName: string);
  end;
1
votes

In design time there is Edit->Lock Control.

LE: this is only for resizing/repositioning the controls on the forms. Concerning the ObjectInspector I don't know if there is anything that can 'lock' the values set there(so the developer can not change them).

1
votes

Basically, no. Aside from the f'ing (pardon my french) explicit size and position properties which IMO never should have been in the .dfm, there are some third party components will change stuff just by you viewing the form. F.x. TMS components will update a version number even if you didn't change a thing since the previous version of their components.