Модераторы: Poseidon, Snowy, bems, MetalFan

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> массив классов, не объектов, а именно классов! 
V
    Опции темы
shmelina
Дата 29.6.2009, 13:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 66
Регистрация: 5.6.2009

Репутация: нет
Всего: нет



Это не строка, это TClass. 
Код

type
  TWinTblClass = record
    Table: string;
    ClassName: TClass;
  end;

var
  WinTblClassArray: array [0..3] of TWinTblClass = (
  (Table: 'OBJ'; ClassName: TWinTblObj),
  (Table: 'FLD'; ClassName: TWinTblFld),
  (Table: 'TBL'; ClassName: TWinTblTbl),
  (Table: 'CARD'; ClassName: TWinTblCard)
  );


И ты сам же так предложил:
Код

obj: TObject;  //родительский класс
cl: array [0..1] of TClass = (TStringList, TObject);//потомки
procedure TForm21.Button1Click(Sender: TObject);
begin
  obj := cl[0].Create;//создаем нужный потомок
  TStringList(obj).Add('fff');
  caption := TStringList(obj).Text
  obj.Free;
end;

PM MAIL   Вверх
Frees
Дата 29.6.2009, 13:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2233
Регистрация: 2.12.2005
Где: Екатеринбург

Репутация: 9
Всего: 54



Цитата(shmelina @  29.6.2009,  16:00 Найти цитируемый пост)
Это не строка, это TClass. 

уже понял ....  выше исправил


--------------------
Кольцов Виктор Владимирович
PM MAIL ICQ   Вверх
shmelina
Дата 29.6.2009, 13:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 66
Регистрация: 5.6.2009

Репутация: нет
Всего: нет



Цитата(Frees @ 29.6.2009,  12:51)
для начала
Код

Result := TWinTbl(WinTblClassArray[I].ClassName.Create(ATbl));

Не выходит. Компилятор ожидает конструктор без параметров. Оно и понятно.

Добавлено @ 13:17
Привожу на всякий случай полную часть кода обсуждаемой проблемы.
Есть процедура, которая возвращает нужный класс. Возвращает базовый класс или одного из его потомков.
Выбирает какой класс создать через многоэтажный IF. Хочется как-то переделать это через массив. 
В функции CreateWinTbl часть кода  закоментирована. Эта как раз та часть, которая работает. Пытаюсь переделать на работу с массивом.
Код

type
  TWinTblClass = record
    Table: string;
    ClassName: TClass;
  end;

var
  WinTblClassArray: array [0..3] of TWinTblClass = (
  (Table: 'OBJ'; ClassName: TWinTblObj),
  (Table: 'FLD'; ClassName: TWinTblFld),
  (Table: 'TBL'; ClassName: TWinTblTbl),
  (Table: 'CARD'; ClassName: TWinTblCard)
  );

function CreateWinTbl(AOwner: TComponent; AParent: TWinControl; ATbl: TTbl; AUserId: Integer; AObjLink: TObjLink): TWinTbl;
var
  I: Integer;
begin
  Result := nil;
  for I := 0 to Length(WinTblClassArray) - 1 do
    if WinTblClassArray[I].Table = ATbl.Obj.Table then
    begin
      Result := TWinTbl(WinTblClassArray[I].ClassName).Create(AOwner, AParent, ATbl, AUserId, AObjLink);
      Break;
    end;

{  if ATbl.Obj.Table = 'OBJ' then
    Result := TWinTblObj.Create(AOwner, AParent, ATbl, AUserId, AObjLink)
  else
  if ATbl.Obj.Table = 'FLD' then
    Result := TWinTblFld.Create(AOwner, AParent, ATbl, AUserId, AObjLink)
  else
  if ATbl.Obj.Table = 'TBL' then
    Result := TWinTblTbl.Create(AOwner, AParent, ATbl, AUserId, AObjLink)
  else
  if ATbl.Obj.Table = 'CARD' then
    Result := TWinTblCard.Create(AOwner, AParent, ATbl, AUserId, AObjLink)
  else
    Result := TWinTbl.Create(AOwner, AParent, ATbl, AUserId, AObjLink);}
end;


Это сообщение отредактировал(а) shmelina - 29.6.2009, 13:18
PM MAIL   Вверх
Frees
Дата 29.6.2009, 13:29 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2233
Регистрация: 2.12.2005
Где: Екатеринбург

Репутация: 9
Всего: 54



Цитата(shmelina @  29.6.2009,  16:10 Найти цитируемый пост)
Не выходит. Компилятор ожидает конструктор без параметров.

не дочитал мое сообщение

Код

type
  TMyClass = class of TWinTbl;//!!!

  TWinTblClass = record
    Table: string;
    ClassName: TMyClass;//!!!
  end;




--------------------
Кольцов Виктор Владимирович
PM MAIL ICQ   Вверх
shmelina
Дата 29.6.2009, 15:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 66
Регистрация: 5.6.2009

Репутация: нет
Всего: нет



Спасибо! Получилось!
Вопрос, в принципе, был не критичный, но уж очень хотелось его красиво реализовать.
Пойду почитаю что такое TClass2 = class of TClass1. Никогда не пользовался.
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.2812 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.