Repository files navigation

DFM Check

If you work with frames and form inheritance you may sometimes experience that the application doesn't start or one of the derived forms crashes with an EReadError. This is because a control in the frame or base form was deleted or renamed. Unfortunatelly the DFM files are resource files that do not go through the compiler for validation.

This IDE plugin adds the possibility to check all DFM files of the active project. It generates a special unit that accesses every control on the formular by code. This unit will fail to compile if one or more DFM files do not fit to the form class. When the plugin is installed there is a new menu item "DFM Check" in the "Project" menu that invokes the DFM validation. You can also use the "Open/Close all forms" menu item to let the IDE validate the forms. But this requires a lot more resources and time but is useful to automatically save modifications due to parent component changes in the base class DFM.

The code of the special unit is never linked into the executable because of Delphi's smart linking feature.

DFMCheck.exe (Delphi Projects only)

The DFMCheck.exe is a command line tool that generates a _DfmCheck_Unit.pas and copies the project file to _DfmCheck.[dpr/cfg/dproj]. This allows a build script to invoke the compiler on the DfmCheck project to verify the correctness of the DFM files.

Installation

The DfmCheck.bpl is a hybrid package. It can be used as a DLL Expert or as a design-time package. Using it as a design-time package could cause problems with the package unloading during compilation. But it is easier to install because you must only add the BPL to the package list. (Menu "Components/Install Packages")

