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

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

TAnimate в Windows 7 [D5]


harisma ©   (2011-03-30 18:31:00) 

Здравствуйте. Такая проблема. Использую в проекте компоненту TAnimate. Пишу все еще на Д5 (в силу особенностей программы и недостатка знаний для перевода некоторых ее частей на более высокие версии). Так вот, пока работал на WinXP - в этом компоненте при установке CommonAvi = aviCopyFiles и Active = True все отображалось (листики в компоненте летали). Но поставили Win 7 - и никакое встроенное видео в этом компоненте не отображается. Как быть?
В сети и на сайте Эмбаркадеро нашел решение, что надо к проекту подключить модуль ShellAnimations.pas, но это не помогло (хотя я и этот модуль и ресурсные файлы от D2010 к себе перетащил и куда требуется положил). Какие еще будут предложения?


harisma   (2011-03-31 12:40:00) [1]

Не правда. Есть такая галочка. И мы ее используем.


Anatoly Podgoretsky   (2011-03-31 12:29:00) [2]

> harisma  (31.03.2011 11:44:09)  [9]

У ДЛЛ такой галочки нет, оно не имеет отношения к пакетам


harisma   (2011-03-31 12:00:00) [3]


> Animate1.ResHandle := HInstance?

Не понял.


clickmaker   (2011-03-31 11:52:00) [4]

Animate1.ResHandle := HInstance?


harisma   (2011-03-31 11:44:00) [5]

Собственно я нашел другой способ получить то, что мне надо. А именно:
-создал 2 ресурсных файла в каждом из которых находится нужный мне видеоклипик (выкушеный из виндовой Длл Shell32.dll от ВинХР)
-подгружаю эти 2 файла в проект.
- прописываю в коде проекта следующий код:

implementation

{$R *.DFM}
{$R Apply.res}
{$R Cancel.res}

procedure TForm1.Button1Click(Sender: TObject);
begin
 Animate1.ResName := 'Apply';
 Animate1.Active := True;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
 Animate1.ResName := 'Cancel';
 Animate1.Active := True;
end;

- и тут все бы хорошо, но мне эту конструкцию надо использовать не в экзешнике, а в ДЛЛ, причем эта ДЛЛ обязательно с установленной галочкой "Build with runtime packages". Но именно в таком варианте при присвоении
Animate1.ResName := 'Apply';ругается на "Cannot open AVI".
Причем если эту галочку снять, то все будет работать.
Как мне добиться работы ДЛЛ и с установленой этой галочкой?


harisma   (2011-03-31 11:29:00) [6]


> и еще
> if FCommonAVI <> aviNone then Result := GetShellModule
>
> то есть, если грузим свои ресурсы, то и ResHandle должен
> быть того модуля, к которому прилинкованы эти .res

А можно вот это поподробнее?


Anatoly Podgoretsky   (2011-03-31 08:54:00) [7]


> хотя я и этот модуль и ресурсные файлы от D2010 к себе

А ничего, что 2010 ориентирован на Юникод, а Д5 нет и ужасно устарел.


clickmaker   (2011-03-31 00:11:00) [8]

и еще
if FCommonAVI <> aviNone then Result := GetShellModule

то есть, если грузим свои ресурсы, то и ResHandle должен быть того модуля, к которому прилинкованы эти .res


clickmaker   (2011-03-30 23:40:00) [9]

или у них ResID совпадает со стандартными виндозными, и он их сам должен подцепить?
Короче, надо в отладчике смотреть с use debug dcu, чем заканчивается вызов в comctrls.pas
Result := Perform(ACM_OPEN, GetActualResHandle, GetActualResId) <> 0;


clickmaker   (2011-03-30 23:28:00) [10]

так может их цеплять надо через ResName или


harisma   (2011-03-30 19:53:00) [11]

Еще одно замечание. Форма, на которой используется этот компонент, вшита в dll.


harisma   (2011-03-30 19:36:00) [12]

Нет. Там компонента, порожденная от TComponent, но не имеющая ничего нового по сравнению с ним. Только в том модуле подгружаются ресурсные файлы этих общевиндовых авишек.
Собственно вот его исходник:

unit ShellAnimations;
{$WEAKPACKAGEUNIT ON}
interface

uses
 SysUtils, Classes;

{$R FindFolder.res }
{$R FindFile.res }
{$R FindComputer.res }
{$R CopyFiles.res }
{$R CopyFile.res }
{$R RecycleFile.res }
{$R EmptyRecycle.res }
{$R DeleteFile.res }

type
 TShellResources = class(TComponent)
 end;
 
implementation

end.


clickmaker   (2011-03-30 18:40:00) [13]

> надо к проекту подключить модуль ShellAnimations.pas

а что в этом модуле? Замена стандартного TAnimate?


Наверх

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