Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Два вопроса. Классы и Изображения


Belorus ©   (2006-07-22 18:34:00) 

Два вопроса
1.Как в делфи поместить на форму gif анимацию.
2.Мне нужно создать объект . Класс либо TMyclass1 либо один из его потомков передаётся в мою функцию. У меня есть свой конструктор для класса TMyclass1 и его потомков.  
Как это сделать ?
Если я в качестве передатчика класса беру TClass , то конструктор будет стандартный.


Джо   (2006-07-26 19:01:00) [1]

> [15] Belorus ©   (26.07.06 18:29)

Хамить не нужно.
Волшебства не бывает. Посмотри реализацию механизма GetClass в исходниках и реализуй по образу и подобию для своего базового класса. Упрощенно это может выглядеть вот так:

 // это базовый класс, наследую от него все остальные
 TRegisterableClass = class
 end;

 TRegisterableClassClass = class of TRegisterableClass;

 procedure RegisterMyClass (AClass: TRegisterableClassClass);
 function GetRegisteredClassByName (const AName: string): TRegisterableClassClass;

implementation

uses Contnrs;

var
 RegisteredClasses: TClassList;

procedure RegisterMyClass (AClass: TRegisterableClassClass);
begin
 if RegisteredClasses.IndexOf(AClass) = -1 then
   RegisteredClasses.Add(AClass)
end;

function GetRegisteredClassByName (const AName: string): TRegisterableClassClass;
var
 I: Integer;
begin
 Result := nil;

 for I := 0 to RegisteredClasses.Count-1 do
   if AName = RegisteredClasses[I].ClassName then
   begin
     Result := TRegisterableClassClass(RegisteredClasses[I]);
     Break
   end
end;

initialization
 RegisteredClasses := TClassList.Create;

finalization
 RegisteredClasses.Free;

end.

Для каждого класса, который ты пожелаешь зарегистрировать нужно будет вызвать RegisterMyClass. Основная идея замствована из механизма GetClass, развить и дополнить ее да поможет тебе твое трудолюбие :)


Belorus   (2006-07-26 18:29:00) [2]

Прочитай заново  [12]

Вот заткни в себе свой выпендрёжник. Напряги мозги(если есть) и помоги решить проблему(если можешь конечно)

Так вот по теме :

Справку я прочитал. В том числе и эту фразу. Легче мне не стало.

У меня структура на ~ 800 классов. И очень хотелось бы по имени получить класс. Естественно можно написать свою функцию выполняющую работу делфи, но если есть уже готовая это будет как минимум нерационально.


Сергей М.   (2006-07-26 12:47:00) [3]


> Это ошибка делфи ?


Это неумение или нежелание читать справку, в которой черным по белому написано:

Returns a registered persistentclass given its name.


Belorus   (2006-07-26 12:44:00) [4]

Это ошибка делфи ?


Belorus   (2006-07-25 13:46:00) [5]

Господа. Исчо вопрос.

Есть класс TClass1.

var SOme : TClass1;

...

Some := GetClass('TClass1').Create;   - не работает.
Работает только если TPersistent.

ПОясните если знаете.


PZ   (2006-07-24 07:30:00) [6]

> [4] vain ©   (23.07.06 16:09)
> Позвольте спросить, ув. PZ, что Belorus мог понять из вашего ответа, не зная про RxLib?

Ну так библиотека RX довольно известная. Если нет, задайте дополнительный вопрос.

С уважением, PZ


Footballer   (2006-07-24 02:32:00) [7]


> Мне подсказали скачать RxLib

RxLib - вещь! Мне нравится


Belorus   (2006-07-24 02:27:00) [8]

Джо спасибо.
Выручил. Всё идеально работает.
Просто не знал о таком приёме.
Спасибо.
Не заметил разницы.


Джо   (2006-07-23 21:58:00) [9]

> [7] Belorus ©   (23.07.06 20:39)

type
 TGameObjectClass = class of TGameObject;

procedure AddObject(GoClass : TGameObjectClass);


Belorus   (2006-07-23 20:39:00) [10]

Ой. Нет . Всё таки первый вопрос ещё стоит.
Я стормозил.

Смотрите.



arr  : array  of TObject;

procedure AddObject(CL : TClass);
begin

Arr[Next] :=Cl.Create;

end;

constructor TGameObject.Create(Othche : TGameObject);
begin
Showmessage('Created GameObject');
Father:=Othche;
Attributes:=TStringList.Create;
Arr[Next]:=self;
self.Pos.X:=Father.Pos.X;
self.Pos.Y:=Father.Pos.Y;
Inc(next);
end;


Вызываю цепочку так AddObject(TGameObject);

И вызывается не мой конструктор, а общий.


Belorus   (2006-07-23 19:59:00) [11]

Огромное спасибо.

Разобрался благодаря вам в обоих вопросах.

В 1. Оказалось что есть такая штука ClassRef . Она рулит :)
2. Воспользовался RxLib'овским аниматором.

Спасибо.


Мефисто   (2006-07-23 16:24:00) [12]


> vain ©   (23.07.06 16:09) [4]


Как минимум воспользоваться поиском


vain   (2006-07-23 16:09:00) [13]

1. Недавно сам столкнулся с такой же проблемой. Мне подсказали скачать RxLib. А там есть компонента TRxGIFAnimator, на которую ссылаетя PZ. Здесь можно скачать RxLib для Delphi 2005: http://www.delphiplus.org/projects/rx/downloads/lib/rx275d2005_qmd.zip
Там же и для других версий есть.

> PZ   (23.07.06 07:13) [3]
>
> 1. TRxGIFAnimator

Позвольте спросить, ув. PZ, что Belorus мог понять из вашего ответа, не зная про RxLib?


PZ   (2006-07-23 07:13:00) [14]

1. TRxGIFAnimator


Джо   (2006-07-22 18:39:00) [15]

1. Поищи на http://torry.net


Джо   (2006-07-22 18:38:00) [16]

2.
Если я правильно понял вопрос (а это мудрено :)), то
type
 TMyClassClass = class of TMyClass;

procedure SomeProc (ClassRef: TMyClassClass);
var
 Mc: TMyClass;
begin
 Mc := ClassRef.Create (...);


Наверх

Титульная страница Поиск, карта сайта Написать письмо