Installing the BPL as an DLL Expert can be done by using the Expert Manager from GExperts (http://www.gexperts.org) or by adding the BPL by hand to the registry key

HKCU\{Borland|CodeGear|Embarcadero}\{Delphi|BDS|RAD Studio}\{version}\Experts

Supported Delphi Versions

  • Delphi/BCB 5
  • Delphi/BCB 6
  • Delphi 7
  • Delphi 2005 (9)
  • BDS 2006 (10)
  • Delphi 2007, C++Builder 2007, RAD Studio 2007
  • Delphi/C++Builder/RAD Studio 2009-11

About

Delphi IDE Plugin to validate DFM files

Resources

Stars

55 stars

Watchers

11 watching

Forks

Releases

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation

DFM Check

If you work with frames and form inheritance you may sometimes experience that the application doesn't start or one of the derived forms crashes with an EReadError. This is because a control in the frame or base form was deleted or renamed. Unfortunatelly the DFM files are resource files that do not go through the compiler for validation.

This IDE plugin adds the possibility to check all DFM files of the active project. It generates a special unit that accesses every control on the formular by code. This unit will fail to compile if one or more DFM files do not fit to the form class. When the plugin is installed there is a new menu item "DFM Check" in the "Project" menu that invokes the DFM validation. You can also use the "Open/Close all forms" menu item to let the IDE validate the forms. But this requires a lot more resources and time but is useful to automatically save modifications due to parent component changes in the base class DFM.

The code of the special unit is never linked into the executable because of Delphi's smart linking feature.

DFMCheck.exe (Delphi Projects only)

The DFMCheck.exe is a command line tool that generates a _DfmCheck_Unit.pas and copies the project file to _DfmCheck.[dpr/cfg/dproj]. This allows a build script to invoke the compiler on the DfmCheck project to verify the correctness of the DFM files.

Installation

The DfmCheck.bpl is a hybrid package. It can be used as a DLL Expert or as a design-time package. Using it as a design-time package could cause problems with the package unloading during compilation. But it is easier to install because you must only add the BPL to the package list. (Menu "Components/Install Packages")

Installing the BPL as an DLL Expert can be done by using the Expert Manager from GExperts (http://www.gexperts.org) or by adding the BPL by hand to the registry key

HKCU\{Borland|CodeGear|Embarcadero}\{Delphi|BDS|RAD Studio}\{version}\Experts

Supported Delphi Versions

  • Delphi/BCB 5
  • Delphi/BCB 6
  • Delphi 7
  • Delphi 2005 (9)
  • BDS 2006 (10)
  • Delphi 2007, C++Builder 2007, RAD Studio 2007
  • Delphi/C++Builder/RAD Studio 2009-11

About

Delphi IDE Plugin to validate DFM files

Resources

Stars

55 stars

Watchers

11 watching

Forks

Releases

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

DFM Check

If you work with frames and form inheritance you may sometimes experience that the application doesn't start or one of the derived forms crashes with an EReadError. This is because a control in the frame or base form was deleted or renamed. Unfortunatelly the DFM files are resource files that do not go through the compiler for validation.

This IDE plugin adds the possibility to check all DFM files of the active project. It generates a special unit that accesses every control on the formular by code. This unit will fail to compile if one or more DFM files do not fit to the form class. When the plugin is installed there is a new menu item "DFM Check" in the "Project" menu that invokes the DFM validation. You can also use the "Open/Close all forms" menu item to let the IDE validate the forms. But this requires a lot more resources and time but is useful to automatically save modifications due to parent component changes in the base class DFM.

The code of the special unit is never linked into the executable because of Delphi's smart linking feature.

DFMCheck.exe (Delphi Projects only)

The DFMCheck.exe is a command line tool that generates a _DfmCheck_Unit.pas and copies the project file to _DfmCheck.[dpr/cfg/dproj]. This allows a build script to invoke the compiler on the DfmCheck project to verify the correctness of the DFM files.

Installation

The DfmCheck.bpl is a hybrid package. It can be used as a DLL Expert or as a design-time package. Using it as a design-time package could cause problems with the package unloading during compilation. But it is easier to install because you must only add the BPL to the package list. (Menu "Components/Install Packages")

Installing the BPL as an DLL Expert can be done by using the Expert Manager from GExperts (http://www.gexperts.org) or by adding the BPL by hand to the registry key

HKCU\{Borland|CodeGear|Embarcadero}\{Delphi|BDS|RAD Studio}\{version}\Experts

Supported Delphi Versions

  • Delphi/BCB 5
  • Delphi/BCB 6
  • Delphi 7
  • Delphi 2005 (9)
  • BDS 2006 (10)
  • Delphi 2007, C++Builder 2007, RAD Studio 2007
  • Delphi/C++Builder/RAD Studio 2009-11

About

Delphi IDE Plugin to validate DFM files

Resources

Stars

55 stars

Watchers

11 watching

Forks

Releases

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

DFM Check

If you work with frames and form inheritance you may sometimes experience that the application doesn't start or one of the derived forms crashes with an EReadError. This is because a control in the frame or base form was deleted or renamed. Unfortunatelly the DFM files are resource files that do not go through the compiler for validation.

This IDE plugin adds the possibility to check all DFM files of the active project. It generates a special unit that accesses every control on the formular by code. This unit will fail to compile if one or more DFM files do not fit to the form class. When the plugin is installed there is a new menu item "DFM Check" in the "Project" menu that invokes the DFM validation. You can also use the "Open/Close all forms" menu item to let the IDE validate the forms. But this requires a lot more resources and time but is useful to automatically save modifications due to parent component changes in the base class DFM.

The code of the special unit is never linked into the executable because of Delphi's smart linking feature.

DFMCheck.exe (Delphi Projects only)

The DFMCheck.exe is a command line tool that generates a _DfmCheck_Unit.pas and copies the project file to _DfmCheck.[dpr/cfg/dproj]. This allows a build script to invoke the compiler on the DfmCheck project to verify the correctness of the DFM files.

Installation

The DfmCheck.bpl is a hybrid package. It can be used as a DLL Expert or as a design-time package. Using it as a design-time package could cause problems with the package unloading during compilation. But it is easier to install because you must only add the BPL to the package list. (Menu "Components/Install Packages")

Installing the BPL as an DLL Expert can be done by using the Expert Manager from GExperts (http://www.gexperts.org) or by adding the BPL by hand to the registry key

HKCU\{Borland|CodeGear|Embarcadero}\{Delphi|BDS|RAD Studio}\{version}\Experts

Supported Delphi Versions

  • Delphi/BCB 5
  • Delphi/BCB 6
  • Delphi 7
  • Delphi 2005 (9)
  • BDS 2006 (10)
  • Delphi 2007, C++Builder 2007, RAD Studio 2007
  • Delphi/C++Builder/RAD Studio 2009-11

About

Delphi IDE Plugin to validate DFM files

Resources

Stars

55 stars

Watchers

11 watching

Forks

Releases

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Repository files navigation

DFM Check

If you work with frames and form inheritance you may sometimes experience that the application doesn't start or one of the derived forms crashes with an EReadError. This is because a control in the frame or base form was deleted or renamed. Unfortunatelly the DFM files are resource files that do not go through the compiler for validation.

This IDE plugin adds the possibility to check all DFM files of the active project. It generates a special unit that accesses every control on the formular by code. This unit will fail to compile if one or more DFM files do not fit to the form class. When the plugin is installed there is a new menu item "DFM Check" in the "Project" menu that invokes the DFM validation. You can also use the "Open/Close all forms" menu item to let the IDE validate the forms. But this requires a lot more resources and time but is useful to automatically save modifications due to parent component changes in the base class DFM.

The code of the special unit is never linked into the executable because of Delphi's smart linking feature.

DFMCheck.exe (Delphi Projects only)

The DFMCheck.exe is a command line tool that generates a _DfmCheck_Unit.pas and copies the project file to _DfmCheck.[dpr/cfg/dproj]. This allows a build script to invoke the compiler on the DfmCheck project to verify the correctness of the DFM files.

Installation

The DfmCheck.bpl is a hybrid package. It can be used as a DLL Expert or as a design-time package. Using it as a design-time package could cause problems with the package unloading during compilation. But it is easier to install because you must only add the BPL to the package list. (Menu "Components/Install Packages")

Installing the BPL as an DLL Expert can be done by using the Expert Manager from GExperts (http://www.gexperts.org) or by adding the BPL by hand to the registry key

HKCU\{Borland|CodeGear|Embarcadero}\{Delphi|BDS|RAD Studio}\{version}\Experts

Supported Delphi Versions

  • Delphi/BCB 5
  • Delphi/BCB 6
  • Delphi 7
  • Delphi 2005 (9)
  • BDS 2006 (10)
  • Delphi 2007, C++Builder 2007, RAD Studio 2007
  • Delphi/C++Builder/RAD Studio 2009-11

About

Delphi IDE Plugin to validate DFM files

Resources

Stars

55 stars

Watchers

11 watching

Forks

Releases

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

DFM Check

If you work with frames and form inheritance you may sometimes experience that the application doesn't start or one of the derived forms crashes with an EReadError. This is because a control in the frame or base form was deleted or renamed. Unfortunatelly the DFM files are resource files that do not go through the compiler for validation.

This IDE plugin adds the possibility to check all DFM files of the active project. It generates a special unit that accesses every control on the formular by code. This unit will fail to compile if one or more DFM files do not fit to the form class. When the plugin is installed there is a new menu item "DFM Check" in the "Project" menu that invokes the DFM validation. You can also use the "Open/Close all forms" menu item to let the IDE validate the forms. But this requires a lot more resources and time but is useful to automatically save modifications due to parent component changes in the base class DFM.

The code of the special unit is never linked into the executable because of Delphi's smart linking feature.

DFMCheck.exe (Delphi Projects only)

The DFMCheck.exe is a command line tool that generates a _DfmCheck_Unit.pas and copies the project file to _DfmCheck.[dpr/cfg/dproj]. This allows a build script to invoke the compiler on the DfmCheck project to verify the correctness of the DFM files.

Installation

The DfmCheck.bpl is a hybrid package. It can be used as a DLL Expert or as a design-time package. Using it as a design-time package could cause problems with the package unloading during compilation. But it is easier to install because you must only add the BPL to the package list. (Menu "Components/Install Packages")

Installing the BPL as an DLL Expert can be done by using the Expert Manager from GExperts (http://www.gexperts.org) or by adding the BPL by hand to the registry key

HKCU\{Borland|CodeGear|Embarcadero}\{Delphi|BDS|RAD Studio}\{version}\Experts

Supported Delphi Versions

  • Delphi/BCB 5
  • Delphi/BCB 6
  • Delphi 7
  • Delphi 2005 (9)
  • BDS 2006 (10)
  • Delphi 2007, C++Builder 2007, RAD Studio 2007
  • Delphi/C++Builder/RAD Studio 2009-11

About

Delphi IDE Plugin to validate DFM files

Resources

Stars

55 stars

Watchers

11 watching

Forks

Releases

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

DFM Check

If you work with frames and form inheritance you may sometimes experience that the application doesn't start or one of the derived forms crashes with an EReadError. This is because a control in the frame or base form was deleted or renamed. Unfortunatelly the DFM files are resource files that do not go through the compiler for validation.

This IDE plugin adds the possibility to check all DFM files of the active project. It generates a special unit that accesses every control on the formular by code. This unit will fail to compile if one or more DFM files do not fit to the form class. When the plugin is installed there is a new menu item "DFM Check" in the "Project" menu that invokes the DFM validation. You can also use the "Open/Close all forms" menu item to let the IDE validate the forms. But this requires a lot more resources and time but is useful to automatically save modifications due to parent component changes in the base class DFM.

The code of the special unit is never linked into the executable because of Delphi's smart linking feature.

DFMCheck.exe (Delphi Projects only)

The DFMCheck.exe is a command line tool that generates a _DfmCheck_Unit.pas and copies the project file to _DfmCheck.[dpr/cfg/dproj]. This allows a build script to invoke the compiler on the DfmCheck project to verify the correctness of the DFM files.

Installation

The DfmCheck.bpl is a hybrid package. It can be used as a DLL Expert or as a design-time package. Using it as a design-time package could cause problems with the package unloading during compilation. But it is easier to install because you must only add the BPL to the package list. (Menu "Components/Install Packages")

Installing the BPL as an DLL Expert can be done by using the Expert Manager from GExperts (http://www.gexperts.org) or by adding the BPL by hand to the registry key

HKCU\{Borland|CodeGear|Embarcadero}\{Delphi|BDS|RAD Studio}\{version}\Experts

Supported Delphi Versions

  • Delphi/BCB 5
  • Delphi/BCB 6
  • Delphi 7
  • Delphi 2005 (9)
  • BDS 2006 (10)
  • Delphi 2007, C++Builder 2007, RAD Studio 2007
  • Delphi/C++Builder/RAD Studio 2009-11

About

Delphi IDE Plugin to validate DFM files

Resources

Stars

55 stars

Watchers

11 watching

Forks

Releases

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Repository files navigation

DFM Check

If you work with frames and form inheritance you may sometimes experience that the application doesn't start or one of the derived forms crashes with an EReadError. This is because a control in the frame or base form was deleted or renamed. Unfortunatelly the DFM files are resource files that do not go through the compiler for validation.

This IDE plugin adds the possibility to check all DFM files of the active project. It generates a special unit that accesses every control on the formular by code. This unit will fail to compile if one or more DFM files do not fit to the form class. When the plugin is installed there is a new menu item "DFM Check" in the "Project" menu that invokes the DFM validation. You can also use the "Open/Close all forms" menu item to let the IDE validate the forms. But this requires a lot more resources and time but is useful to automatically save modifications due to parent component changes in the base class DFM.

The code of the special unit is never linked into the executable because of Delphi's smart linking feature.

DFMCheck.exe (Delphi Projects only)

The DFMCheck.exe is a command line tool that generates a _DfmCheck_Unit.pas and copies the project file to _DfmCheck.[dpr/cfg/dproj]. This allows a build script to invoke the compiler on the DfmCheck project to verify the correctness of the DFM files.

Installation

The DfmCheck.bpl is a hybrid package. It can be used as a DLL Expert or as a design-time package. Using it as a design-time package could cause problems with the package unloading during compilation. But it is easier to install because you must only add the BPL to the package list. (Menu "Components/Install Packages")

Installing the BPL as an DLL Expert can be done by using the Expert Manager from GExperts (http://www.gexperts.org) or by adding the BPL by hand to the registry key

HKCU\{Borland|CodeGear|Embarcadero}\{Delphi|BDS|RAD Studio}\{version}\Experts

Supported Delphi Versions

  • Delphi/BCB 5
  • Delphi/BCB 6
  • Delphi 7
  • Delphi 2005 (9)
  • BDS 2006 (10)
  • Delphi 2007, C++Builder 2007, RAD Studio 2007
  • Delphi/C++Builder/RAD Studio 2009-11

About

Delphi IDE Plugin to validate DFM files

Resources

Stars

55 stars

Watchers

11 watching

Forks

Releases

Contributors

Languages