display

Тема в разделе "WASM.BEGINNERS", создана пользователем trr, 23 дек 2009.

  1. trr

    trr New Member

    Публикаций:
    0
    Регистрация:
    26 дек 2006
    Сообщения:
    52
    Есть такая штука EnumDisplaySettings, во втором параметре должен быть интеречующий меня Mode. Но как узнать какой сейчас Mode поставлен?
     
  2. cupuyc

    cupuyc New Member

    Публикаций:
    0
    Регистрация:
    2 апр 2009
    Сообщения:
    763
    msdn рулит :))) ENUM_CURRENT_SETTINGS
     
  3. trr

    trr New Member

    Публикаций:
    0
    Регистрация:
    26 дек 2006
    Сообщения:
    52
    угу, но где будет циферка текущего Мода?
     
  4. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.899
    trr
    Код (Text):
    1. .code
    2.     mov edi,offset lpDevMode; запоминаю указатель на структуру в edi
    3.     push edi
    4.     push ENUM_CURRENT_SETTINGS
    5.     push 0
    6.     call _imp__EnumDisplaySettingsA@12;получаю текущую моду
    7.     assume edi:ptr DEVMODE
    8.     mov [edi].dmPelsWidth,800;новые значения ширины и высоты экрана
    9.     mov [edi].dmPelsHeight,600;
    10.         mov [edi].dmFields,(DM_PELSWIDTH or DM_PELSHEIGHT);меняю только ширину и высоту
    11.     assume edi:nothing
    12.     push CDS_UPDATEREGISTRY;изменится разрешение с обновлением параметров в реестре
    13.     push edi
    14.     call _imp__ChangeDisplaySettingsA@8
    15. .data
    16. lpDevMode DEVMODE <>
     
  5. trr

    trr New Member

    Публикаций:
    0
    Регистрация:
    26 дек 2006
    Сообщения:
    52
    Да нет же, если сделать так, то придется сохранять предыдущие значения width,height и другие, или весь DEVMODE чтобы потом вернуть как было. Вот мне и интересно как получить номер текущего Мода, а не его параметры.
     
  6. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.899
    trr
    Код (Text):
    1. modes:array[0..255] of TDevMode;
    2. var i:integer;
    3. begin
    4. ListBox1.ItemClear;
    5. i:=0;
    6. while EnumDisplaySettings(nil, i, modes[i]) do
    7. begin
    8. ListBox1.Item.Add(IntToStr(modes[i].dmBitsPerPel)+' ' +IntToStr(modes[i].dmPelsWidth)+' '
    9. IntToStr(modes[i].dmPelsHeight)+' '+IntToStr(modes[i].dmDisplayFrequency));
    10. inc(i); end; end;
    11. ...
    12. begin
    13. modes[ListBox1.ItemIndex].dmFields:=DM_BITSPERPEL or DM_PELSWIDTH or DM_PELSHEIGHT or DM_DISPLAYFLAGS or
    14. DM_DISPLAYFREQUENCY;
    15. ChangeDisplaySettings(modes[ListBox1.ItemIndex], CDS_UPDATEREGISTRY); end;