Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2008.02.24;
Скачать: [xml.tar.bz2];

Вниз

Динамическое создание объектов   Найти похожие ветки 

 
flaxe   (2008-02-01 00:03) [0]

Создаю динамически форму..

procedure TForm1.Button12Click(Sender: TObject);
procedure CloseForm(Sender: TObject; var Action: TCloseAction);
begin
end;
var
AddForm: TForm;
ProjectDate,Meter:TDateTimePicker;
Address,Client,Phone,Price,Info:TEdit;
Designer:Tlistbox;

begin
AddForm:=Tform.Create(Application);
AddForm.Position:=poDesktopCenter;
with AddForm do
 begin
 ProjectDate:=TDateTimePicker.Create(AddForm);
 end;

Form1.Enabled:=False;
AddForm.Visible:=True;

     AddForm.OnClose:=CloseForm;

 end;

И естественно   AddForm.OnClose:=CloseForm; не работает. при компиляции выдает ошибку Incompatible type: method pointer and regulat procedure.
Как сделать правильно? Важно чтобы Присваиваемая процедура (CloseForm)находилась в самой процедуре (TForm1.Button12Click)


 
Семеныч   (2008-02-01 00:35) [1]


type
 TForm1 = class(TForm)
 ...
 private
   procedure CloseDynamicForm(Sender: TObject; var Action: TCloseAction);
 end;

// ===========================

procedure TForm1.CloseDynamicForm(Sender: TObject; var Action: TCloseAction);
begin
 ...
end;

procedure TForm1.Button12Click(Sender: TObject);
...
begin
 ...
 AddForm.OnClose := CloseDynamicForm;
 ...
end;


 
Семеныч   (2008-02-01 00:42) [2]

> Важно чтобы Присваиваемая процедура (CloseForm)находилась в самой
> процедуре (TForm1.Button12Click)

Попробуйте обосновать, почему это важно - не получится. Не найдете Вы таких причин - потому что их нет. Значит, неважно.

Есть способ назначить обработчиком процедуру вместо метода класса, но если возникают такие вопросы, то лучше пока что делать как положено по науке, а от извратов воздержаться. Не совсем они тривиальны, поэтому при недостатке знаний/опыта легко огрести трудноотлавливаемые баги.


 
flaxe   (2008-02-01 04:10) [3]

Так то понятно можно сделать..
Прост в програмке будет Много всяких диалогов около 30-40 штук, они все разные, и результат работы их тоже разный.. удобней былобы засунуть каждый диалог в свою процедуру.


 
Григорьев Антон ©   (2008-02-01 08:38) [4]

Это сделать невозможно. При вызове вложенной процедуры в стек кладутся не только параметры, но и адрес локльных переменных и параметров родительской процедуры, чтобы из вложенной процедуры можно было к ним обращаться. И этот адрес зависит от того, как и откуда вызвана процедура, причём для его определения требуется информация, которая доступна только на этапе компиляции, породить код, который правильно вызовет локальную процедуру из любого места, в общем случае невозможно (это можно сделать только в том случае, если локальная процедура не обращается к параметрам и локальным переменным внешней процедуры, но тогда её проще сделать не локальной). В Delphi даже ошибка такая предусмотрена - Local procedure/function "<element>" assigned to procedure variable - на тот случай, если попытаться обычной процедурной переменной присвоить локальную процедуру (правда, обходится это очень легко, но лучше не обходить).


 
KSergey ©   (2008-02-01 15:45) [5]

Автор, почитайте вот тут
http://www.delphikingdom.com/asp/viewitem.asp?catalogid=342


 
Семеныч   (2008-02-01 16:09) [6]

> flaxe   (01.02.08 04:10) [3]
> удобней былобы засунуть каждый диалог в свою процедуру.

И на здоровье, нет проблем. Но это же не значит, что процедура не может быть внешней? Может. И на удобство это никак не влияет.


 
DiamondShark ©   (2008-02-01 17:56) [7]

Удалено модератором



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2008.02.24;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.031 c
15-1201083737
Игорь Шевченко
2008-01-23 13:22
2008.02.24
Как добиться, чтобы русский текст письма выглядел по-русски...


11-1180250317
Dy1
2007-05-27 11:18
2008.02.24
выбор мышкой компонента


2-1201806081
Lex-85
2008-01-31 22:01
2008.02.24
Приствоить тест ComboBox в OnChange


15-1201100303
БарЛог
2008-01-23 17:58
2008.02.24
Самый лучший поисковик


15-1201008015
Vendict
2008-01-22 16:20
2008.02.24
Аудит в Windows





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский