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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 09.07.2010, 17:17   #1
Solrainer7
 
Регистрация: 09.07.2010
Сообщений: 3
Вопрос Наследие Классов.

Уважаемые!
Объясните, ато я что то второй день не могу понять.

Создаю форму в динамике. По событию нажатия кнопки на основной форме.
На создаваемой форме так же динамический размещаю кнопку.
В обработчике события onclick на основной форме, в переменных процедуры обработчика - кнопке задал класс не tbutton, а tobject.

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

Вопрос: Как это получается?

Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
  var myform: TForm;
      but1: TObject;
begin
  application.Createform(tform,myform);
  but1:= Tbutton.Create(myform);
  with but1 do begin
    caption:='ololo';
    parent:= myform;
    end;




  myform.showmodal;
  myform.free;

end;

end.
Solrainer7 вне форума Ответить с цитированием
Старый 09.07.2010, 18:00   #2
Sanprof
Форумчанин
 
Аватар для Sanprof
 
Регистрация: 28.01.2008
Сообщений: 267
По умолчанию

не проверял, но по-моему надо так
Код:
procedure TForm1.Button1Click(Sender: TObject);
var 
  myform: TForm;
  but1: TButton;
begin
  myform := TForm.Create(nil);
  try
    but1:= Tbutton.Create(myform);
    but1.caption:='ololo';
    but1.Parent := myform;
    myform.showmodal;
  except
    FreeAndNil(myform);
  end;
    FreeAndNil(myform);
end;
Не забываем говорить спасибо за помощь - это ведь так приятно
Sanprof вне форума Ответить с цитированием
Старый 09.07.2010, 19:38   #3
Solrainer7
 
Регистрация: 09.07.2010
Сообщений: 3
По умолчанию

Форму я создал по аналогии с созданием формы в главном файле программы (код ниже) - и оно работает.

А вот с кнопкой - вы правы. Надо писать как вы написали. Только вот мне интересно почему когда я кнопке присваиваю корневой класс по иерархии классов делфи, оно "засасывает" основную форму внутрь вновь созданной.

ЗЫЖ: использую Delphi 7

Код:
program Project1;

uses
  Forms,
  Unit1 in 'Unit1.pas' {Form1};

{$R *.res}

begin
  Application.Initialize;
  Application.CreateForm(TForm1, Form1);
  Application.Run;
end.
Solrainer7 вне форума Ответить с цитированием
Старый 12.07.2010, 17:19   #4
Sanprof
Форумчанин
 
Аватар для Sanprof
 
Регистрация: 28.01.2008
Сообщений: 267
По умолчанию

Цитата:
Сообщение от Solrainer7 Посмотреть сообщение
Код:
procedure TForm1.Button1Click(Sender: TObject);
  var myform: TForm;
      but1: TObject;
begin
  application.Createform(tform,myform);
  but1:= Tbutton.Create(myform);
  with but1 do begin
    caption:='ololo';
    parent:= myform;
    end;
  myform.showmodal;
  myform.free;
end;
также если But1: Tobject; то к ней после Create нужно обращаться так (but1 as TButton).Caption := 'ololo'; и т.п. иначе Caption и Parent в вашем случае не будут отрабатываться.

Код ниже тоже вроде как должен работать при but1: Tobject;
Код:
procedure TForm1.Button1Click(Sender: TObject);
var 
  myform: TForm;
  but1: TObject;
begin
  myform := TForm.Create(nil);
  try
    but1:= Tbutton.Create(myform);
    (but1 as TButton).Caption:='ololo';
    (but1 as TButton).Parent := myform;
    myform.showmodal;
  except
    FreeAndNil(myform);
  end;
    FreeAndNil(myform);
end;
Не забываем говорить спасибо за помощь - это ведь так приятно

Последний раз редактировалось Sanprof; 12.07.2010 в 17:21.
Sanprof вне форума Ответить с цитированием
Старый 12.07.2010, 22:18   #5
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

Код:
with but1 do begin
    caption:='ololo';
    parent:= myform;//TObject не имеет Parent 
//в результате parent относится к form1
// form1.parent:=myform; что мы и наблюдаем
    end;
P.S.. За что я не люблю with

P.P.S. то же и про caption

конечно можно исправить
Код:
with but1 as Tbutton do begin
    caption:='ololo';
    parent:= myform;
    end;
но вероятность недноначности прочтения всегда остается.
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 12.07.2010 в 22:24.
evg_m вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Свойства классов. Lazio Общие вопросы C/C++ 2 20.03.2010 22:11
Шаблоны классов __Demon__ C++ Builder 11 03.03.2010 01:04
Создание классов и использование объектов классов при написании программ в среде C++. Frozen inside Помощь студентам 0 16.04.2009 23:18
Массив классов nns2009 Общие вопросы C/C++ 15 03.02.2009 00:47
Регистрация классов. Nytlec Помощь студентам 1 18.01.2009 14:05