|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Delphi - WinApi||C++Builder(Delphi) SplashScreen в отдельном потоке? |
|
Delphi - WinApi||C++Builder(Delphi) SplashScreen в отдельном потоке?
|
Ветеран Сообщения: 878 |
Собственно сабж.
Т.к. иногда во время загрузки программы происходит различная ресурсоемкая работа с БД или с другими ресурсами. Необходимо чтобы появился SplashScreen на нем игралась какая-нибудь анимация, а по завершению инициализации программы он закрылся. |
|
Отправлено: 11:09, 11-03-2007 |
![]() Обратный инженер Сообщения: 644
|
Профиль | Отправить PM | Цитировать XCodeR
Я бы сделал что-то наподобие следующего(извини,что код на асме,просто мне влом браться за дельфи ![]() MainProc proc ; /* Создаём событие, которое будет служить сигналом */ push offset szSplash push FALSE ; Создаём событие как nonsignaled push TRUE ; Создаём manual-reset событие push NULL call CreateEventA mov hSplashEvent, eax ; /* Создаём поток */ push NULL push NULL push NULL push offset ShowSplash ; адрес процедуры, где будет создаватся SplashScreen push NULL push NULL call CreateThread mov hSplashRoutineThread, eax ; /* Имитируем ресурсоёмкую работу */ push 10000 call Sleep ; /* Теперь меняем состояние события, сигнализируя о конце ресурсоёмкой работы */ push hSplashEvent call SetEvent ; /* Закрываем описатель потока */ push hSplashRoutineThread call CloseHandle ; /* Закрываем описатель события */ push hSplashEvent call CloseHandle ret MainProc endp ShowSplash proc ; /* Регистрируем класс создаваемого splash-окна */ ... ; /* Создаём само окно */ ... ; /* Ждём сигнала из основного потока */ push INFINITE push hSplashEvent call WaitForSingleObject ; /* Теперь, когда функция WaitForSingleObject возвратится, уничтожаем окно и снимаем регистрацию класса */ ... ; /* Закрываем поток */ push NULL call ExitThread ShowSplash endp Примерно так... |
------- Отправлено: 11:19, 12-03-2007 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Ветеран Сообщения: 878
|
Профиль | Сайт | Отправить PM | Цитировать DillerInc
арр, не люблю я ассемблер.... (( но будем разбираться - Спасибо... |
Отправлено: 16:46, 12-03-2007 | #3 |
![]() Обратный инженер Сообщения: 644
|
Профиль | Отправить PM | Цитировать Цитата:
![]() Лады,попробуем тогда так: var SplashWindowClass : TWndClass; hSplashWnd, hSplashEvent, hSplashRoutineThread : HWND; function SplashWindowProc(hWnd : HWND; uMsg : UINT; wParam : WPARAM; lParam : LPARAM) : LRESULT; stdcall; begin Result := DefWindowProc(hWnd, uMsg, wParam, lParam); if uMsg = WM_DESTROY then PostQuitMessage(0); end; // SplashWindowProc procedure MainProc; hSplashEvent := CreateEvent(0, true, false, 'SplashEvent'); hSplashRoutineThread := CreateThread(0, 0, @ShowSplashWindow, 0, 0, 0); Sleep(10000); SetEvent(hSplashEvent); CloseHandle(hSplashRoutineThread); CloseHandle(hSplashEvent); end; // MainProc procedure ShowSplashWindow; SplashWindowClass.style := CS_HREDRAW or CS_VREDRAW; SplashWindowClass.lpfnWndProc := @SplashWindowProc; SplashWindowClass.hInstance := Instance; SplashWindowClass.hIcon := LoadIcon(0, IDI_APPLICATION); SplashWindowClass.hCursor := LoadCursor(0, IDC_ARROW); SplashWindowClass.hbrBackground := COLOR_BACKGROUND; SplashWindowClass.lpszClassName := 'Splash'; RegisterClass(SplashWindowClass); hSplashWnd := CreateWindow('Splash', 'SplashScreen', WS_POPUP, 350, 300, 400, 250, 0, 0, Instance, NIL); ShowWindow(hSplashWnd, SW_SHOW); UpdateWindow(hSplashWnd); WaitForSingleObject(hSplashEvent, INFINITE); DestroyWindow(hSplashWnd); UnregisterClass('Splash', Instance); ExitThread(0); end; // ShowSplashWindow |
|
------- Отправлено: 18:47, 12-03-2007 | #4 |
Ветеран Сообщения: 878
|
Профиль | Сайт | Отправить PM | Цитировать DillerInc
вот так уже лучше) видны знакомые буковки) еще раз спасибо. |
|
Отправлено: 19:51, 12-03-2007 | #5 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Win32API: Оптимальная организация асинхронного чтения COM-порта в отдельном потоке | CyraxZ | Программирование и базы данных | 3 | 19-02-2007 10:02 | |
Delphi - *Флейм* | Delphi. Синтаксис. Использование WinAPI | DillerInc | Программирование и базы данных | 60 | 13-03-2006 21:36 | |
Delphi - Win32 API | Delphi | Странности с Winapi Timer | Mavlyudov | Программирование и базы данных | 4 | 14-11-2005 10:10 | |
Delphi - Delphi, WinAPI | Корректное завершение программы | fossil | Программирование и базы данных | 6 | 10-08-2005 14:52 | |
Delphi - *Решено* | Использование WinAPI под Delphi | Savant | Программирование и базы данных | 2 | 14-01-2005 21:40 |
|