Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 29.10.2014, 15:02   #1
danek130995
Пользователь
 
Регистрация: 26.10.2014
Сообщений: 27
По умолчанию Оператор self

Есть код, который позволяет создавать на форме кнопку, по нажатию на которую создается новая форма с кнопкой. Вот в чем вопрос: В этой программе родителем новосозданной формы является предыдущая форма, или же родителем всех форм является одна форма, самая первая? Self он же указывает на объект, который вызвал данный метод.
Код:
unit Unit1;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls;

type

  { TForm1 }

  TForm1 = class(TForm)
    Button1: TButton;
    procedure myclick(sender: tobject);
    procedure FormMouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);

  private
    { private declarations }
    k:integer;
  public

    property kk:integer read  k write  k;
    { public declarations }
  end;

var
  Form1: TForm1;

implementation

procedure tform1.myclick(sender: tObject);
var myform:tform1;
begin
randomize;
myform:=tform1.create(self);
with myform do begin
left:=random(50);
end;
myform.show;
end;

procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
var Btn:TButton;
begin
inc(k); self.caption:=inttostr(kk);
Btn:=TButton.Create(self);
Btn.Parent:=self;
Btn.left:=x; Btn.Top:=y;
Btn.Width:=Btn.width+50;
Btn.Caption:=Format ('Кнопка в %d,%d',[x,y]);
Btn.onclick:=@myclick;
end;

{$R *.lfm}

end.

Последний раз редактировалось Stilet; 29.10.2014 в 15:22.
danek130995 вне форума Ответить с цитированием
Старый 29.10.2014, 15:06   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Цитата:
Self он же указывает на объект, который вызвал данный метод
Не вызвал, а принадлежит. А принадлежит в данном случае форме, на которой расположена кнопка, в OnClock которой создается другая форма
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 29.10.2014, 15:35   #3
danek130995
Пользователь
 
Регистрация: 26.10.2014
Сообщений: 27
По умолчанию

т.е. родителем следующей формы является предыдущая?
danek130995 вне форума Ответить с цитированием
Старый 29.10.2014, 15:59   #4
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Нет, здесь это владелец формы. А родитель не задан
http://www.firststeps.ru/cbuilder/r.php?41
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 29.10.2014, 16:39   #5
danek130995
Пользователь
 
Регистрация: 26.10.2014
Сообщений: 27
По умолчанию

Спасибо за ценный материал. Т.е. форма является владельцем последующе созданной формы, а при удалении владельца память освобождается автоматически для потомков. А тогда получается, если я создал 5 форм динамически(не считая 6 формы, которая создалась сама при запуске приложения), то если я закрываю 1 форму, то последующие 4 должны закрыться сами по себе, т.к. их владедец закрыт. Но этого не происходит, формы остаются живы. Закрываются они только при закрытии первоначально автоматически запущенной формы. Почему так происходит?
danek130995 вне форума Ответить с цитированием
Старый 29.10.2014, 16:49   #6
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Закрытие не значит уничтожение. Уничтожение владельца уничтожает и подчиненные. Поставте в OnClose владельца Action:=caFree; и посмотрите результат
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 29.10.2014 в 16:51.
Аватар вне форума Ответить с цитированием
Старый 29.10.2014, 21:26   #7
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

Код:
procedure tform1.myclick(Self: tform1; sender: tObject);
видишь суслика?
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Условный оператор,оператор цикла и массив Klark73 Microsoft Office Excel 1 19.12.2011 17:09
Оператор выбора или условный оператор[Перенесено из JavaSE] merhaba1992 Помощь студентам 1 20.01.2011 17:06
Условный оператор. Оператор выбора. Pascal Сержuk Помощь студентам 4 17.11.2010 12:50
Вычислить используя, оператор цикла for и оператор безусловного пе Knubbe Помощь студентам 1 18.12.2009 10:24