Форум: "Начинающим";
Текущий архив: 2006.08.13;
Скачать: [xml.tar.bz2];
ВнизДва вопроса. Классы и Изображения Найти похожие ветки
← →
Belorus © (2006-07-22 18:34) [0]Два вопроса
1.Как в делфи поместить на форму gif анимацию.
2.Мне нужно создать объект . Класс либо TMyclass1 либо один из его потомков передаётся в мою функцию. У меня есть свой конструктор для класса TMyclass1 и его потомков.
Как это сделать ?
Если я в качестве передатчика класса беру TClass , то конструктор будет стандартный.
← →
Джо © (2006-07-22 18:38) [1]2.
Если я правильно понял вопрос (а это мудрено :)), тоtype
TMyClassClass = class of TMyClass;
procedure SomeProc (ClassRef: TMyClassClass);
var
Mc: TMyClass;
begin
Mc := ClassRef.Create (...);
← →
Джо © (2006-07-22 18:39) [2]1. Поищи на http://torry.net
← →
PZ (2006-07-23 07:13) [3]1. TRxGIFAnimator
← →
vain © (2006-07-23 16:09) [4]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?
← →
Мефисто (2006-07-23 16:24) [5]
> vain © (23.07.06 16:09) [4]
Как минимум воспользоваться поиском
← →
Belorus © (2006-07-23 19:59) [6]Огромное спасибо.
Разобрался благодаря вам в обоих вопросах.
В 1. Оказалось что есть такая штука ClassRef . Она рулит :)
2. Воспользовался RxLib"овским аниматором.
Спасибо.
← →
Belorus © (2006-07-23 20:39) [7]Ой. Нет . Всё таки первый вопрос ещё стоит.
Я стормозил.
Смотрите.
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);
И вызывается не мой конструктор, а общий.
← →
Джо © (2006-07-23 21:58) [8]> [7] Belorus © (23.07.06 20:39)
type
TGameObjectClass = class of TGameObject;
procedure AddObject(GoClass : TGameObjectClass);
← →
Belorus © (2006-07-24 02:27) [9]Джо спасибо.
Выручил. Всё идеально работает.
Просто не знал о таком приёме.
Спасибо.
Не заметил разницы.
← →
Footballer © (2006-07-24 02:32) [10]
> Мне подсказали скачать RxLib
RxLib - вещь! Мне нравится
← →
PZ (2006-07-24 07:30) [11]> [4] vain © (23.07.06 16:09)
> Позвольте спросить, ув. PZ, что Belorus мог понять из вашего ответа, не зная про RxLib?
Ну так библиотека RX довольно известная. Если нет, задайте дополнительный вопрос.
С уважением, PZ
← →
Belorus © (2006-07-25 13:46) [12]Господа. Исчо вопрос.
Есть класс TClass1.
var SOme : TClass1;
...
Some := GetClass("TClass1").Create; - не работает.
Работает только если TPersistent.
ПОясните если знаете.
← →
Belorus © (2006-07-26 12:44) [13]Это ошибка делфи ?
← →
Сергей М. © (2006-07-26 12:47) [14]
> Это ошибка делфи ?
Это неумение или нежелание читать справку, в которой черным по белому написано:
Returns a registered persistent class given its name.
← →
Belorus © (2006-07-26 18:29) [15]Прочитай заново [12]
Вот заткни в себе свой выпендрёжник. Напряги мозги(если есть) и помоги решить проблему(если можешь конечно)
Так вот по теме :
Справку я прочитал. В том числе и эту фразу. Легче мне не стало.
У меня структура на ~ 800 классов. И очень хотелось бы по имени получить класс. Естественно можно написать свою функцию выполняющую работу делфи, но если есть уже готовая это будет как минимум нерационально.
← →
Джо © (2006-07-26 19:01) [16]> [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, развить и дополнить ее да поможет тебе твое трудолюбие :)
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2006.08.13;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.058 c