Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2008.12.14;
Скачать: [xml.tar.bz2];

Вниз

Запуск флеш-заставки вместо сплэш скрина   Найти похожие ветки 

 
programmer90   (2008-11-02 15:19) [0]

Здравстуйте уважаемые мастера!
Такой вопрос: Как запуская прогу можно запустить флеш-заставку (.swf)?
Благодарю-с :)


 
Palladin ©   (2008-11-02 15:20) [1]

а "сплэш скрин", я так полагаю, ты умеешь уже силами своими сделать?


 
programmer90   (2008-11-02 15:23) [2]

Такой код:
procedure TSplashForm.FormActivate(Sender: TObject);
begin
 flash:= TShockwaveFlash.Create(self);
........
end;

ВЫдает ошибку EOleSysError - "Не был произведен вызов CoInitialize"
:(


 
Palladin ©   (2008-11-02 15:25) [3]

да вроде текст ошибки не на болгарском... :)


 
programmer90   (2008-11-02 15:27) [4]

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(TM Application.MainFormOnTaskbar := True;
 Application.CreateForm(TMainForm, MainFormainForm, MainForm);
 Application.CreateForm(TAboutForm, AboutForm);
 Application.CreateForm(TPref, Pref);
 Application.Run;


 
Palladin ©   (2008-11-02 15:28) [5]

как ты воспринимаешь слово "вызов" ? в контексте программирования конечно


 
programmer90   (2008-11-02 15:30) [6]

Ну по тексту "Не был произведен вызов CoInitialize"
можно сказать что "надо воспроизвести вызов CoInitialize"
только вот как?


 
Palladin ©   (2008-11-02 15:31) [7]

хм... плохо как с терминологоией...
пойдем по другому пути ("привези мне цветочек аленький")

ты знаешь, что такое вызов функции/процедуры ?


 
programmer90   (2008-11-02 15:51) [8]

ну это да :)


 
programmer90   (2008-11-02 15:54) [9]

а что можно сделать?


 
Palladin ©   (2008-11-02 15:54) [10]

ну так вот, "вызов CoInitialize" ничем не отличается... кроме того, что нужно чуток напрячся и найти модуль в котором CoInitialize определена. Справка в этом очень поможет, а так же подскажет про то - зачем нужен потом вызов CoUninitialize


 
programmer90   (2008-11-02 16:04) [11]

нашел вроде в 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 16:08) [12]

IDE\Menu\Help\Windows SDK\Предметный указатель\"CoInitialize"\ энтер
наслаждаемся описанием


 
programmer90   (2008-11-02 16:11) [13]

у меня нету его....Delphi2007  
может ссылочку дадите?


 
Palladin ©   (2008-11-02 16:26) [14]

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 17:03) [15]

Первые три предложения понятны. Мол надо подключать чтобы пользоваться и надо сначала коинициализировать прежде чем вызывать ГетМаллок.
Дальше я поставил
CoInitialize(null); выставил вот резалт:
"Инкомпатибл тайпс -"Поинтер" и "Вариант"


 
programmer90   (2008-11-02 17:26) [16]

если можно код подскажите....я проанализирую
очень нужен плиз...


 
sniknik ©   (2008-11-02 18:27) [17]

> "Инкомпатибл тайпс -"Поинтер" и "Вариант"
опять текст ошибки на болгарском...

> если можно код подскажите....я проанализирую
пусть тебе будет стыдно...
код
begin
 CoInitialize(nil);
 ...
анализируй.

и не забудь что вызовы инициализации и "разынициализации" строго парные.


 
programmer90   (2008-11-02 19:24) [18]

я так тоже выставлял...я не настолько чайник просто в этом случае появлялась другая ошибка "Аксесвиолашн" был...
А по закону мерфи одна более сильная ошибка погашает более слабую))))))


 
programmer90   (2008-11-02 19:26) [19]

Если быть точнее вот такая процедурка в сплеш модуле:
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.


 
sniknik ©   (2008-11-02 19:40) [20]

> я не настолько чайник
думаю настолько, и даже ещё хуже...

хотя, довольно разумный, не партизанишь...
> Если быть точнее вот такая процедурка в сплеш модуле:
> procedure TSplashForm.FormActivate(Sender: TObject);
>
>  CoUninitialize;
>  tIMER1.Enabled:=TRUE;
> end;

у тебя объект начинает и заканчивает работу в активации формы?


 
sniknik ©   (2008-11-02 19:48) [21]

инициализация COM необходима для работы того объекта, который видимо использует activx, и вот он только начинает работать, опираясь на сом модель, и тут ты раз, и её  "убиваешь". AV неизбежен.

"разынициализацию" COM ты должен делать только после free твоего объекта. (что от чего зависит в той последовательности и делается)


 
Loginov Dmitry ©   (2008-11-02 22:04) [22]

> [19] programmer90   (02.11.08 19:26)


Предлагаю вызов Application.Initialize; разместить непосредственно после BEGIN. В этом случае дополнительно вызывать Coinitialize() и CoUninitialize не требуется. Вызов Coinitialize() осуществляется как раз при вызове Application.Initialize.


 
programmer90   (2008-11-02 22:31) [23]

(02.11.08 19:48) [21]
Я прочитал это сообщение.
"разынициализацию" COM ты должен делать только после free твоего объекта. (что от чего зависит в той последовательности и делается)
Эврика!Так бы раньше и сказали!
Кароче ждем пока эта прцедурка выполниться в частности tIMER1.Enabled:=TRUE, проиграется флеш, примерно 8-9 с.
Затем в результате остановки таймера (то есть это и есть "free") выполняем эту хрень- CoUninitialize.

sniknik ©, да будет благославенна прога твоя!
Спс всем мастерам!


 
Anatoly Podgoretsky ©   (2008-11-02 23:04) [24]


> 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


 
sniknik ©   (2008-11-02 23:35) [25]

> Так бы раньше и сказали!
так я сразу и сказал, как только увидел что ты делаешь в [19], в [20]  сказал, потом подумал и решил пояснить ([21]).
до того как увидел, я и представить себе не мог, что такое можно допустить... это против всякой логики, не только в программировании, это типа ставишь лестницу, кто то на неё забирается начинает яблоки собирать, а ты подходишь и её убираешь... ну кто в здравом уме может подумать, что это нужно разъяснять? что так не делают, что человек упадет, а убирать можно только после того как тот слезет.


 
programmer90   (2008-11-02 23:55) [26]

Вся проблема что я не польностью понимаю суть этих процедур(initialize\uninicialize\ и.т.п.
Пройдет некоторое время можно будет уже лучше ориентироваться.
Спс за разъяснения и за критику. :)



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2008.12.14;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.51 MB
Время: 0.007 c
15-1223281509
boriskb
2008-10-06 12:25
2008.12.14
Microsoft признал поражение


2-1225983644
barbaroska
2008-11-06 18:00
2008.12.14
Помогите с алгоритмом


2-1225542654
workbench
2008-11-01 15:30
2008.12.14
hook, CBTProc, HCBT_CREATEWND


1-1204398745
Igit
2008-03-01 22:12
2008.12.14
Delphi и FLASH


1-1204016883
Tack
2008-02-26 12:08
2008.12.14
Блокировать попытки приложения выйти на передний план





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский