![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Запуск флеш-заставки вместо сплэш скрина [D2005, XP]
programmer90 © (2008-11-02 15:19:00)Здравстуйте уважаемые мастера!
Такой вопрос: Как запуская прогу можно запустить флеш-заставку (.swf)?
Благодарю-с :)
programmer90 (2008-11-02 23:55:00) [1]Вся проблема что я не польностью понимаю суть этих процедур(initialize\uninicialize\ и.т.п.
Пройдет некоторое время можно будет уже лучше ориентироваться.
Спс за разъяснения и за критику. :)
sniknik (2008-11-02 23:35:00) [2]> Так бы раньше и сказали!
так я сразу и сказал, как только увидел что ты делаешь в [19], в [20] сказал, потом подумал и решил пояснить ([21]).
до того как увидел, я и представить себе не мог, что такое можно допустить... это против всякой логики, не только в программировании, это типа ставишь лестницу, кто то на неё забирается начинает яблоки собирать, а ты подходишь и её убираешь... ну кто в здравом уме может подумать, что это нужно разъяснять? что так не делают, что человек упадет, а убирать можно только после того как тот слезет.
Anatoly Podgoretsky (2008-11-02 23:04:00) [3]
> Loginov Dmitry © (02.11.08 22:04) [22]
By default, the call to Initialize for the application does nothing because the default InitProc pointer is nil
programmer90 (2008-11-02 22:31:00) [4](02.11.08 19:48) [21]
Я прочитал это сообщение.Эврика!Так бы раньше и сказали!
"разынициализацию" COM ты должен делать только после free твоего объекта. (что от чего зависит в той последовательности и делается)
Кароче ждем пока эта прцедурка выполниться в частности tIMER1.Enabled:=TRUE, проиграется флеш, примерно 8-9 с.
Затем в результате остановки таймера (то есть это и есть "free") выполняем эту хрень- CoUninitialize.
sniknik ©, да будет благославенна прога твоя!
Спс всем мастерам!
Loginov Dmitry (2008-11-02 22:04:00) [5]> [19] programmer90 (02.11.08 19:26)
Предлагаю вызовApplication.Initialize;разместить непосредственно после BEGIN. В этом случае дополнительно вызывать Coinitialize() и CoUninitialize не требуется. Вызов Coinitialize() осуществляется как раз при вызовеApplication.Initialize.
sniknik (2008-11-02 19:48:00) [6]инициализация COM необходима для работы того объекта, который видимо использует activx, и вот он только начинает работать, опираясь на сом модель, и тут ты раз, и её "убиваешь". AV неизбежен.
"разынициализацию" COM ты должен делать только после free твоего объекта. (что от чего зависит в той последовательности и делается)
sniknik (2008-11-02 19:40:00) [7]> я не настолько чайник
думаю настолько, и даже ещё хуже...
хотя, довольно разумный, не партизанишь...
> Если быть точнее вот такая процедурка в сплеш модуле:
> procedure TSplashForm.Form Activate(Sender: TObject);
>
> CoUninitialize;
> tIMER1.Enabled:=TRUE;
> end;
у тебя объект начинает и заканчивает работу в активации формы?
programmer90 (2008-11-02 19:26:00) [8]Если быть точнее вот такая процедурка в сплеш модуле:
procedure TSplashForm.FormActivate(Sender: TObject);
begin
Coinitialize(nil);
flash:= TShockwaveFlash.Create(self);
flash.Parent := Self;
flash.Width:=500;
flash.Height:=400;
Top:=Screen.Height div 2-Height div 2;
left:=Screen.Width div 2-Width div 2;
flash.LoadMovie(0, 'c:\progra~1\FPSE\logo.swf');
flash.Play;
CoUninitialize;
tIMER1.Enabled:=TRUE;
end;
и так написано в соурсе вью:
begin
try
SplashForm := TSplashForm.Create(Application);
SplashForm.Show;
SplashForm.Update;
repeat
Application.ProcessMessages;
until splashForm.CloseQuery;
SplashForm.Hide;
finally
SplashForm.Free;
end;
Application.Initialize;
Application.Title := 'FPSE';
Application.MainFormOnTaskbar := True;
Application.CreateForm(TMainForm, MainForm);
Application.CreateForm(TAboutForm, AboutForm);
Application.CreateForm(TPref, Pref);
Application.Run;
end.
programmer90 (2008-11-02 19:24:00) [9]я так тоже выставлял...я не настолько чайник просто в этом случае появлялась другая ошибка "Аксесвиолашн" был...
А по закону мерфи одна более сильная ошибка погашает более слабую))))))
sniknik (2008-11-02 18:27:00) [10]> "Инкомпатибл тайпс -"Поинтер" и "Вариант"
опять текст ошибки на болгарском...
> если можно код подскажите....я проанализирую
пусть тебе будет стыдно...
код
begin
CoInitialize(nil);
...
анализируй.
и не забудь что вызовы инициализации и "разынициализации" строго парные.
programmer90 (2008-11-02 17:26:00) [11]если можно код подскажите....я проанализирую
очень нужен плиз...
programmer90 (2008-11-02 17:03:00) [12]Первые три предложения понятны. Мол надо подключать чтобы пользоваться и надо сначала коинициализировать прежде чем вызывать ГетМаллок.
Дальше я поставил
CoInitialize(null); выставил вот резалт:
"Инкомпатибл тайпс -"Поинтер" и "Вариант"
Palladin (2008-11-02 16:26:00) [13]The CoInitialize function initializes the Component Object Model(COM) library. You must initialize the library before you can call its functions. Applications must call CoInitialize before they make any other COM library calls with two exceptions: the CoGetMalloc function, and memory allocation calls.
HRESULT CoInitialize(
LPVOID pvReserved //Reserved, must be NULL
);
Parameter
pvReserved
In 32-bit OLE, this parameter must be NULL. The 32-bit version of OLE does not support applications replacing OLE's allocator and if the parameter is not NULL, CoInitialize returns E_INVALIDARG.
Return Values
S_OK
Indicates the library was initialized successfully.
S_FALSE
Indicates that the library is already initialized or that it could not release default allocator.
E_OUTOFMEMORY
Indicates that it was unable to initialize because the system is out of memory.
E_INVALIDARG
Indicates the argument is invalid.
E_UNEXPECTED
Indicates an unexpected error occurred.
Comments
You need to call this before you call any of the OLE library functions unless you call the OleInitialize function, which calls CoInitialize internally.
Typically, CoInitialize is called only once in the process that uses the OLE library. There can be multiple calls, but subsequent calls return S_FALSE. To close the library gracefully, each successful call to CoInitialize, including those that return S_FALSE, must be balanced by a corresponding call to the CoUninitialize function.
programmer90 (2008-11-02 16:11:00) [14]у меня нету его....Delphi2007
может ссылочку дадите?
Palladin (2008-11-02 16:08:00) [15]IDE\Menu\Help\Windows SDK\Предметный указатель\"CoInitialize"\ энтер
наслаждаемся описанием
programmer90 (2008-11-02 16:04:00) [16]нашел вроде в ActiveX
теперь код будет примено таким
CoInitialize(бла-бла-бла)
flash:= TShockwaveFlash.Create(self);
flash.Parent := Self;
flash.Width:=500;
flash.Height:=400;
Top:=Screen.Height div 2-Height div 2;
left:=Screen.Width div 2-Width div 2;
flash.LoadMovie(0, 'c:\progra~1\FPSE\logo.swf');
flash.Play;
CoUninitialize;
Я прав? И какие параметры ему нужны?
Palladin (2008-11-02 15:54:00) [17]ну так вот, "вызов CoInitialize" ничем не отличается... кроме того, что нужно чуток напрячся и найти модуль в котором CoInitialize определена. Справка в этом очень поможет, а так же подскажет про то - зачем нужен потом вызов CoUninitialize
programmer90 (2008-11-02 15:54:00) [18]а что можно сделать?
programmer90 (2008-11-02 15:51:00) [19]ну это да :)
Palladin (2008-11-02 15:31:00) [20]хм... плохо как с терминологоией...
пойдем по другому пути ("привези мне цветочек аленький")
ты знаешь, что такое вызов функции/процедуры ?