Отключение дизайнера форм в DelphiXE

Можно ли отключить конструктор форм в DelphiXE "по запросу/выборочно" и работать с кодом формы/класса только там, где это необходимо, в том случае, если элементы управления не установлены в среде IDE?


person MX4399    schedule 22.07.2011    source источник
comment
@ Дэвид, пропустил, если элементы управления не установлены в IDE части вопроса ...   -  person Cosmin Prund    schedule 22.07.2011
comment
@David: AFAICT, OP хочет, чтобы IDE не удаляла неизвестные компоненты и свойства, если он редактирует код, не связанный с компонентами. Это не должно создавать проблем для редактора кода (включая анализ ошибок и многое другое), пока доступен код компонентов или DCU.   -  person Uli Gerhardt    schedule 22.07.2011
comment
Вы сражаетесь с дельфи здесь. Если вы не перестанете с этим бороться, вы начнете его ненавидеть. С этим лучше не бороться. Вы можете рассмотреть возможность наличия нескольких кустов реестра для каждого проекта, над которым вы работаете, каждый с установленными компонентами, а затем вам просто нужно запустить нужную IDE с параметром -RBDS_OPTX, чтобы перейти в альтернативную область реестра BDS_OPTX.   -  person Warren P    schedule 22.07.2011
comment
Некоторые используемые/разрабатываемые компоненты изменяются, и это также вызывает исключения в среде IDE, кроме того, факт нежелания постоянно быть привязанным к конструктору форм и загрузки кучи компонентов в Delphi (среда время выполнения, так как оно использует память и вызывает утечки памяти). Стандартное поведение Delphi IDE подходит для удаления, упорядочивания и сопоставления событий, но после этого выполняется много кода. Qt нашел хороший баланс, как и MSVS с формами C#.   -  person MX4399    schedule 23.07.2011
comment
Смотрите мои комментарии ниже к моему ответу. Вы все еще делаете это неправильно, даже в этом случае.   -  person Warren P    schedule 23.07.2011


Ответы (3)


Я бы сказал, что нет, но обходной путь, который я использую, состоит в том, чтобы отредактировать файл DFM и вырезать компонент, которого там нет, и вставить его в событие FormCreate и вместо этого создать его там. Все свойства есть в DFM, поэтому небольшое редактирование заставляет его работать хорошо.

person mj2008    schedule 22.07.2011
comment
Это нормально, если удаление компонента из dfm не разрушит макет всей остальной формы. И это легче сказать, чем сделать с действительно сложным управлением. Эксперт по коду отлично подходит для одного компонента с 30 или менее свойствами, но если это компонент с подкомпонентами и списками свойств, которые должны быть доступны для просмотра и редактирования, вы теряете много функциональности таким образом. - person Warren P; 22.07.2011
comment
@Warren Если компонент настолько важен, вам нужно установить его снова. Но для компоновки в прошлом я использовал TPanel для отображения позиции, а затем использовал ее в качестве родителя. Таким образом, вы все еще можете проектировать вокруг него. - person mj2008; 22.07.2011
comment
Mj2008: Согласен. Панели - отличное решение! Я вытащил некоторые компоненты из времени разработки, когда почувствовал, что поддерживать их работу слишком сложно. И иногда возникают проблемы, когда ваше приложение ломается, потому что проблема времени разработки привела к отключению обработчика OnImportantEvent, что не вызывает никаких сообщений компилятора и является тихим, но смертельным сбоем во время выполнения. - person Warren P; 23.07.2011

Нет, вы не можете отключить его выборочно. Что я часто делаю (поскольку в большинстве моих IDE практически не установлены какие-либо элементы управления), так это то, что я просто открываю форму, говорю Delphi игнорировать все ошибки при загрузке dfm, редактирую исходный код и убеждаюсь, не зарегистрируйте dfm в моей системе управления версиями.

Вы можете попытаться сохранить dfm только для чтения, чтобы избежать ошибочной проверки dfm с удаленными элементами управления, но у этого есть недостаток: каждый раз, когда вы пытаетесь сохранить исходный код, IDE будет выдавать ошибку о том, что файл только для чтения файл. Если вы нажимаете Ctrl-S или Shft-Ctrl-S так же часто, как я, это быстро становится неприятностью.

Когда мне нужно изменить dfm, я делаю это в текстовом режиме или устанавливаю элементы управления, вношу изменения в dfm и отправляю. После этого я снова могу удалить элементы управления и просто работать с файлом pas, игнорируя / отменяя любые изменения в dfm.

