Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
15-1152882456
HeadHunter
2006-07-14 17:07
2006.08.13
Горячая вакансия для С++ программистов (Минск)


1-1151645168
tButton
2006-06-30 09:26
2006.08.13
геометрия: пересечение окружности отрезком


15-1153206943
tButton
2006-07-18 11:15
2006.08.13
демография (косвенно)


15-1152966609
Ketmar
2006-07-15 16:30
2006.08.13
напомните мне, чем чревато no 80-conductor cable


15-1153130774
QuickFinder
2006-07-17 14:06
2006.08.13
Слово о МЯСЕ





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский