![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Два вопроса. Классы и Изображения
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 (...);