person Marjan Venema    schedule 22.07.2011
comment
Что я обычно делаю, так это выбираю «Отмена» в диалоговом окне «Ошибка чтения формы», затем нажимаю «ОК», чтобы закрыть следующую форму «Ошибка создания: ...». Это всего два клика или два нажатия клавиши Escape. Дизайнер форм не создается, и я все еще могу редактировать и сохранять файл .pas, не касаясь .dfm. - person Ondrej Kelle; 22.07.2011
comment
@TOndrej: Ага, звучит неплохо. Попробую отменить в следующий раз. - person Marjan Venema; 22.07.2011
comment
Аналогичный вы можете использовать, если у вас, например, несогласованные заголовки событий (это случилось со мной при миграции со старого компонента VirtualTreeView, и в событиях были другие параметры), и вам нужно просто изменить источник и сохранить его. Когда вы нажмете кнопку Save, вы получите сообщение типа The parameters of the method XXX doesn't correspond to its declaration. Do you want to remove it ?, если вы выберете Cancel или нажмете ESC, то ничего не будет удалено, и ваш файл будет успешно сохранен. - person ; 22.07.2011
comment
@TOndrej: Это немного помогает - по какой-то причине я никогда не нажимал эту кнопку. - person MX4399; 23.07.2011

Нет, и в настоящее время для этого нет разумного обходного пути.

Я просил, чтобы в какой-то момент в будущем эта возможность появилась в Delphi; Эти DFM не должны быть уничтожены при их открытии, а несколько модальных диалоговых окон с вопросом, хотите ли вы уничтожить свои DFM, не должны быть поведением по умолчанию при открытии формы, в которой не установлены элементы управления.

В конце концов, есть только одно практическое решение; Установите все элементы управления. Все остальное просто сведет вас с ума.

person Warren P    schedule 22.07.2011
comment
Кто стоял за решением показать тысячу диалогов с одинаковым сообщением?!! - person David Heffernan; 22.07.2011
comment
Я бы не сказал, что кто-то вообще об этом думал. По сути, такие проблемы не влияют на вашу способность демонстрировать тривиальный рабочий процесс Delphi RAD, и такие проблемы становятся серьезными, когда приложения Delphi достигают определенного масштаба и когда вы являетесь разработчиком, работающим с наборами взаимоисключающих компонентов в нескольких проектах. Управление этими наборами компонентов для каждого проекта — чертовски большая проблема Delphi. - person Warren P; 22.07.2011
comment
Да, точно так же, как менеджер программ, вероятно, никогда не используется с проектной группой с 51 большим и маленьким проектом в ней ... Он регулярно падает при сборке, иногда даже тогда, когда вы еще ничего не сделали. Или юниты с большим количеством условных определений, не только в коде, но и в разделе uses. Это дает представление о коде в циклах... - person Marjan Venema; 23.07.2011
comment
@David Heffernan: Добавление травмы к оскорблению [так в оригинале] - в XE - Сохранить изменения? Кнопка «ОК» расположена в том же месте, что и кнопка «Игнорировать» в последних диалогах, что приводит к непреднамеренному сохранению, если вы просто щелкнете по ним. - person MX4399; 23.07.2011
comment
@WarrenP - их установка нецелесообразна - пожалуйста, посмотрите мой комментарий к вопросу - person MX4399; 23.07.2011
comment
Если у вас есть компоненты, которые используются и находятся в разработке, ВЫ ДОЛЖНЫ ИСПОЛЬЗОВАТЬ НЕСКОЛЬКО HIVE РЕГИСТРОВ для стабильных и нестабильных сред (запустите bds.exe -RBDS_ALT). Тогда у вас не будет этой проблемы. Задайте еще вопрос о настройках для разработки компонентов, если хотите. В этих сценариях разработки компонентов есть решения и рабочие процессы, которые работают лучше, чем отсутствие установки компонентов. - person Warren P; 23.07.2011
comment
@WarrenP: я попробовал bds.exe -RBDS_ALT, и он ничего не делает - BDS не запускается. Справочная система не информативна по этому поводу - не могли бы вы помочь? - person MX4399; 27.07.2011
comment
Если bds не запускается и даже не появляется заставка, вы запускали из папки, где находится BDS.exe, или BDS.exe был в вашем пути? Попробуйте запустить полный путь: C:\Program Files\Embarcadero\RAD Studio\8.0\bin\bds.exe -RBDS_ALT с помощью ярлыка. - person Warren P; 27.07.2011