Модераторы: Poseidon, Snowy, bems, MetalFan

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> А как можно програмно создавать..... 
:(
    Опции темы
User
Дата 4.2.2005, 09:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 213
Регистрация: 5.11.2004

Репутация: нет
Всего: нет



У меня есть Form1. На ней лежит кнопка Button1. Как можно сделать что бы при запущенной программе, при нажатии на кнопку Button1, создавался обьект Edit1, Edit2 и т.д. - c определенными координатами по X, Y (но так что бы они скажем выстраивались в строку или в столбец); или Label1, Label2 и т.д.

Не где не встречал на такой вопрос ответа. Если можно то приведите попадробнее код. Это важно для меня, что бы разобраться. - Для вас я надеюсь, кто с этим работал не составит труда..
Заранее спасибо! smile
PM MAIL WWW   Вверх
User
Дата 4.2.2005, 10:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 213
Регистрация: 5.11.2004

Репутация: нет
Всего: нет



Пример если можно приведите
PM MAIL WWW   Вверх
Snowy
Дата 4.2.2005, 12:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 192
Всего: 484



По вопросу:
Код

var
 y: integer=100;

procedure TForm1.Button1Click(Sender: TObject);
begin
 with TEdit.Create(Form1) do begin
   Top:=y; Left:=Button1.Left;
   ParentWindow:=Self.Handle;
   y:=y+Height+4;
 end;
end;


Это сообщение отредактировал(а) Alex - 4.2.2005, 12:49
PM MAIL   Вверх
Alex
Дата 4.2.2005, 12:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4147
Регистрация: 25.3.2002
Где: Москва

Репутация: 80
Всего: 162



Модератор: все сообщения не относящиеся к вопросу удалены.


--------------------
Написать можно все - главное четко представлять, что ты хочешь получить в конце. 
PM Skype   Вверх
User
Дата 4.2.2005, 12:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 213
Регистрация: 5.11.2004

Репутация: нет
Всего: нет



И для Label как ?



PM MAIL WWW   Вверх
~FoX~
Дата 4.2.2005, 12:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


НЕ рыжий!!!
****


Профиль
Группа: Участник Клуба
Сообщений: 2819
Регистрация: 8.10.2003
Где: Зеленоград

Репутация: 13
Всего: 68



User
DRKB, FAQ, поиск, help, etc.
Динамическое создание объектов. Создание объектов run-time или что то в этом роде.
Ну хватит уже лениться то.

Код

........
with TLabel.Create(Form1) do begin
........



--------------------
user posted image
…множественность никогда не следует полагать без необходимости…
PM MAIL WWW ICQ Jabber   Вверх
NiJazz
Дата 4.2.2005, 13:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Jazz coder
****


Профиль
Группа: Экс. модератор
Сообщений: 2286
Регистрация: 10.8.2003
Где: Москва

Репутация: 6
Всего: 23



Код

procedure TForm1.Button1Click(Sender: TObject);
var EditList: array[1..5] of TLabeledEdit;
   caps: array[1..5] of string;
   i: integer;
   t: integer;
begin
caps[1] := 'First';
caps[2] := 'Second';
caps[3] := 'Third';
caps[4] := 'Fourth';
caps[5] := 'Fifth';
t := 30;
for i:=1 to 5 do begin
  EditList[i] := TLabeledEdit.Create(Self);
  with EditList[i] do begin
    Top := t;
    Left := 10;
    EditLabel.Caption := caps[i];
    Parent := Self;
    t := Top + Height+30;
  end;
end;
end;

Не забудь в uses добавить ExtCtrls.
PM MAIL   Вверх
FRAGNATIC
Дата 4.2.2005, 14:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


..::Свирепый Кодер::..
**


Профиль
Группа: Участник
Сообщений: 901
Регистрация: 17.10.2004
Где: ICQ

Репутация: 6
Всего: 11



а почему бы просто не поставить сразу пару эдитов и их visible:=false а по нажатию кнопки visible:=true;
PM MAIL   Вверх
User
Дата 4.2.2005, 14:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 213
Регистрация: 5.11.2004

Репутация: нет
Всего: нет



А ссылки можно поподробнее где такое искать?
PM MAIL WWW   Вверх
Alex
Дата 4.2.2005, 14:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4147
Регистрация: 25.3.2002
Где: Москва

Репутация: 80
Всего: 162





--------------------
Написать можно все - главное четко представлять, что ты хочешь получить в конце. 
PM Skype   Вверх
NiJazz
Дата 4.2.2005, 15:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Jazz coder
****


Профиль
Группа: Экс. модератор
Сообщений: 2286
Регистрация: 10.8.2003
Где: Москва

Репутация: 6
Всего: 23



User
А где спасибо? Помогло хоть?
PM MAIL   Вверх
User
Дата 4.2.2005, 15:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 213
Регистрация: 5.11.2004

Репутация: нет
Всего: нет



А сохранить созданные динамически компонент можно? и как?
Отвечаю на вопрос: Я хочу програмно создавать в таблице новый столбец, и автоматически, в окне добавления/редактирования полей, хочу добавлять компонент. А количество столбцов, сами понимаите может быть разное.
Добавлено @ 15:47
Спасибо....
PM MAIL WWW   Вверх
Snowy
Дата 4.2.2005, 16:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 192
Всего: 484



Что значит сохранить? Они никуда не убегают.
Если ты имеешь ввиду, что хочешь обращаться к ним по имени, то тут нескольно способов:
  • Массив элементов типа TEdit
  • Использовать TList
  • При создании задавать едиту имя с номером, а потом обращаться к нему через FindComponent
  • Нарисовать компонентов про запас и программно регулировать свойство visible.
Рекомендую второй вариант. Хотя первый проще. А 4-й для балбесов smile
PM MAIL   Вверх
~FoX~
Дата 4.2.2005, 16:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


НЕ рыжий!!!
****


Профиль
Группа: Участник Клуба
Сообщений: 2819
Регистрация: 8.10.2003
Где: Зеленоград

Репутация: 13
Всего: 68



Цитата(User @ 4.2.2005, 15:46)
А сохранить созданные динамически компонент можно? и как?


Цитата(Snowy @ 4.2.2005, 16:04)
Что значит сохранить? Они никуда не убегают.


После закрытия и открытия формы динамические компаненты исчезают, может он про это спрашивает?


--------------------
user posted image
…множественность никогда не следует полагать без необходимости…
PM MAIL WWW ICQ Jabber   Вверх
Snowy
Дата 4.2.2005, 16:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 192
Всего: 484



Вот простой код с использованием Tlist.
Если делать по честному, то нужно создавать объект типа TEditList=class(TList). Но это дольше и сложнее писать. Зато легко и удобно пользоваться.
Код

unit Unit1;

interface

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

type
 TForm1 = class(TForm)
   procedure FormCreate(Sender: TObject);
   procedure FormDestroy(Sender: TObject);
   procedure Button1Click(Sender: TObject);
   procedure Button2Click(Sender: TObject);
   procedure Button3Click(Sender: TObject);
 private
   { Private declarations }
 public
   { Public declarations }
 end;

var
 Form1: TForm1;
 TEds:  TList;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
 TEds:=TList.Create;
 with TButton.Create(Form1) do begin
   ParentWindow:=Form1.Handle;
   Left:=0; Top:=0;
   OnClick:=Button1Click;
   Caption:='Add';
 end;
 with TButton.Create(Form1) do begin
   ParentWindow:=Form1.Handle;
   Left:=72; Top:=0;
   OnClick:=Button2Click;
   Caption:='Delete';
 end;
 with TButton.Create(Form1) do begin
   ParentWindow:=Form1.Handle;
   Left:=144; Top:=0;
   OnClick:=Button3Click;
   Caption:='Clear';
 end;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
 TEds.Free;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
 i: integer;
 e: TEdit;
begin
 i:=TEds.Add(TEdit.Create(Form1));
 with TEdit(TEds[i]) do begin
   ParentWindow:=Form1.Handle;
   left:=8; Top:=i*20+30;
   Name:='Edit'+IntToStr(i+1);
   Text:=IntToStr(i+1)+'-й Edit';
 end;
end;

procedure TForm1.Button2Click(Sender: TObject);
var
 i: integer;
begin
 i:=TEds.Count;
 if i>0 then begin
   TEdit(TEds[i-1]).Free;
   TEds.Delete(i-1);
 end;
end;

procedure TForm1.Button3Click(Sender: TObject);
var
 i: integer;
begin
 for i:=0 to TEds.Count-1 do
   TEdit(TEds[i]).Free;
 TEds.Clear;
end;

Добавлено @ 16:52
Да, забыл добавить - не кидай ничего на форму - все само создастся.

~FoX~
А зачем закрывть форму? Достаточно TForm.Hide
PM MAIL   Вверх
gambit
Дата 21.3.2007, 22:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***
Награды: 1



Профиль
Группа: Комодератор
Сообщений: 1359
Регистрация: 25.6.2006
Где: я?

Репутация: нет
Всего: 40



Создали мы компонент, а как потом обратится к его свойствам, например узнать текст который ввел пользователь в созданный компанент?
PM MAIL ICQ Skype   Вверх
VICTAR
Дата 21.3.2007, 23:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник
Сообщений: 1108
Регистрация: 6.10.2006

Репутация: 37
Всего: 80



Задай ему имя и обращайся по имени, как обычно.
Задай уникальный Tag, затем ищи по Tag`у и проверяй текст.
И еще много-много вариантов... 
PM MAIL   Вверх
gambit
Дата 23.3.2007, 13:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***
Награды: 1



Профиль
Группа: Комодератор
Сообщений: 1359
Регистрация: 25.6.2006
Где: я?

Репутация: нет
Всего: 40



VICTAR, проблема в том что я пытаюсь так сделать. 
Код

procedure TForm1.Button1Click(Sender: TObject);
var y: integer=100;
begin
 with TEdit.Create(Form1) do begin
   Top:=y; Left:=Button1.Left;
   ParentWindow:=Self.Handle;
   y:=y+Height+4;
   name:='edit1';
 end;


Но так как объект не создан, я не могу написать что то типо
Код

procedure TForm1.Button2lick(Sender: TObject);
begin
label1.caption:=edit1.text;
end;

Он говорит  что индификатор edit1 неизвестен.
PM MAIL ICQ Skype   Вверх
VICTAR
Дата 23.3.2007, 14:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник
Сообщений: 1108
Регистрация: 6.10.2006

Репутация: 37
Всего: 80



Код

procedure TForm1.Button2Click(Sender: TObject);
begin
label1.caption:=TEdit(FindComponent('Edit1')).Text;
end;

PM MAIL   Вверх
gambit
Дата 23.3.2007, 14:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***
Награды: 1



Профиль
Группа: Комодератор
Сообщений: 1359
Регистрация: 25.6.2006
Где: я?

Репутация: нет
Всего: 40



Пытаюсь создать label
Код

 with TLabel.Create(Form1) do begin
   Top:=y;
   Left:=x;
   Name:='Label'+IntToStr(namelabel);
   caption:='Label '+IntToStr(namelabel);
   ParentWindow:=self.Handle;
 end;
inc(namelabel);

Но в строчке    ParentWindow:=self.Handle; ошибка

Код

system error. code: 1400
Недопустимый дискриптор окна

Что это?

Добавлено @ 14:51 
VICTAR, спасибо.

Добавлено @ 14:53 
А как обрабатывать процедуры созданных компанентов?
PM MAIL ICQ Skype   Вверх
aktuba
Дата 23.3.2007, 14:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Смышленный
***


Профиль
Группа: Завсегдатай
Сообщений: 1915
Регистрация: 24.4.2006
Где: Планета Земля

Репутация: 16
Всего: 38



Цитата

А как обрабатывать процедуры созданных компанентов? 


СРОЧНО!!! В магазин за книгой по Delphi!!!

Код

 Edit1.OnChange := EditChange;

procedure TForm1.EditChange(Sender: TObject);
begin
  ShowMessage('Вот и событие...');
end;



--------------------
user posted image
PM MAIL WWW Skype   Вверх
VICTAR
Дата 23.3.2007, 15:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник
Сообщений: 1108
Регистрация: 6.10.2006

Репутация: 37
Всего: 80



замени
Код

ParentWindow:=self.Handle;

на
Код

Parent:=Form1;

PM MAIL   Вверх
gambit
Дата 23.3.2007, 16:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***
Награды: 1



Профиль
Группа: Комодератор
Сообщений: 1359
Регистрация: 25.6.2006
Где: я?

Репутация: нет
Всего: 40



Цитата

СРОЧНО!!! В магазин за книгой по Delphi!!!

У меня книг миллион, но не в одной не про динамические компаненты.
Всем спасибо.
PM MAIL ICQ Skype   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0721 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.