ANTICHAT — форум по информационной безопасности, OSINT и технологиям
ANTICHAT — русскоязычное сообщество по безопасности, OSINT и программированию.
Форум ранее работал на доменах antichat.ru, antichat.com и antichat.club,
и теперь снова доступен на новом адресе —
forum.antichat.xyz.
Форум восстановлен и продолжает развитие: доступны архивные темы, добавляются новые обсуждения и материалы.
⚠️ Старые аккаунты восстановить невозможно — необходимо зарегистрироваться заново.
 |
|

20.05.2010, 16:49
|
|
Участник форума
Регистрация: 18.04.2009
Сообщений: 120
Провел на форуме: 435863
Репутация:
80
|
|
Если ты повторишь эту процедуру - создашь новый компонент и эта переменная будет указывать уже на новый, а старый "потеряется"
Вот тут-то ты и не прав.
Кинь на форму один button:
Код:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
a, y: integer;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
a := 10;
y := 10;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
x: TEdit;
begin
x := TEdit.Create(self);
x.Parent := Form1;
x.Top := y;
x.Left := a;
a := a + 20;
y := y + 20;
end;
end.
И клацни раз 5 на кнопку...И ты увидишь 5 текстовых полей, а не 1, которое удаляет предыдущее и пересоздается.
|
|
|

20.05.2010, 16:53
|
|
Участник форума
Регистрация: 20.12.2008
Сообщений: 277
Провел на форуме: 828081
Репутация:
84
|
|
Ты тролль?
Где я написал что старый компонент удалится?
Потеряется ссылка на него!
А конкретнее х будет указывать уже на новый компонент, а к старому ты никак не сможешь обратится, только по имени
Почитай про модель объектных ссылок в дельфи
|
|
|

20.05.2010, 16:54
|
|
Участник форума
Регистрация: 18.04.2009
Сообщений: 120
Провел на форуме: 435863
Репутация:
80
|
|
Нет, эльф 80-го уровня
Чуть тупонул. Всё, с этим вопросом я разобрался. Спасибо, понял.
|
|
|

20.05.2010, 17:19
|
|
Участник форума
Регистрация: 18.04.2009
Сообщений: 120
Провел на форуме: 435863
Репутация:
80
|
|
Как положено - разобрался сам, помоги другим. Потому чуток пораскинув мозгами и почитав дополнительную литературу, пришел к выводу, что работать с компонентами не обязательно через массив.
Можно сделать по такой схеме:
1. Создаём компонент.
2. Заносим в объект TList указатель на этот компонент.
3. Для обращения к любому из компонентов вытягиваем указатель из TList.
Таким образом мы не ограничиваемся размером массива.
Покажу на примере чуть выше (кинем на форму не одну кнопку, а две. Одна будет создавать поля, а другая - поменяет текст в определенном поле):
Код:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
a, y: integer;
ListComp: TList;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
ListComp := TList.Create;
a := 10;
y := 10;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
x: TEdit;
begin
x := TEdit.Create(self);
x.Parent := Form1;
x.Top := y;
x.Left := a;
ListComp.Add(x);
a := a + 20;
y := y + 20;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
TEdit(CompList.Items[2]).Text := 'lol'; //Эта строка меняет текст в третьем текстовом поле. Номер текстового поля указываем в CompList.Items[номер полня] (счет ведется с нуля).
end;
end.
Создаём первой кнопкой несколько полей (больше, чем 3) и клацаем вторую кнопку - меняется содержимое третьего поля.
Последний раз редактировалось Sams; 20.05.2010 в 17:21..
|
|
|

20.05.2010, 18:20
|
|
Участник форума
Регистрация: 18.04.2009
Сообщений: 120
Провел на форуме: 435863
Репутация:
80
|
|
Такс, с MDI окнами тоже разобрался.
Создаём две формы - Form1, Form2.
Form1.FormStyle := fsMDIForm;
Form2.FormStyle := fsMDIChild;
В Unit1, в разделе uses дописываем Unit2:
uses
......, Unit2;
На Form1 кидаем две кнопки (первая создаёт окна, вторая меняет заголовок определенного ока):
Код:
procedure TForm1.Button1Click(Sender: TObject);
begin
Form2 := TForm2.Create(Owner);
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
Form1.MDIChildren[2].Caption := 'Woohoo'; // Номер MDI окна указываем тут MDIChildren[номер окна]
end;
Обновил первый пост.
Тему можно закрывать.
|
|
|
|
 |
|
Похожие темы
|
| Тема |
Автор |
Раздел |
Ответов |
Последнее сообщение |
|
Books
|
PSalm69 |
Избранное |
273 |
13.02.2016 01:24 |
|
Литература Delphi
|
Sams |
С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby |
2 |
19.03.2010 19:46 |
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|