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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 14.09.2009, 16:39   #1
SNUPY
Форумчанин
 
Регистрация: 15.02.2008
Сообщений: 621
Вопрос Наследование формы...

Мну стыдно признаться, но я до сих пор с этим моментом не дружу... =\ поэтому не судите строго всетаки хочу делать по людски все... =))) И так в чем же собствено проблема??? Дело в том, что я пытаюсь наследовать форму 1 в форму 2 (наверно не корректно выражаюсь).. проще говоря вот код:
Код:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure SetName(s:String);
    procedure Button1Click(Sender: TObject);
  private
    constructor FormCreate(Sender: TObject); virtual;
  public
    { Public declarations }
  end;

  TForm2 = class(TForm1)
  Btn:TButton;
  procedure btnPress(sender:TObject);
  private
    { Private declarations }
  public
    constructor Create(sender:TObject); reintroduce;
  end;

var
  Form1: TForm1;
  Form2: TForm2;
implementation

{$R *.dfm}

procedure TForm1.SetName(s:String);
begin
  self.Caption:=s;
end;

Constructor TForm2.Create(sender:TObject);
begin
 Inherited FormCreate(self);
 Caption:='sds';
 Btn:=TButton.Create(Self);
 btn.Parent:=Self;
 btn.Width:=100;
 btn.Height:=10;
 Btn.Left:=0;
 Btn.top:=20;
 Btn.OnClick:=btnPress;
end;

procedure TForm2.btnPress(sender:TObject);
begin
  Inherited SetName('sds');
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  form2.Show;
end;

constructor TForm1.FormCreate(Sender: TObject);
begin
  self.Caption:='ss';
end;

end.
Идея в том, чтобы при создании форма 1 получила заголовок "ss", а from2 в довесок возможностей своего предка (формы1) появилась с кнопкой Btn, при нажатии которой заголовок формы2 менялся.... Наверно мну лузер =\ Заранее спасибо!!!!
Помог? Ну так нажми на весы!
SNUPY вне форума Ответить с цитированием
Старый 14.09.2009, 20:11   #2
АНК
Пользователь
 
Регистрация: 01.09.2009
Сообщений: 30
По умолчанию

И как же у Вас в одном Unit'e живут две разные формы? И файл Unit.DFM у них общий?
АНК вне форума Ответить с цитированием
Старый 14.09.2009, 20:26   #3
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

попробуйте использовать динамическое создание компонентов для форм.
должно получится(без New=>Form)
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 14.09.2009, 20:43   #4
alexBlack
Участник клуба
 
Регистрация: 12.10.2007
Сообщений: 1,204
По умолчанию

Непонятно, зачем это может понадобиться, но сделать можно:

Код:
type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
  public
     constructor Create(aOwner:TComponent); override;
  end;

  TForm2 = Class(TForm1)
  protected
     procedure btnPress(sender:TObject);
  public
     constructor Create(aOwner:TComponent); override;
  end;

var
  Form1 : TForm1;
  Form2 : TForm2;
implementation

{$R *.dfm}

constructor TForm1.Create(aOwner:TComponent);
begin
   inherited Create(aOwner);
   Caption := 'form1 caption';
end;

constructor TForm2.Create(aOwner:TComponent);
var btn : TButton;
begin
   inherited Create(aOwner);
   Caption := 'new form. press button';
   Btn:=TButton.Create(Self);
   btn.Parent:=Self;
   btn.Width:=100;
   btn.Height:=100;
   Btn.Left:=0;
   Btn.top:=100;
   Btn.OnClick:=btnPress;
end;

procedure TForm2.btnPress(sender:TObject);
begin
   Caption := 'form2 caption';
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
   Form2 := TForm2.Create(nil);
   Form2.Show;
end;
alexBlack вне форума Ответить с цитированием
Старый 14.09.2009, 21:52   #5
SNUPY
Форумчанин
 
Регистрация: 15.02.2008
Сообщений: 621
По умолчанию

ооо заработало =)))).... Спасибо!!!
PS данная задача для меня являеться пробной перед другой, гораздо сложной, где существует порядка 6-и форм схожиш по основным принципам, т.е. их можно представить потомками какого-то класса =)
Помог? Ну так нажми на весы!
SNUPY вне форума Ответить с цитированием
Старый 14.09.2009, 22:56   #6
SNUPY
Форумчанин
 
Регистрация: 15.02.2008
Сообщений: 621
По умолчанию

Я чето не вкачу... =\\\ не может у меня создаться StringGrid, точнее не могу задать его Parent =\\:

Код:
unit FormsUnit;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, Grids,  Unit10, Menus, Buttons, ExtCtrls, ComCtrls, MyStrGrdUnit;

