Форум программистов, компьютерный форум, киберфорум
Наши страницы
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
 
Kenya-West©
1 / 1 / 8
Регистрация: 08.01.2013
Сообщений: 85
#1

Ругань на процедуру в процедуре - Delphi

03.07.2013, 11:55. Просмотров 462. Ответов 5
Метки нет (Все метки)

Создал процедуру в процедуре:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
procedure TForm1.N5_Change_LanguageClick(Sender: TObject);
var
  Cl1: TForm;
 
  procedure Cl1Create(SendeR: TObject);
  var cl1_pnl1: TPanel;
  begin
    cl1_pnl1:=TPanel.Create(Self);
    With cl1_pnl1 do begin
      if FindComponent('Cl1')=nil then cl1_pnl1.Free else begin
      Parent:=Cl1;
      Name:='cl1_pnl1';
      end;
    end;
  end;
 
begin
  Cl1:=TForm.Create(nil);
  With Cl1 do begin
    OnCreate:=Cl1Create;
    Parent:=nil;
    Name:='Cl1';
    Show;
  end;
end;
Ругается на 20 строку (OnCreate:=Cl1Create;), выдавая сообщение: " E2009 Incompatible types: 'method pointer and regular procedure' "
Насколько я понял, компилятор хотел бы, чтобы я написал вложенную процедуру в глобале.

Как правильно записать приведённый мной код, чтобы процедура всё же осталась в процедуре?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.07.2013, 11:55
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Ругань на процедуру в процедуре (Delphi):

Процедура в процедуре - ругань на Listbox
Создал себе такой код: procedure TForm1.N5_Change_LanguageClick(Sender:...

Как вызвать процедуру в процедуре
Ребят, помогите пожалуйста! Я хочу эту процедуру: procedure...

Как вызвать процедуру с параметрами в другой процедуре?
Доброго времени суток. Помогите пожалуйста вызвать процедуру с параметрами в...

Возможно ли процедуру одного класса использовать в процедуре другого?
Возможно ли процедуру (например, BitBtn1Click) одного класса (TForm1)...

Передача имени формы в процедуру и в процедуре вызов метода объекта формы
Есть несколько форм: FrmMain, Frm2, Frm3. На каждой форме есть RichEdit под...

Написать процедуру, вычисляющую корни квадратного уравнения. Корни должны выводиться на экран в процедуре
Написать процедуру, вычисляющую корни квадратного уравнения. Корни должны...

5
volvo
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
25616 / 17169 / 6827
Регистрация: 22.10.2011
Сообщений: 30,364
Записей в блоге: 6
03.07.2013, 12:19 #2
Цитата Сообщение от Kenya-West© Посмотреть сообщение
Насколько я понял, компилятор хотел бы, чтобы я написал вложенную процедуру в глобале.
Нет, он хотел бы видеть обработчиком метод класса, поскольку:
Delphi
1
 type TNotifyEvent = procedure(Sender: TObject) of object; // см. на последние 2 слова
Бесполезно что-либо вешать на OnCreate, оно никогда не вызовется, форма уже создана на тот момент, когда ты присваиваешь обработчик. Вот так - будет работать OnActivate:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
procedure TForm1.Button17Click(Sender: TObject);
var
  Cl1: TForm;
 
  procedure Cl1Activate(Self : TForm; SendeR: TObject);
  var cl1_pnl1: TPanel;
  begin
    cl1_pnl1:=TPanel.Create(Self);
    With cl1_pnl1 do begin
      if FindComponent('Cl1')=nil then cl1_pnl1.Free else begin
      Parent:=Cl1;
      Name:='cl1_pnl1';
      end;
    end;
  end;
 
var
  Method : TMethod;
begin
  Cl1:=TForm.Create(nil);
  With Cl1 do begin
    Method.Code := @Cl1Activate;
    Method.Data := Cl1;
    Cl1.OnActivate := TNotifyEvent (Method);
    Parent:=nil;
    Name:='Cl1';
    Show;
  end;
end;
1
Kenya-West©
1 / 1 / 8
Регистрация: 08.01.2013
Сообщений: 85
03.07.2013, 16:37  [ТС] #3
Ух, спасибо, но я пока до этого не дорос - значит, буду читать книжки, чтобы это понять.

Добавлено через 46 минут
А куда тыкать:
Delphi
1
type TNotifyEvent = procedure(Sender: TObject) of object;
Просто мне эт нужно сейчас, не вдаваясь в подробности, позже разберусь.
0
volvo
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
25616 / 17169 / 6827
Регистрация: 22.10.2011
Сообщений: 30,364
Записей в блоге: 6
03.07.2013, 17:15 #4
Цитата Сообщение от Kenya-West© Посмотреть сообщение
А куда тыкать:
Никуда, этот тип уже описан в модуле Classes...
0
Kenya-West©
1 / 1 / 8
Регистрация: 08.01.2013
Сообщений: 85
03.07.2013, 17:47  [ТС] #5
Ага, спасибо, понял.
В общем, у меня чутка другой вопрос: в процедуре Cl1Activate создаётся, как видите, панель. Не удаётся приписать к ней "Parent:=Cl1", ну, не удаётся созданную форму сделать родителем... Вылетает. В чём дело?
0
volvo
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
25616 / 17169 / 6827
Регистрация: 22.10.2011
Сообщений: 30,364
Записей в блоге: 6
03.07.2013, 17:53 #6
Вот так нормально создается панель:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
procedure TForm1.Button17Click(Sender: TObject);
 
  procedure Cl1Activate(Self : TForm; SendeR: TObject);
  begin
    with TPanel.Create(Self) do
    begin
      Parent:=Self;
      Name:='cl1_pnl1';
      Caption := 'test';
    end;
  end;
 
var
  Cl1: TForm;
  Method : TMethod;
begin
  Cl1:=TForm.Create(nil);
  With Cl1 do begin
    Method.Code := @Cl1Activate;
    Method.Data := Cl1;
    Cl1.OnActivate := TNotifyEvent (Method);
    Parent:=nil;
    Name:='Cl1';
    Show;
  end;
end;
1
03.07.2013, 17:53
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.07.2013, 17:53
Привет! Вот еще темы с решениями:

Ругань при записи в текстовый файл
Беда случилась. Голова кругом, то переписывает в документ то ошибка 102 то...

Ругань с .exe файлом в среде Delphi XE 8 Rad Studio
Доброго времени суток. Столкнулся с не страшной, но крайне неприятной и...

Прошу исправить процедуру удаления из типизированного файла и процедуру сортировки!
Ребятки!Help!!!Помогите пожалуйста...завтра сдавать работу. Посмотрите ...

Как в процедуру 1 передать адрес процедуры 2 через параметр чтобы процедура 1 выполнила процедуру 2
Зачем мне это нужно? Затем что написан вложеный цикл от 0 до N в нём цикл от 0...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru