Форум: "Игры";
Текущий архив: 2004.10.31;
Скачать: [xml.tar.bz2];
ВнизOpenGL без VCL Найти похожие ветки
← →
Xerx © (2004-06-28 04:03) [0]Привет мастера! Вопрос для тех, кто творил программы без VCL, а так же (желательно) работает в XP с установленным Windows Media 9.
Пишу программу на OpenGL. Она работает в полный экран, т.е. должна перекрывать остальные окна во время своей работы! Но у WM9 есть такая возможность (если кто не знает): его можно свернуть на панель задач левее трея, сразу за языковой панелью. Появляется маленькая панель с основными кнопками управления. Также можно отображать небольшое окошко зрительных образов, оно постоянно висит НАД ВСЕМИ окнами, кроме Диспетчера задач. Так вот, какой стиль должно иметь моё окно, чтобы быть НАД этим окном! А то прикольной вид получается: работает моя программа в полный экран, а углу небольшое окошко, которое ОТРИСОВЫВАЕТСЯ! Не убивать же мне WM9 при запуске программы :(
P.S. Я пробовал разные стили, но либо я не те группировал (WS_POPUP or WS_EX_TOPMOST or ets.), либо что-то другое. Только не надо говорить, что это гены ;)
P.P.S. И ещё вопросик сразу. Каким образом можно проверить уровень поддержки OpenGL на компьютере. А то сделал игрушку на 72fps, а у друга, вполне нормально играющего в игрушки на GL, тянет около 0.3fps! Мне даже смеяться не хочется... В чём дело? Как можно определить: будет работать, или нет. Или есть нечто, чего я не знаю? И не надо меня посылать к книжкам М. Краснова - у меня обе, и ни в одной (особо по GL) я не нашёл ничего подобного!
← →
VitGun © (2004-06-28 05:53) [1]Так...чего-то я не догнал причем тут WMP9?
← →
ViK © (2004-06-28 06:01) [2]Чтобы твое окно было поверх WM9 скорее всего придется использовать DirectX, посмотри примеры 37,47 и 70 на DelphiGFX
У меня тоже был косяк с fps"ами: если используешь сглаживание, то на некоторых дровах бывает такой глюк
← →
smb (2004-06-28 09:46) [3]Для полноэкранного в OpenGL должно быть так.
,WS_POPUP or WS_CLIPCHILDREN or WS_CLIPSIBLINGS,
При создании класса окна стиль CS_HREDRAW or CS_VREDRAW or CS_OWNDC; вдруг поможет :)
А вообще лучше всего с DirectDraw менять разрешение...
← →
КиТаЯц © (2004-06-28 11:00) [4]Проблемма решается так:
procedure TMainForm.SetModeF(Sender: TObject);
begin
Application.MainForm.Hide;
ShowWindow(FindWindow("Shell_TrayWnd", nil), SW_HIDE);
...
здесь меняем экранное разрешение
...
FormStyle:=fsStayOnTop;
BorderStyle:=bsNone;
WindowState:=wsMaximized;
SetWindowLong(Handle, GWL_STYLE, GetWindowLong(Handle, GWL_STYLE) and not WS_CAPTION); // прячем все WMP и вообще все что лежит на панели задач
Cursor:=crNone;
Application.MainForm.Show;
end;
procedure TMainForm.SetModeW(Sender: TObject);
begin
Application.MainForm.Hide;
WindowState:=wsNormal;
FormStyle:=fsNormal;
BorderStyle:=bsSingle;
Cursor:=crDefault;
...
здесь меняем экранное разрешение
...
ShowWindow(FindWindow("Shell_TrayWnd", nil), SW_SHOWNA); // показываем все WMP и вообще все что лежит на панели задач
Position:=poScreenCenter;
Application.MainForm.Show;
end;
И еще. Это надо чтобы при выходе из приложения в полноэкранном режиме все вернутьprocedure TMainForm.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
if FullScreen then begin // глобальная булевая переменная
...
восстанавливаем экранное разрешение
...
if ShowWindow(FindWindow("Shell_TrayWnd", nil), SW_SHOWNA)
then CanClose:= True;
end;
end;
← →
КиТаЯц © (2004-06-28 11:03) [5]:) Поправка... Читать ремарку так
...
ShowWindow(FindWindow("Shell_TrayWnd", nil), SW_HIDE); // прячем все WMP и вообще все что лежит на панели задач
...
SetWindowLong(Handle, GWL_STYLE, GetWindowLong(Handle, GWL_STYLE) and not WS_CAPTION);
...
← →
Xerx © (2004-06-30 04:42) [6]VitGun, подъезжай, мы подождем... щучу...
На самом деле все гораздо проще. И, КиТаЯц, БЕЗ VCL, я ж писал!!
Делать надо вот так:
with WindowClass do
begin
Style := 0;
...
end;
RegisterClass (WindowClass);
Window := CreateWindow(
AppClass,
AppName,
WS_POPUP or WS_EX_TOPMOST,
{$WARNINGS OFF}
cw_UseDefault,
cw_UseDefault,
cw_UseDefault,
cw_UseDefault,
{$WARNINGS ON}
0,
0,
HInstance,
nil
);
SetWindowPos(Window, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE or SWP_NOSIZE or SWP_NOACTIVATE);
ShowWindow(Window, SHOW_FULLSCREEN);
← →
DeadMeat © (2004-06-30 19:05) [7]> [4] КиТаЯц © (28.06.04 11:00)
> ShowWindow(FindWindow("Shell_TrayWnd", nil), SW_HIDE);
А вот это ИМХО зря... При аварийном завершении твоей проги, кто панель вернёт??
---
...Death Is Only The Begining...
← →
КиТаЯц © (2004-07-01 07:31) [8]
> DeadMeat © (30.06.04 19:05) [7]
> А вот это ИМХО зря... При аварийном завершении твоей проги,
> кто панель вернёт??
А при аварийном завершении Half-Life на Win98 кто экранное разрешение восстанавливает? ;)
Хотя еще вOnDestroy
формыShowWindow(FindWindow("Shell_TrayWnd", nil), SW_SHOWNA)
добавить не помешает...
← →
Xerx © (2004-07-02 04:46) [9]> DeadMeat © (30.06.04 19:05) [7]
> А вот это ИМХО зря... При аварийном завершении твоей проги,
> кто панель вернёт??
Это ты правильно заметил! И нечего показывать на авторов Half-Life пальцами! Ну и пусть не восстанавливает, самому можно.
Страницы: 1 вся ветка
Форум: "Игры";
Текущий архив: 2004.10.31;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.04 c