• Познакомьтесь с пентестом веб-приложений на практике в нашем новом бесплатном курсе

    «Анализ защищенности веб-приложений»

    🔥 Записаться бесплатно!

  • CTF с учебными материалами Codeby Games

    Обучение кибербезопасности в игровой форме. Более 200 заданий по Active Directory, OSINT, PWN, Веб, Стеганографии, Реверс-инжинирингу, Форензике и Криптографии. Школа CTF с бесплатными курсами по всем категориям.

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

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

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. ???
 
M

misterio

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

Код:
if (sender is TButton) then
sender.Free;

А если кнопок 2 или более, то как же этот случай?
 
M

misterio

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

misterio

у вас ошибка в 17 строке

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

misterio

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

Mr_Duke

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

morpheus

так же как и другие свойства

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

Mr_Duke

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

Mr_Duke

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

misterio

Хм...вот сижу я думаю....

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

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

zubr

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

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
[]
 
M

misterio

Для root :

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

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

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

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

misterio

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

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

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

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

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

misterio

Согласен.

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

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

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

root

Для: misterio
RSDN.RU WinAPI - надр читать на сайте win производителя :blink:
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!