type
  TMotherForm=class(TForm)
    StringGrid:TStringGrid;
    ToolsGrBox, NoteGrBox: TGroupBox;
    OpenProfileBtn, AddUpStrokeBtn, AddDownStrokeBtn, DeleteStrokeBtn,
      CopyBtn, PasteBtn, SaveBtn, PrintBtn, BackBtn, NextBtn, CloseBtn: TButton;
    NoteScrollBox:TScrollBox;
    procedure FormResize(Sender: TObject);
  public
     constructor Create(aOwner:TComponent); override;
  end;{TMotherForm}

  TDataForm1=class(TMotherForm)
{    StringGrid:TStringGrid;
    ToolsGrBox, NoteGrBox: TGroupBox;
    OpenProfileBtn, AddUpStrokeBtn, AddDownStrokeBtn, DeleteStrokeBtn,
      CopyBtn, PasteBtn, SaveBtn, PrintBtn, BackBtn, NextBtn, CloseBtn: TButton;
    NoteScrollBox:TScrollBox;
    procedure FormResize(Sender: TObject);}
  public
     constructor Create(aOwner:TComponent); override;
  end;{TDataForm1}

implementation

uses DateUtils;

{begin TMotherForm}

constructor TMotherForm.Create(aOwner:TComponent);
begin
  StringGrid:=TStringGrid.Create(Self);
  with StringGrid do
  begin
    StringGrid.Parent:=Self;
    left:=0; Top:=0;
  end; {with StringGrid}

  ToolsGrBox:=TGroupBox.Create(Self);
  ToolsGrBox.Parent:=Self;

  OpenProfileBtn:=TButton.Create(Nil);
  with OpenProfileBtn do
  begin
    Parent:=ToolsGrBox;
    caption:='Îòêðûòü àíêåòó äëÿ çàïèñè';
    Height:=33; Width:=169; left:=8; top:=16;
  end; {with OpenProfileBtn}

  self.OnResize:=FormResize;
end;

procedure TMotherForm.FormResize(Sender: TObject);
begin
  ToolsGrBox.Top:=self.ClientHeight-self.Height-19;
  ToolsGrBox.Width:=self.ClientWidth;
  StringGrid.Width:=self.ClientWidth;
  StringGrid.Height:=self.ClientHeight-StringGrid.Top-ToolsGrBox.Height-19;
//  StatusBar1.Width:=self.ClientWidth;
//  StatusBar1.Left:=0;
//  StatusBar1.Top:=self.ClientHeight-StatusBar1.Height;
//  StatusBar1.Width:=Form2.ClientWidth;
//  GroupBox2.Left:=GroupBox1.Width-GroupBox2.Width-8;
end;

{end TMotherForm}

{begin DataForm1}

constructor  TDataForm1.Create(aOwner:TComponent);
begin
 inherited Create(aOwner);
end;

{end DataForm1}
end.
Помог? Ну так нажми на весы!
SNUPY вне форума Ответить с цитированием
Старый 15.09.2009, 08:15   #7
SuperVisor
Павел Сергеевич
Форумчанин
 
Регистрация: 05.11.2006
Сообщений: 665
По умолчанию

Все потому, что в примере, который тебе написали в коде
Код:
TForm2.Create(aOwner:TComponent);
var btn : TButton;
begin
   inherited Create(aOwner);
   Caption := 'new form. press button';
   Btn:=TButton.Create(Self);
Декларация Self=Form2, а в этом куске кода, который ты написал:
Код:
constructor TMotherForm.Create(aOwner:TComponent);
begin
  StringGrid:=TStringGrid.Create(Self);
  with StringGrid do
  begin
    StringGrid.Parent:=Self;
    left:=0; Top:=0;
  end;
Self=TMotherForm.

Что-то мне подсказывает, что ты хотел сделать вот так:
Код:
constructor TDataForm1.Create(aOwner:TComponent);
begin
  inherited Create(aOwner);
  StringGrid:=TStringGrid.Create(Self);
  with StringGrid do
  begin
    StringGrid.Parent:=Self;
    left:=0; Top:=0;
  end; {with StringGrid}

  ToolsGrBox:=TGroupBox.Create(Self);
  ToolsGrBox.Parent:=Self;

  OpenProfileBtn:=TButton.Create(Nil);
  with OpenProfileBtn do
  begin
    Parent:=ToolsGrBox;
    caption:='Открыть анкету для записи';
    Height:=33; Width:=169; left:=8; top:=16;
  end; {with OpenProfileBtn}

  self.OnResize:=FormResize;
end;
Познавая других, мы познаем себя.
С'est la vie...
SuperVisor вне форума Ответить с цитированием
Старый 15.09.2009, 10:48   #8
SNUPY
Форумчанин
 
Регистрация: 15.02.2008
Сообщений: 621
По умолчанию

Хммм... но мне хотелось, что бы с MotherForm это наследовалось =)))) , ибо будет грош цена этого извращения, т.к. существует еще 6-ть форм должных подобным образом заполняться =)))))

Стоп... я понял.. =)) я реально туплю =)))
Помог? Ну так нажми на весы!

Последний раз редактировалось Stilet; 15.09.2009 в 11:14.
SNUPY вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Наследование beregok Общие вопросы C/C++ 1 04.07.2009 22:39
Наследование z3rg Общие вопросы C/C++ 9 30.04.2009 20:43
наследование методов TaTT DoGG Общие вопросы .NET 4 27.02.2009 01:27
Наследование Кирилл13 Общие вопросы C/C++ 1 11.11.2008 14:47
Классы и наследование. Scratch Общие вопросы C/C++ 9 27.09.2008 16:03