![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как сменить наследника у фрейма с .dfm-файлом [D5, Win95/98, NT4, WinXP]
Smithson © (2002-11-29 11:10:00)Вопрос следующий: Есть n фреймов, полученных командой File->New Frame. Они отлажены и отлично работают в проекте. Теперь возникла необходимость подвести их все к одному предку (наследнику от TFrame, имеющему некую общую для них всех функциональность). Просто смена наследника в модуле блокируется Delphi. Как это можно сделать?
Smithson (2002-11-30 12:20:00) [1]И все-так фигня.
При компиляции проекта в .dfm модуль Delphi пихает массу всяких полей, исполнимый файл компилится, а потом при попытке использовать такой фрэйм возникает исключение "неизвестное свойство OldCreateOrder".
// Описание самого фрэйма
TFrameRegisterWare = class(TSmithFrame)
Label1: TLabel;
EmpList: TComboBox;
Label2: TLabel;
WareList: TComboBox;
Label3: TLabel;
Inventar: TEdit;
ButtonFindFreeInv: TSpeedButton;
Label4: TLabel;
Serial: TEdit;
Label5: TLabel;
Label6: TLabel;
Label7: TLabel;
Room: TEdit;
StatusList: TComboBox;
Info: TMemo;
Label8: TLabel;
Billing: TEdit;
Label9: TLabel;
BillDate: TEdit;
procedure EmpListChange(Sender: TObject);
procedure WareListChange(Sender: TObject);
procedure ButtonFindFreeInvClick(Sender: TObject);
procedure SerialExit(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
FBillID: String;
Procedure Init; override; // инициализация фрейма
Procedure Start(cBill: String); // инициализация фрейма, cBill - номер по таблице BillItem
Procedure AddData; // Регистрирует вещь в warehouse
end;
// Цитата из dfm файла
object FrameRegisterWare: TFrameRegisterWare
Left = 0
Top = 0
Width = 455
Height = 291
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = "MS Sans Serif"
Font.Style = []
OldCreateOrder = True /// Откуда это гавно???
PixelsPerInch = 96
TextHeight = 13
Smithson (2002-11-29 14:34:00) [2]Мда. Спасибо. Вчера при попытке сменить предка и откомпилировать говорило "несовпадение типов" на строку class(TBaseFrame). Сегодня прошло на ура. Видимо, надо хоть изредка перегружать машину.
Спасибо за помощь!
Skier (2002-11-29 13:08:00) [3]>Smithson
>Теперь возникла необходимость подвести их все к одному предку
Тебе нужно наследоваться свой "главный" класс-предок и наследоваться уже от него, обзови его TBaseFrame и дальше
TFrame1 = class(TBaseFrame)
TFrame2 = class(TBaseFrame)
и т.д.
Skier (2002-11-29 13:04:00) [4]>Smithson
> Просто смена наследника в модуле блокируется Delphi.
Вот это штука прекрасно работает !
В чём проблема-то ?
unit Unit2;
TFrame2 = class(TFrame)
private
{ Private declarations }
public
{ Public declarations }
end;
//.............................................
unit Unit3;
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, Unit2;
type
TFrame3 = class(TFrame2)
private
{ Private declarations }
public
{ Public declarations }
end;
Smithson (2002-11-29 12:48:00) [5]Ну товарищи!