Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.08.13;
Скачать: CL | DM;

Вниз

Два вопроса. Классы и Изображения   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.029 c
3-1149754224
Still Swamp
2006-06-08 12:10
2006.08.13
Как мне получить список параметров IBTransaction?


15-1152693914
Furyz-dimodim
2006-07-12 12:45
2006.08.13
Биллинг ... и учет траффика


15-1153143313
Separator
2006-07-17 17:35
2006.08.13
Текстовый редактор с подсветкой синтаксиса


3-1149599458
VALUA
2006-06-06 17:10
2006.08.13
Копия формы


6-1143618622
MegaVolt
2006-03-29 11:50
2006.08.13
Как тестировать сетевое приложение?