Форум: "Начинающим";
Текущий архив: 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