Динамическое создание & управление...

  • Автор темы misterio
  • Дата начала
M

misterio

Гость
#1
Динамическое создание я нашёл на форуме, а вот как его использовать....??
Пример пишем так :

Код:
 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. ???
 
M

misterio

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

Код:
if (sender is TButton) then
sender.Free;
А если кнопок 2 или более, то как же этот случай?
 
M

misterio

Гость
#3
Та код та я писал! Вот по примеру как в Дельфи ....процедурку создал...действие...и т.д.
Только вот кнопочка не реагировала...а реагировала либо форма, либо другая кнопка..ггг
 
M

misterio

Гость
#4
у вас ошибка в 17 строке
Что...за?? Нельзя более-менее человеческим языком писать... :D (вы бы еще по пикселям координаты назвали) Или это прикол такой, типа : "знаеш парень отстань, иди почитай где-нить в книжке... "
 
M

misterio

Гость
#5
Ну примерчик простенький любой можно показать?
 
M

Mr_Duke

Гость
#6
А как присваиваить имена создаваемым объектам
 

morpheus

скриптописец
07.08.2006
3 915
1
34
Украина, Киев
#7
так же как и другие свойства

Код:
...
with dynamic_button do
begin
Height := 30;
Width := 80;
Left := 96;
Top := 9;
Caption := 'Dynamic Button';
Name := 'MY_COOL_NAME'
...
 
M

Mr_Duke

Гость
#8
sax_ol извините за ламерские вопросы я просто начинающий.
Я на первой форме нажатием кнопки создаю несколько объектов edit, как мне обратиться к полям edit на второй форме?
 
M

Mr_Duke

Гость
#9
Ага спасибо, путем перебора все получилось.
 
M

misterio

Гость
#10
Хм...вот сижу я думаю....

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

К тому же при использовании метода Free выскакивает Exception.....тоже не корректно....
 
Z

zubr

Гость
#11
Код:
PostMessage(Form1.Handle, WM_CLOSE, 0, 0);
При этом не забываем в обработчике Form1.Close сделать Action:=caFree;
 
R

root

Гость
#12
Для: 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
[]
 
M

misterio

Гость
#13
Для root :

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

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

Как это можно обойти? Просто уничножать? Или установить проверку типа : "Если форма в памяти есть, то просто показать ее". Как правильнее?
 
M

misterio

Гость
#14
прям вот так и говорит?
Ага, стишки рассказывает еще. :)
Я думаю все поняли что я имею введу.

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

P.S. гг...написал сообщение и про привычке нажал CTRL+SHIFT+S ;)
 
M

misterio

Гость
#15
Согласен.

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

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

Конечно я и сам знаю что такое gooogle, но может всё же знаете хорошенькие ссылочки...??
 
R

root

Гость
#16
Для: misterio
RSDN.RU WinAPI - надр читать на сайте win производителя :blink: