Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Динамическое создание & управление...
Форум программистов > Системное программирование > Delphi и Pascal > Delphi - Компоненты
misterio
Динамическое создание я нашёл на форуме, а вот как его использовать....??
Пример пишем так :

 procedure TForm1.Button1Click(Sender: TObject);
var dynamic_button : TButton;
begin
dynamic_button := TButton.Create(Form1);
dynamic_button.Parent := self;
with  dynamic_button do
  begin
     Height := 30;
     Width := 80;
     Left := 96;
     Top := 9;
     Caption := 'Dynamic Button';
  end;
end;


А теперь как сделать так, чтобы при нажатии на появивщуюся кнопку, исчезала(удалялась из памяти) сама Button1. ???
sax_ol
with  dynamic_button do
  begin
     Height := 30;
     Width := 80;
     Left := 96;
     Top := 9;
     Caption := 'Dynamic Button';
     OnClick:= MyClick;
  end;
...


procedure TForm1.MyClick(sender:TObject)
begin
   if (sender is TButton) then
      sender.Free;
end;


оно?
misterio
Ну ладно, я некорректно задал может вопрос. Вообщем как сделать обработчик событий на Динамическую кнопку, чтобы польза была, действие какое-то.

if (sender is TButton) then
      sender.Free;


А если кнопок 2 или более, то как же этот случай?
sax_ol
Цитата(misterio @ 3:11:2007, 16:05 )
чтобы польза была, действие какое-то.

для этого надо написатьо соответствующий код.
все необходимое для начала у вас есть, логику добавите сами, ибо кроме вас ее никто не знает
нес па?
misterio
Та код та я писал! Вот по примеру как в Дельфи ....процедурку создал...действие...и т.д.
Только вот кнопочка не реагировала...а реагировала либо форма, либо другая кнопка..ггг
sax_ol
Для: misterio
у вас ошибка в 17 строке
misterio
Цитата
у вас ошибка в 17 строке


Что...за?? Нельзя более-менее человеческим языком писать... tongue.gif (вы бы еще по пикселям координаты назвали) Или это прикол такой, типа : "знаеш парень отстань, иди почитай где-нить в книжке... "
sax_ol
Цитата(misterio @ 5:11:2007, 08:01 )
Или это прикол такой

да нет, но как можно что то сказать определенно, если ничего не видеть ?
misterio
Ну примерчик простенький любой можно показать?
sax_ol
ну так я в #2 вам дал простенький пример,
вы же в упор не хотите показывать (партизан?) что у вас не получается ... хотя я намекал вам
стали задавать какие-то странные вопросы про 2 и белее кнопок ... как намек - прочитайте про свойство Tag

старайтесь более подробнее/понятнее формулировать вопросы
Mr_Duke
А как присваиваить имена создаваемым объектам
Morpheus
так же как и другие свойства

...
with  dynamic_button do
  begin
     Height := 30;
     Width := 80;
     Left := 96;
     Top := 9;
     Caption := 'Dynamic Button';
     Name := 'MY_COOL_NAME'
...
sax_ol
Для: Mr_Duke
что вы имеете ввиду?

dynamic_button.Name := 'dynamic_button';
?
Mr_Duke
sax_ol извините за ламерские вопросы я просто начинающий.
Я на первой форме нажатием кнопки создаю несколько объектов edit, как мне обратиться к полям edit на второй форме?
sax_ol
Для: Mr_Duke
ну на самом деле тут несколько подходов
1. прописать их все как поля формы и далее все по стандарту
2. некий динамический список/массив контролов
3. путем перебора TForm.Components/Controls
....

+ FindControl
Mr_Duke
Ага спасибо, путем перебора все получилось.
misterio
Хм...вот сижу я думаю....

У нас есть Form1 на ней создано Button1 - естественно всё динамически создано. Процедуру исчезновения после нажатия на кнопку я понял.
А вот как быть, чтобы исчезла динамически созданная Form1??

К тому же при использовании метода Free выскакивает Exception.....тоже не корректно....
zubr
PostMessage(Form1.Handle, WM_CLOSE, 0, 0);

При этом не забываем в обработчике Form1.Close сделать Action:=caFree;
root
Для: misterio
ты наверно локально пременную обьявляешь(тоесть ссылка не нее работает пок выполняется код в твоей процедуре или функции) вот она у тебя и nil возврящает. как можно разрушить того чего нет если ты ее глобально обьявишь то тогда стандартным диструктором уничтожай
а если ты ее локально обьявляешь то тебе необходимо запомнить handle окна и по ему разрушать как сказал zubr

Пример если обьявить как локальную переменную;
var
  Form1: TForm1;
  f:tform;
  hw: HWND;

implementation

{$R *.dfm}

procedure TForm1.BitBtn1Click(Sender: TObject);
var f: tform;// если закоментировать то получим глобальную переменную
begin
f:=TForm.Create(self);
//hw= f.handle; если запомним то сможем разрушить
f.Show;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
f.Destroy;
//PostMessage(hw, WM_CLOSE, 0, 0); рушим через API
end;
//Неработает потому что f=nil

[]
misterio
Для root :

Спасибо, ошибку свою понял. Фишку с Handle не знаю, да и про WM_CLOSE тоже. Где бы про это почитать.?

Цитата
PostMessage(hw, WM_CLOSE, 0, 0); рушим через API


Кстате если использовать этот код, то при повторном нажатии на btn (при повторном создании динамической формы), оно ругаеться что форма уже есть.

Как это можно обойти? Просто уничножать? Или установить проверку типа : "Если форма в памяти есть, то просто показать ее". Как правильнее?
sax_ol
Цитата(misterio @ 8:12:2007, 14:16 )
естественно всё динамически создано

а смысл? если хотите уменьшить размер ехе, то с VCL это не пройдет, надо переходить на WinAPI,но и смысл сего действа тож - "?"
Цитата(root @ 8:12:2007, 17:07 )
var
Form1: TForm1;
f:tform;
hw: HWND;

за это будем "убивать" wink.gif
Цитата(misterio @ 8:12:2007, 18:15 )
оно ругаеться что форма уже есть

прям вот так и говорит?
misterio
Цитата
прям вот так и говорит?


Ага, стишки рассказывает еще. biggrin.gif
Я думаю все поняли что я имею введу.

Цитата
а смысл? если хотите уменьшить размер ехе, то с VCL это не пройдет, надо переходить на WinAPI,но и смысл сего действа тож - "?"


Смысл в том, чтобы научиться и понять что к чему.Размер екзешника вообщене причём. Я вообще могу обойтись без динамических компонентов, но начинать же надо когда-то??

P.S. гг...написал сообщение и про привычке нажал CTRL+SHIFT+S smile.gif
sax_ol
Цитата(misterio @ 9:12:2007, 18:59 )
Смысл в том, чтобы научиться и понять что к чему

ну согласитесь, что сначала надо понять, а в чем, конкретно (обхватить необхватное невозможно нес па?), будем разбираться ... далее проще
misterio
Согласен.

Дак вот я конкретно задам вопрос:

Подскажите ссылки где описано использование дин. компонентов, WinAPI...и т.д. и на этом топик можно закрыть.

Конечно я и сам знаю что такое gooogle, но может всё же знаете хорошенькие ссылочки...??
root
Для: misterio
RSDN.RU WinAPI - надр читать на сайте win производителя smile.gif
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2009 IPS, Inc.