Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Игры";
Текущий архив: 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
14-1097262338
YurikGL
2004-10-08 23:05
2004.10.31
Уязвимость Microsoft Office и чем плоха свобода информации


1-1097746852
jenbond
2004-10-14 13:40
2004.10.31
Нужен совет в работе прогораммы


14-1097323092
андрей_
2004-10-09 15:58
2004.10.31
Какой монитор долговечнее?


4-1095947982
MakNik
2004-09-23 17:59
2004.10.31
Имя компьютера


14-1097275955
saNat
2004-10-09 02:52
2004.10.31
Rational Rose





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