как открыть другую форму в delphi

Создание, закрытие и вызов форм

Рождение, жизнь и гибель формы.

Перевод одноимённой статьи с сайта delphi.about.com )

Как сделать, чтобы форма закрывалась при нажатии Esc?

Для начала необходимо установить свойство формы KeyPreview в True. А потом уже можно отлавливать «Esc»:

procedure TForm1.FormCreate(Sender: TObject);

(Sender: TObject; var Key: Char);

if key = #27 then Close;

Можно ли создать форму, которая получает дополнительные параметры в методе Сreate?

Просто замените конструктор Create класса Вашей формы.

uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs;

TForm2 = class (TForm)

constructor CreateWithCaption(aOwner: TComponent; aCaption: string );

constructor TForm2.CreateWithCaption(aOwner: TComponent; aCaption: string );

procedure TForm1.Button1Click(Sender: TObject);

Unit2.Form2 := Unit2.TForm2.CreateWithCaption(Application, ‘My Caption’ );

Как создать и вызвать модальную форму?

В каком порядке происходят события при создании и показе окна?

При создании окна обработчики событий выполняются в следующем порядке:

Copyright © 1996 Epsylon Technologies

Взято из FAQ Epsylon Technologies

Как использовать форму из DLL

Необходимо, чтобы дочерняя форма не активизировала родительское окно

Сделайте родительским окном рабочий стол.

procedure TForm2.CreateParams( VAR Params: TCreateParams);

Можно ли динамически менять какая форма считается главной в приложении во время работы программы?

Можно, но только во время загрузки приложения. Чтобы сделать это выберите «View->Project Source» и измените код инициализации приложения, так что порядок создания форм зависил от какого-то условия.

Примечание: Вам придется редактировать этот код, если Вы добавите в приложение новые формы.

Условие создания главной формы

Существует ли в Delphi возможность создавать главную форму по условию? Я хочу использовать условие IF (в зависимости от передаваемого параметра) для того, чтобы определить какая форма будет главной при старте приложения. Фактически «другую» форму НЕ нужно будет загружать.

Как сделать окно системно-модальным?

Используйте функцию Windows API SetSysModalWindow(). Код ниже демонстрирует технологию работы с этой функцией. В любой момент времени может быть возможен только один модально-системны диалог, чей дескриптор возвращается функцией SetSysModalWindow(). Вам необходимо запомнить возвращаемую функцией величину для того, чтобы завершить показ диалога таким образом. Вот как примерно это должно выглядеть:

Форма изменяющая размеры без заголовка

Форма изменяющая размеры без заголовка.

Нужно выставить свойство формы BorderStyle := bsNone;

TForm1 = class (TForm)

procedure CreateParams( var Params: TCreateParams); override ;

procedure TForm1.CreateParams( var Params: TCreateParams);

Источник

Как открыть другую форму в delphi

Редкая программа обходится одной формой. Мы можем с лёгкостью создавать дополнительные формы Delphi, предоставляющие возможность, например, вести диалог с пользователем, принимать и выводить любую необходимую информацию. В этом уроке научимся создавать несколько форм Delphi дополнительно к основной.

как открыть другую форму в delphi. Смотреть фото как открыть другую форму в delphi. Смотреть картинку как открыть другую форму в delphi. Картинка про как открыть другую форму в delphi. Фото как открыть другую форму в delphi

Все новые формы автоматически заносятся в разряд автосоздаваемых, то есть в начале работы программы они будут автоматически создаваться сразу, одновременно с первой, главной Формой проекта. Нам не придётся этим заниматься в программе, но одновременное создание многих форм занимает ресурсы и время программы. Поэтому предлагаю сразу научиться создавать нужные формы только в нужный момент.

Если же мы перевели дополнительные Формы в разряд доступных, то перед каждым вызовом такой Формы необходимо делать проверку на существование Формы (оператором Assigned) таким образом:

if (not Assigned(Form2)) then // проверка существования Формы (если нет, то
Form2:=TForm2.Create(Self); // создание Формы)
Form2.Show; // (или Form2.ShowModal) показ Формы

Теперь разберёмся в разнице между обычными и модальными Формами. Обычные Формы позволяют свободно переходить между всеми Формами, находящимися в данный момент на экране. Модальная Форма в момент вызова блокирует переход между Формами проекта до тех пор, пока не будет закрыта, и работа возможна только в ней.

При попытке компилирования программы, содержащей вызов второй формы, Delphi выдаст такой запрос:

как открыть другую форму в delphi. Смотреть фото как открыть другую форму в delphi. Смотреть картинку как открыть другую форму в delphi. Картинка про как открыть другую форму в delphi. Фото как открыть другую форму в 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;

Кстати, всё это описано в тексте статьи.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *