как удалить форму в делфи
Корректно удалить ненужную форму из проекта
Помощь в написании контрольных, курсовых и дипломных работ здесь.
Как удалить форму из проекта
Как правильно удалить ненужную форму? И баттоны на другой форме? Я удалила, но после запуска они.
как полностью удалить форму из проекта?
как полностью удалить форму из проекта?
Удалить ненужную часть из переменной
пользователь может передать в переменной такое значение как http://vk.com/idxxxxxxx.
где-то осталось упоминание модуля в uses другого. Remove from Project удаляет из файла проекта. Сделай Build вместо Compile, тогда ошибка об отсутствии модуля будет главной и единственной
Добавлено через 27 минут
Search > Find in files > поможет найти его упоминание в модулях проекта
Не могу удалить ненужную полосу в шаблоне
что то я совсем запутался, или просто торможу. уже больше часа не могу удалить ненужную полосу в.
Как удалить работаущий проект нажав кнопку на форму этого проекта?
как удалить работаущий проект нажав кнопку на форму этого проекта
Визуальный редактор NetBeans не позволяет удалить ненужную переменную
Кидаем в визуальном редакторе на форму компонент. В коде появляется ссылка. Удаляем с формы этот.
Удалить ненужную информацию в конце файла, не создавая другой файл
Молжа ли удалить конец файла(удаление ненужной информации в конце файла)? не создавая другой файл.
HTLM/PDF Документ. Как удалить ненужную «инфу» в HTLM редакторе или другим способом
Столкнулся с проблемой удаления «лишней» инфы из HTML/PDF документа. В моём случае это покупки и.
Не корректно создаётся шаблон проекта в Visual Studio 2017
Раньше активно пользовался шаблонами проекта в VS 2013. Тогда они создавались корректно, но в VS.
Как удалить форму в делфи
Редкая программа обходится одной формой. Мы можем с лёгкостью создавать дополнительные формы Delphi, предоставляющие возможность, например, вести диалог с пользователем, принимать и выводить любую необходимую информацию. В этом уроке научимся создавать несколько форм Delphi дополнительно к основной.
Все новые формы автоматически заносятся в разряд автосоздаваемых, то есть в начале работы программы они будут автоматически создаваться сразу, одновременно с первой, главной Формой проекта. Нам не придётся этим заниматься в программе, но одновременное создание многих форм занимает ресурсы и время программы. Поэтому предлагаю сразу научиться создавать нужные формы только в нужный момент.
Если же мы перевели дополнительные Формы в разряд доступных, то перед каждым вызовом такой Формы необходимо делать проверку на существование Формы (оператором Assigned) таким образом:
if (not Assigned(Form2)) then // проверка существования Формы (если нет, то
Form2:=TForm2.Create(Self); // создание Формы)
Form2.Show; // (или Form2.ShowModal) показ Формы
Теперь разберёмся в разнице между обычными и модальными Формами. Обычные Формы позволяют свободно переходить между всеми Формами, находящимися в данный момент на экране. Модальная Форма в момент вызова блокирует переход между Формами проекта до тех пор, пока не будет закрыта, и работа возможна только в ней.
При попытке компилирования программы, содержащей вызов второй формы, Delphi выдаст такой запрос:
означающий:
Форма Form1 содержит вызов формы Form2, которая объявлена в модуле Unit2, но который отсутствует в списке используемых модулей. Вы хотите добавить его? Нужно разрешить, и в начале модуля перед директивой
<$R *.dfm>
будет добавлена фраза
uses Unit2;
В принципе, можно добавить её туда перед компиляцией «ручками», и тогда запроса не будет. Но смысл? Отвечаем «Yes» и снова жмём F9.
Первым делом введём в форму операцию её закрытия! Сделать это можно несколькими способами. Возьмём кнопку, напишем «Закрыть» и в обработчике OnClick напишем:
Form2.Close; // В принципе, достаточно просто Close;
Этот же оператор работает при вызове его из меню формы, если меню, конечно, туда ввести (компонент MainMenu на вкладке Standard), о чём в дальнейшем обязательно поговорим!
Теперь же необходимо рассмотреть способ закрытия Формы, который относится именно к модальным формам. Он используется диалоговыми окнами с вопросом, требующим подтверждения, и в других аналогичных случаях. На Форме нужно расположить несколько кнопок, нажатие которых предполагает соответствующий ответ: «Да», «Нет», «Отмена», и т.д.
У каждой кнопки есть свойство ModalResult, среди значений которой mrYes, mrNo, mrCansel и другие (посмотрите!). Значение ModalResult выбранной кнопки передаётся свойству ModalResult Формы. Это свойство отсутствует в списке свойств Формы, которые можно увидеть в Инспекторе Объектов, но программно оно доступно (напишите » Form2 «, поставьте точку и поищите в появившемся списке!).
Нажатие кнопки со значением свойства ModalResult, отличного от mrNone, приводит к закрытию Формы, даже если у кнопки отсутствует обработчик нажатия! Затем можно проанализировать свойство ModalResult Формы и выяснить, какой же ответ на поставленный вопрос дал пользователь:
procedure TForm1.Button1Click(Sender: TObject);
begin
Form2.ShowModal;
if Form2.ModalResult=mrYes then // Этот оператор будет доступен только после закрытия Form2
Form1.Caption:=’Пользователь ответил положительно!’;
end;
В момент закрытия Формы часто в программе необходимо выполнить определённые операции. Делается это в обработчике события OnClose Формы. А теперь рассмотрим блокировку закрытия Формы. Если вдруг понадобится заставить пользователя выполнить определённые действия перед закрытием Формы (это касается как дополнительных форм, так и основной Формы программы), нужно воспользоваться обработчиком события OnCloseQuery. В этом обработчике определена переменная логического типа CanClose. Форма будет закрыта только в том случае, когда
CanClose:=True;
Например, если создать такой обработчик OnCloseQuery основной Формы программы:
procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
CanClose:=False;
end;
то пользователь просто не сможет закрыть программу иначе как через Диспетчер задач Windows!
Как уничтожить форму?
Как правильно уничтожить форму при закрытии?
Помощь в написании контрольных, курсовых и дипломных работ здесь.
Как уничтожить форму?
В программе две формы. По нажатию кнопки на первой открывается вторая. На второй форме есть.
Как уничтожить форму?
У меня тестирующая программа и во время прохождения теста в меню можно выбрать «Перезапустить.
Как уничтожить дочернюю форму при закрытии?
Ребята, помогите) собственно весь вопрос в заголовке! На второй форме находится тет и при закрытии.
Как полностью уничтожить форму, чтобы она забыла что вообще существовала?
Как уничтожить форму и вернуть ее к первоначальному состоянию? Free, FreeAndNil, Destory не дают.
Деструктор я не перегружал, зато делал так:
Хотел все красиво сделать. Если пользователь захочет зайти в справочник снова, то проверяю не создана ли форма (Assigned), если не создана, то создаем. А у меня форма создается только первый раз, потом assigned выдает true и я делаю show без создания формы, что само собой приводит к ошибке.
Добавлено через 4 минуты
у тебя на бумажке записан телефон интересной мадемуазель
ты никак не можешь проверить перед звонком, активен ли еще этот номер или сразу после знакомства она выкинула симку
только если кто-то пришел и в этот момент зачеркал твою бумажку.
переменная содержит адрес созданного объекта, ты не можешь проверить перед обращением..
Добавлено через 31 минуту
Добавлено через 1 минуту
То есть я создаю форму, делаю с ней все, что нужно, потом закрываю и память очищается? И делать ничего не нужно?
Добавлено через 14 минут
Как в итоге лучше поступить, если форма будет вызываться редко.
1. Объявить переменную формы глобально и уничтожать при закрытии. При новом запуске создавать заново.
2. Объявить переменную формы глобально и не уничтожать при закрытии. При необходимости делать Show.
3. Объявить переменную локально и не заморачиваться с уничтожением (будет ли память освобождена в таком случае).
Пока у меня сделано по первой схеме. Но нужно раз и навсегда определиться как лучше.
Работа с Delphi. Работа с доп. формами.
Дополнительные формы Delphi
Мы можем с лёгкостью создавать дополнительные формы Delphi, предоставляющие возможность, например, вести диалог с пользователем, принимать и выводить любую необходимую информацию. В этом уроке научимся создавать несколько форм Delphi дополнительно к основной.
Ввести новую форму в программу проще всего нажатием на кнопочку на главном окне Delphi. Также есть и соответствующая команда меню File>New>Form
Форма создаётся вместе с новым модулем, описывающим её работу. Сразу же покажем, как удалить Форму из программы. Для этого также есть кнопочка, и команда меню Project>Remove from project. Так как Форма создаётся вместе с её модулем, то в появившемся окошке нужно выбрать модуль, который и будет удалён из проекта вместе с Формой:
Таким образом, главная Форма Form1 создаётся сама, а дополнительную форму Form2 мы создадим в программе при необходимости.
Сразу возникает вопрос, а что будет, если попытаться удалить и модуль Unit1, что останется?. Выполните команду Project>Vuew Sourse. В редакторе кода появится новая вкладка, на которой будет отображён код Главного Окна программы. Главное окно невидимо, но управляет всем проектом, и может работать вообще без Форм. Туда можно вставлять свой код, и писать программы, как в классическом Паскале.
Все новые формы автоматически заносятся в разряд автосоздаваемых, то есть в начале работы программы они будут автоматически создаваться сразу, одновременно с первой, главной Формой проекта. Нам не придётся этим заниматься в программе, но одновременное создание многих форм занимает ресурсы и время программы. Поэтому предлагаю сразу научиться создавать нужные формы только в нужный момент.
Во-первых, нужно отменить автосоздание форм. Выполните команду меню Project>Option. В появившемся окошке отображаются Main form(главная Форма), Auto-create (автосоздаваемые) и Available (доступные) формы проекта. Нам нужно перевести Форму из разряда автосоздаваемых в разряд доступных Форм. Делается это нажатием кнопки » > » (обратная операция — нажатием кнопки » Form2.Show; // в случае обычной Формы
Form2.ShowModal; // в случае модальной Формы
Если же мы перевели дополнительные Формы в разряд доступных, то перед каждым вызовом такой Формы необходимо делать проверку на существование Формы (оператором Assigned) таким образом:
if (not Assigned(Form2)) then // проверка существования Формы (если нет, то
Form2:=TForm2.Create(Self); // создание Формы)
Form2.Show; // (или Form2.ShowModal) показ Формы
Теперь разберёмся в разнице между обычными и модальными Формами. Обычные Формы позволяют свободно переходить между всеми Формами, находящимися в данный момент на экране. Модальная Форма в момент вызова блокирует переход между Формами проекта до тех пор, пока не будет закрыта, и работа возможна только в ней.
При попытке компилирования программы, содержащей вызов второй формы, Delphi выдаст такой запрос:
Форма Form1 содержит вызов формы Form2, которая объявлена в модуле Unit2, но который отсутствует в списке используемых модулей. Вы хотите добавить его?
Нужно разрешить, и в начале модуля перед директивой
<$R *.dfm>
будет добавлена фраза
uses Unit2;
В принципе, можно добавить её туда перед компиляцией «ручками», и тогда запроса не будет. Но смысл? Отвечаем «Yes» и снова жмём F9.
Первым делом введём в форму операцию её закрытия! Сделать это можно несколькими способами. Возьмём кнопку, напишем «Закрыть» и в обработчике OnClick напишем:
Form2.Close; // В принципе, достаточно просто Close;
Этот же оператор работает при вызове его из меню формы, если меню, конечно, туда ввести (компонент MainMenu на вкладке Standard), о чём в дальнейшем обязательно поговорим!
Теперь же необходимо рассмотреть способ закрытия Формы, который относится именно к модальным формам. Он используется диалоговыми окнами с вопросом, требующим подтверждения, и в других аналогичных случаях. На Форме нужно расположить несколько кнопок, нажатие которых предполагает соответствующий ответ: «Да», «Нет», «Отмена», и т.д.
У каждой кнопки есть свойство ModalResult, среди значений которой mrYes, mrNo, mrCansel и другие (посмотрите!). Значение ModalResultвыбранной кнопки передаётся свойству ModalResult Формы. Это свойство отсутствует в списке свойств Формы, которые можно увидеть в Инспекторе Объектов, но программно оно доступно (напишите » Form2 «, поставьте точку и поищите в появившемся списке!).
Нажатие кнопки со значением свойства ModalResult, отличного от mrNone, приводит к закрытию Формы, даже если у кнопки отсутствует обработчик нажатия! Затем можно проанализировать свойство ModalResult Формы и выяснить, какой же ответ на поставленный вопрос дал пользователь:
procedure TForm1.Button1Click(Sender: TObject);
begin
Form2.ShowModal;
if Form2.ModalResult=mrYes then // Этот оператор будет доступен только после закрытия Form2
Form1.Caption:=’Пользователь ответил положительно!’;
end;
В момент закрытия Формы часто в программе необходимо выполнить определённые операции. Делается это в обработчике события OnCloseФормы. А теперь рассмотрим блокировку закрытия Формы. Если вдруг понадобится заставить пользователя выполнить определённые действия перед закрытием Формы (это касается как дополнительных форм, так и основной Формы программы), нужно воспользоваться обработчиком события OnCloseQuery. В этом обработчике определена переменная логического типа CanClose. Форма будет закрыта только в том случае, когда
CanClose:=True;
Например, если создать такой обработчик OnCloseQuery основной Формы программы:
procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
CanClose:=False;
end;
то пользователь просто не сможет закрыть программу иначе как через Диспетчер задач Windows
Добавить комментарий Отменить ответ
Для отправки комментария вам необходимо авторизоваться.
Как удалить форму в делфи
Редкая программа обходится одной формой. Мы можем с лёгкостью создавать дополнительные формы Delphi, предоставляющие возможность, например, вести диалог с пользователем, принимать и выводить любую необходимую информацию. В этом уроке научимся создавать несколько форм Delphi дополнительно к основной.
Все новые формы автоматически заносятся в разряд автосоздаваемых, то есть в начале работы программы они будут автоматически создаваться сразу, одновременно с первой, главной Формой проекта. Нам не придётся этим заниматься в программе, но одновременное создание многих форм занимает ресурсы и время программы. Поэтому предлагаю сразу научиться создавать нужные формы только в нужный момент.
Если же мы перевели дополнительные Формы в разряд доступных, то перед каждым вызовом такой Формы необходимо делать проверку на существование Формы (оператором Assigned) таким образом:
if (not Assigned(Form2)) then // проверка существования Формы (если нет, то
Form2:=TForm2.Create(Self); // создание Формы)
Form2.Show; // (или Form2.ShowModal) показ Формы
Теперь разберёмся в разнице между обычными и модальными Формами. Обычные Формы позволяют свободно переходить между всеми Формами, находящимися в данный момент на экране. Модальная Форма в момент вызова блокирует переход между Формами проекта до тех пор, пока не будет закрыта, и работа возможна только в ней.
При попытке компилирования программы, содержащей вызов второй формы, Delphi выдаст такой запрос:
означающий:
Форма Form1 содержит вызов формы Form2, которая объявлена в модуле Unit2, но который отсутствует в списке используемых модулей. Вы хотите добавить его? Нужно разрешить, и в начале модуля перед директивой
<$R *.dfm>
будет добавлена фраза
uses Unit2;
В принципе, можно добавить её туда перед компиляцией «ручками», и тогда запроса не будет. Но смысл? Отвечаем «Yes» и снова жмём F9.
Первым делом введём в форму операцию её закрытия! Сделать это можно несколькими способами. Возьмём кнопку, напишем «Закрыть» и в обработчике OnClick напишем:
Form2.Close; // В принципе, достаточно просто Close;
Этот же оператор работает при вызове его из меню формы, если меню, конечно, туда ввести (компонент MainMenu на вкладке Standard), о чём в дальнейшем обязательно поговорим!
Теперь же необходимо рассмотреть способ закрытия Формы, который относится именно к модальным формам. Он используется диалоговыми окнами с вопросом, требующим подтверждения, и в других аналогичных случаях. На Форме нужно расположить несколько кнопок, нажатие которых предполагает соответствующий ответ: «Да», «Нет», «Отмена», и т.д.
У каждой кнопки есть свойство ModalResult, среди значений которой mrYes, mrNo, mrCansel и другие (посмотрите!). Значение ModalResult выбранной кнопки передаётся свойству ModalResult Формы. Это свойство отсутствует в списке свойств Формы, которые можно увидеть в Инспекторе Объектов, но программно оно доступно (напишите » Form2 «, поставьте точку и поищите в появившемся списке!).
Нажатие кнопки со значением свойства ModalResult, отличного от mrNone, приводит к закрытию Формы, даже если у кнопки отсутствует обработчик нажатия! Затем можно проанализировать свойство ModalResult Формы и выяснить, какой же ответ на поставленный вопрос дал пользователь:
procedure TForm1.Button1Click(Sender: TObject);
begin
Form2.ShowModal;
if Form2.ModalResult=mrYes then // Этот оператор будет доступен только после закрытия Form2
Form1.Caption:=’Пользователь ответил положительно!’;
end;
В момент закрытия Формы часто в программе необходимо выполнить определённые операции. Делается это в обработчике события OnClose Формы. А теперь рассмотрим блокировку закрытия Формы. Если вдруг понадобится заставить пользователя выполнить определённые действия перед закрытием Формы (это касается как дополнительных форм, так и основной Формы программы), нужно воспользоваться обработчиком события OnCloseQuery. В этом обработчике определена переменная логического типа CanClose. Форма будет закрыта только в том случае, когда
CanClose:=True;
Например, если создать такой обработчик OnCloseQuery основной Формы программы:
procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
CanClose:=False;
end;
то пользователь просто не сможет закрыть программу иначе как через Диспетчер задач Windows!
Работа с файлами в Delphi В начало урока Создание подпрограмм в Delphi
Потом, для того, чтобы работать с дополнительной формой я пишу form2.show;
Код, стоящий в обработчике нажатия открывающей форму 2 кнопки, выглядит следующим образом, как и у вас написано:
Form2:=TForm2.Create(Self);
(кстати, я довольствуюсь одной это строкой, поскольку моя программа организована так, что повторно нажать на кнопку вызова формы 2 не получится, я просто прячу форму 1 после вызова).
Вот. Значит, всё работает замечательно.
По моему замыслу при вызове формы 2 у меня должна ещё и открываться и форма 3 (то есть при нажатии кнопки с формы 1 вызывается две формы, а не одна). (Кстати, на самом деле не форма 3, а форма 5, просто я так написал, чтобы вам было легче читать и понять меня, это не суть важно, мы будем называть её формой 3).
Форма 3 является модальной, это тоже не то, о чём я хотел говорить.
Проблема была в следующем, программа, когда натыкалась на строку
Form3:=TForm3.Create(Self);
Возникала ошибка Access violation.
Я долго парился, в чём же тут дело, пробовал много вариантов, но ошибка не хотела уходить.
И тут я посмотрел на слово CREATE, и вспомнил, что у меня стоит обработчик события создания формы 3 (FormCreate). Я пошёл, закомментировал его тело с помощью комбинации //, то есть у меня этот обработчик после этого фактически перестал выполняться, ибо выполняться было нечему. После этого всё заработало.
Вопросы такие:
1. Обработчик события создания формы выполняется раньше её создания??
2. Что делать в том случае, если всё-таки мне необходимо выполнить комплекс каких-либо действий при создании формы с помощью обработчика FormCreate, а создаваемую форму я создаю посредством конструкции Form3:=TForm3.Create(Self);
Заранее спасибо за ответ.
Автор, добавлено 2.01.11, 17:32:48
Не совсем понятно, как у вас вызываются эти формы 2 и 3. Я попробовал. Кнопкой на первой форме создаю и вызываю обе. И при событии onCreate третьей формы пишу
Caption:=’Изменение заголовка’; // Не важно что
Почему-то всё отрабатывает, при нажатии на кнопку выскакивают обе дополнительные формы, третья с изменённым заголовком. Каким образом вы прячете первую форму, может, дело в этом? Я просто написал перед вызовом форм Form1.Visible:=False. Или всё же используете объекты третьей формы, которые пока не существуют.
Попробуйте вместо onCreate выполнять действия в onActivate третьей формы. Вадим Мошев, добавлено 2.01.11, 18:04:27
Сейчас объясню, как вызываю формы.
У меня есть форма 1. На ней стоит кнопка. При её нажатии у меня создаётся и показывается форма 2.
По моему замыслу, когда я с формы 1 вызываю 2 и 3-ю, пользователь программы сначала должен поработать с 3-й формой, причём во время работы с ней 2-я форма должна быть ему недоступна. И только когда работа с 3-й формой завершена, он начинает работать со второй. То есть, на момент работы с 3-й формой работа всей остальной программы должна быть заблокирована.
ДЛя того, окна имели кнопку на панели задач, нужно изменить стиль окна. Вот как это делается, на примере второй формы:
type
TForm2 = class(TForm)
private
< Private declarations >
procedure CreateParams(var Params: TCreateParams);
override;
.
procedure TForm2.CreateParams(var Params: TCreateParams);
begin
inherited CreateParams(Params);
with Params do
ExStyle := ExStyle or WS_EX_APPWINDOW;
end; Мария, добавлено 27.06.11, 22:30:16
кажется, я не совсем правильно описала задачу
в моей программе есть 2 формы, при нажатии на кнопку на первой форме открывается вторая форма а первая скрывается,так вот, первая форма TForm1 = class(TForm), т.е. задана как главная форма, её я могу менять добавляя на неё всякие элементы
( кнопки, мемо и тд) и меняя их размер и положение, а вторую форму после создания я менять не могу, она вылезает в программе всегда в первоначальном виде, к ней у меня нет доступа, как исправить? помогите пожалуйста Автор, добавлено 27.06.11, 22:53:05
Так вы хотите делать это программно, т.е. из первой формы создавать во второй форме компоненты динамически?
Тогда нужно создавать компоненты как переменные, и для ссылки на них использовать не Form2 а Unit2. Вот пример создания компонента TMemo:
procedure TForm1.Button2Click(Sender: TObject);
begin
Unit2.Memo:=TMemo.Create(Self);
Unit2.Memo.Parent:=Form2;
Unit2.Memo.Top:=0;
Unit2.Memo.Left:=0;
Unit2.Memo.Visible:=True;
end;
Что мешает написать на второй форме то же самое:
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Grids, ExtCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
Label1: TLabel;
Button3: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
private
< Private declarations >
public
< Public declarations >
end;
uses Unit21, Unit31;
<$R *.dfm>
procedure TForm1.Button1Click(Sender: TObject);
begin
try
Hide;
form2.Show;
show;
finally
form2.Free;
end;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
try
Hide;
form3.Show;
show;
finally
form3.Free;
end;
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
close;
end;
Application.Initialize;
Application.CreateForm(TMainForm, MainForm);
Application.CreateForm(TTitleForm, TitleForm);
TitleForm.ShowModal;
Application.Run;
С другими формами мне вообще непонятно. Кода нет, о чём гадать?
Павел, добавлено 17.01.12, 15:24:53
Всё, проблемы решились.Access violation at adress выходило из-за ошибки в TitleForm.FormCreate.А во втором случае неправильно был установлен фокус. Елена, добавлено 28.01.12, 20:30:24
не совсем по теме вопрос. подскажете.может быть какие задачи можно реализовать в делфи в качестве научной работы в 11 классе? чтобы не сверх сложно, но графику можно было применить:) Автор, добавлено 29.01.12, 10:07:05
Ой, я не в курсе, что в 11 классе научные работы выполняют! Вот одной студентке помогал домашнее задание делать: рассчитать функцию f=n!/n^n (n факториал делить на n в степени n). Но это без графики, одни расчёты. А с графикой можно придумать, например, сделать компьютерную модель чего-либо, чтобы как-то двигалось, менялось, взаимодействовало. Например, город. Несколько улиц. На перекрёстках светофоры. Работают с определёнными интервалами переключения. Сделать модель движения транспорта, и можно анализировать оптимальные интервалы в зависимости от количества машин в городе. (Машина на перекрёстке меняет направление движения случайным образом.) Это будет действительно научная работа. Сам придумал только что! Так что не взыщите, я же не препод. Аноним, добавлено 10.02.12, 16:03:48
можете помочь. как сделать, что бы при при нажатие на кнопку открывалась следущая форма, если в edit написан определенный текст? а то я уже кучу сайтов облазил и нигде найти не могу(
примерно так:
если edit1.text=’1337(например)’ то Form2.show Автор, добавлено 10.02.12, 19:49:41
Ну, всё вы уже сами написали. Создаём обработчик нажатия на кнопку и там пишем:
У меня программы состоит из двух форм, я хочу сделать так что, когда одно форма находиться рядом с другой они объединялись в одну т.е. вплотную прилегали рамка к рамке и если я буду двигать одну то и другая должна двигаться
procedure TForm2.WMSysCommand;
begin
case Msg.CmdType of
SC_MINIMIZE:
begin
end;
SC_MAXIMIZE:
begin
form2.Top:=form1.Top+25;
form2.Height:=form1.Height-25;
end;
end;
inherited;
end;
1й пример срабатывает только 1й раз далее если форму сворачивать и разворачивать то он перестаёт работать. Второй просто не работает.
procedure TForm2.FormCanResize(Sender: TObject; var NewWidth,
NewHeight: Integer; var Resize: Boolean);
begin
if Top СанЁк, добавлено 20.06.12, 02:52:21
Наконец то русским языком написано. Спасибо большое! Евгений, добавлено 27.03.13, 05:51:32
Здравствуйте подскажите пожалуйста у меня возникла проблема.
Я пытаюсь сделать в программе автозапуск с системой по CheckBox1 точнее сделал, но он работает только с главной формы, а у меня в программе настройки находятся на другой форме при этом автозапуск не работает подскажите как решить проблему? Автор, добавлено 27.03.13, 07:23:07
Я пытаюсь выделить инфу из вашего сообщения и. не могу. Ничего не понятно.
procedure TSetings1.CheckBox5Click(Sender: TObject);
var
reg: TRegistry;
begin
reg := TRegistry.create;
reg.rootkey := hkey_current_user;
reg.lazywrite := false;
If CheckBox1.Checked then
begin
If reg.OpenKey(‘Software\Microsoft\Windows\CurrentVersion\Run’, true) then
begin
reg.WriteString(‘progrmma’, application.exename);
reg.CloseKey
end;
end
else
begin
If reg.OpenKey(‘Software\Microsoft\Windows\CurrentVersion\Run’, false) then
begin
if reg.ValueExists(‘progrmma’) then
reg.DeleteValue(‘progrmma’);
reg.CloseKey;
end;
end;
reg.free;
end;
Setings1 форма 3
Clock1 Главная форма программы
Программа компилируется, но автозапуск не происходит Евгений, добавлено 27.03.13, 11:52:34
Имя программа это Clockv210
Евгений, добавлено 27.03.13, 11:56:03
Извиняюсь с кодом напутал
Вот верный
procedure TSetings1.CheckBox5Click(Sender: TObject);
var
reg: TRegistry;
begin
reg := TRegistry.create;
reg.rootkey := hkey_current_user;
reg.lazywrite := false;
If CheckBox1.Checked then
begin
If reg.OpenKey(‘Software\Microsoft\Windows\CurrentVersion\Run’, true) then
begin
reg.WriteString(‘Clockv210’, application.exename);
reg.CloseKey
end;
end
else
begin
If reg.OpenKey(‘Software\Microsoft\Windows\CurrentVersion\Run’, false) then
begin
if reg.ValueExists(‘Clockv210’) then
reg.DeleteValue(‘Clockv210’);
reg.CloseKey;
end;
end;
reg.free;
end;
Setings1 форма 3
Clock1 Главная форма программы
Программа компилируется, но автозапуск не происходит Автор, добавлено 27.03.13, 12:45:23
Ну вот, сразу бы так.
procedure TForm1.Button1Click(Sender: TObject);
begin
TForm1.FormCloseQuery(TObject, True);
Close;
end;
end.
Пишет: Incompatible types:’TObject’ and ‘Class reference’ и указывает на TObject. Что нужно сделать, чтобы заработало? Автор, добавлено 24.04.13, 15:08:43
Так вообще делать нельзя. Процедура CloseQuery вызывается при закрытии Формы, её не нужно вызывать вручную. И просто в этой процедуре прописываете условие закрытия Формы, для этого приравниваете CanClose True или False. В вашем случае вводите глобальную переменную типа Boolean, нажатием кнопки меняете её значение, и пытаетесь закрыть Форму. А в процедуре CloseQuery анализируете вашу переменную, или просто приравниваете к ней CanClose:
var MyClose: Boolean=False;//глобальная переменная
procedure TForm1.Button1Click(Sender: TObject);
begin
MyClose:=not MyClose;
Close;
end;
Пытался сделать копию класса:
TMyForm = class(TForm)
Memo2: TMemo;
private
< Private declarations >
public
UserId: Integer;
< Public declarations >
end;
var
MyForm: TMyForm;
i: Integer;
//создаем форму, чтоб инициализировать счетчик
procedure TForm1.FormCreate(Sender: TObject);
begin
i:=0;
end;
//нажимаем кнопку для создания новой формы и присвоения ей номера
procedure TForm1.ButtonClick(Sender: TObject);
begin
FormChat:=TMyForm.Create(Application);
FormChat.UserId:=i;
FormChat.Show;
Inc(i);
end;
Но почему-то выдает Resource TMyForm not found.
Подскажите, что я сделал не так, и что нужно сделать, чтоб эта форма была независимой от первой (в плане сворачивания в панель задач) и отдельной кнопкой на панели задач?
P.S.: Если я знаю Handle объекта, то можно ли обратиться к этому объекту по Handle?
Спасибо.
Павел, добавлено 11.11.13, 16:19:30
Возможно новых свойств в форме будет больше. Павел, добавлено 11.11.13, 16:33:33
к P.S.
Точнее не объекта, а процесса. Правильно ли я понял, что у всего, что создано в Application есть свой Handle? У формы, у Thread`а, у Socket`а. Автор, добавлено 11.11.13, 17:32:56
У каждого окна свой Handle. В данном случае имеется в виду, что окно это не только Форма.
Насчёт сокетов ничего сказать не могу, я далёк от этого. Павел, добавлено 12.11.13, 08:19:10
И снова я попытаюсь вернуться к моим баранам. 🙂
Я все-таки сделал так, чтоб на панели задач были отдельные кнопки для каждого окна.
Однако они не совсем отдельные, как могло бы показаться на первый взгляд.
При сворачивании основной формы (основного окна), сворачиваются и исчезают с панели задач и остальные дочерние кнопки.
Как мне от этого избавиться?
Буду премного благодарен за помощь. Павел, добавлено 12.11.13, 08:44:52
И снова это я. 🙂
А вопрос на этот раз такой: Как мне при создании n-ного количества форм через
var
FormChat: TForm;
обратиться ко всем созданным формам поочередно (неизвестно, сколько будет созданных форм)? FindComponent для самих форм не подходит, т.к. он только с визуальными компонентами внутри формы работает. Автор, добавлено 12.11.13, 13:42:58
1. Так как вы сделали, наверное никак. При сворачивании главной Формы другие свернутся. Значит, что? Первую Форму не нужно использовать! Начинайте сразу со второй, она и будет главная. Тогда при её сворачивании остальные останутся.
2. А по имени не пробовали, свойство Name. При создании форм задайте им имена, да? Павел, добавлено 12.11.13, 14:21:24
Спасибо за советы, но я на citforum`е попросил помощи по данным вопросам.
По поводу первого вопроса мне посоветовали то же самое.
По поводу второго есть такое решение (по перебору всех форм):
Сами формы перечислены в списке Screen.Forms
В частности пример:
procedure TForm1.Button1Click(Sender: TObject);
var
I: Integer;
s: string;
begin
for I := 0 to Screen.FormCount-1 do
begin
Memo1.Lines.Add(Screen.Forms[I].Name);
Screen.Forms[I].Height:=600;
end;
end;
(может кому и пригодится. )
Мне осталось только в динамически создаваемые формы научиться добавлять несколько свойств, чтоб можно было там хранить какие-либо идентификационные данные. Павел, добавлено 12.11.13, 14:23:41
Точнее на cyberforum`е. Автор, добавлено 12.11.13, 14:47:04
Ну задайте несколько переменных при конструировании формы, не пойму в чём проблема. Павел, добавлено 12.11.13, 15:05:51
Мне нужно, чтоб можно было обращаться к этим данным как-то так: 🙂
Screen.Forms[I].MyVar1:=num1;
if (Screen.Forms[I].MyVar2=num2) then
begin
что-то делать
end;
А еще я у вас на сайте видел, что есть такие типы переменных, как Point.
Можно ли их приспособить под формы?
Что-то вроде этого:
User32^[4]:=Screen.Forms[I];
и потом использовать:
User32^[4].Height:=600;
Чтоб таким образом сокращать имена форм и без перебора всех форм обращаться по поинтам?
Спасибо за терпение. 🙂 Автор, добавлено 12.11.13, 15:16:56
1. Вы что никогда к переменным других форм не обращались? Ну да, как-то так.
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Memo1: TMemo;
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
< Private declarations >
public
< Public declarations >
end;
TFChat = class(TForm)
Memo2: TMemo;
Button2: TButton;
procedure Button2Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
< Private declarations >
public
< Public declarations >
end;
var
Form1: TForm1;
FChat: TFChat;
i: Integer;
procedure TForm1.FormCreate(Sender: TObject);
begin
i:=0;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
FChat:=TFChat.CreateNew(Application);
FChat.Name:=’User’+IntToStr(i);
Form1.Memo1.Lines.Add(FChat.Name);
FChat.OnClose:=FChat.FormClose;
//создаю динамические объекты на динамической форме
FChat.Memo2:=TMemo.Create(FChat);
FChat.Memo2.Parent:=FChat;
FChat.Button2:=TButton.Create(FChat);
FChat.Button2.Parent:=FChat;
FChat.Button2.Top:=100;
procedure TFChat.FormCreate(Sender: TObject);
begin
Form1.Memo1.Lines.Add(‘FormCreate’+(Sender as TFChat).Name);
end;
Что мне надо написать, чтоб в форму с именем User0 в Memo2 добавилась строчка «bla-bla-bla»?
Пытался сделать так: User2.Memo2.Lines.Add(‘bla-bla-bla’); но не прокатило, т.к. User2 в программе четко нигде не описано.
Спасибо. Павел, добавлено 14.11.13, 17:28:41
Поправочка.
Что мне надо написать, чтоб в форму с именем User2 в Memo2 добавилась строчка «bla-bla-bla»?
Хотя цифра после User может быть любая. Вплоть до 1000. Автор, добавлено 14.11.13, 17:41:18
Я всё же когда-то создавал формы как элементы массива (динамического, конечно). Тогда нет необходимости добавлять их в секцию uses, а обращаться как к переменной.
Так-то вот просто добавьте новую форму в проект, и при попытке использовать её система добавит её в uses. Динамически сделать это наверное не удастся. Так что пока я вижу только способ с массивом, или другой переменной типа TForm.
В принципе, была у вас мысль с указателями, я сразу не понял, но если бы получилось, наверное, наилучший вариант. Автор, добавлено 14.11.13, 17:47:40
Всё, сегодня уже не могу отвечать. До завтра. Степан, добавлено 7.02.14, 19:41:12
procedure TForm1.N11Click(Sender: TObject);
begin
Form1.Hide;
Form2.Show;
end;
У меня на delfi7 пишет ошибку на строчке открытия новой формы Form2.Show; Можете сказать почему так? Автор, добавлено 7.02.14, 19:54:11
Какая ошибка?
Может, у вас эта форма ещё не существует, то есть метод Create ещё не работал. Так бывает, когда форма в свойствах приложения убрана из разряда автосоздаваемых. И это правильно. Но создавать эту форму нужно тогда так:
if (not Assigned(Form2)) then // проверка существования Формы (если нет, то
Form2:=TForm2.Create(Self); // создание Формы)
Form2.Show;
Кстати, всё это описано в тексте статьи.