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