Конференция "Начинающим" » Убрать рамку окна Win10
 
  • dmk © (16.01.19 19:43) [0]
    Всем привет! Как убрать голубую рамку окна в Windows 10?
    Как здесь: https://hostingkartinok.com/show-image.php?id=2a321c4d40f6bbf02179af63521685e1

    Перепробовал все варианты WS_EX_STYLE и WS_STYLE. Но что то ничего не происходит. Работает только вариант WS_EX_TOOLWINDOW, но мне хочется сохранить системное меню сверху. Подскажите кто знает?!
  • Сапёр (17.01.19 00:17) [1]
    эм... Это такая тема оформления, активное окно - вот такое вот. Смысл убирать?
    Ну если так сильно хочется - можно пробовать перекрыть WM_NCPAINT и/или сопутствующие.
  • dmk © (17.01.19 09:55) [2]
    Да уже все перепробовал. Она через DWM рисуется. Думал через SetWindowLong убрать как обычно, но ни на один Extended-стиль не реагирует. Только через WS_EX_TOOLWINDOW убирается, но мне системное меню нужно оставить. В TOOLWINDOW только крестик для закрытия окна остается.
  • dmk © (17.01.19 10:17) [3]
    Вот так убирается отрисовка окна через DWM. Окно становится похожим на Win7-окно.
    https://hostingkartinok.com/show-image.php?id=6e7598fb3de887ab98271588a216d915
    procedure TGLForm.WMNCPaint(var Msg: TWMNCPaint);
    var
     Style: DWord;

    begin
     Style := GetWindowLong(Handle, GWL_EXSTYLE);
     Style := Style and not WS_EX_CLIENTEDGE;
     SetWindowLong(Handle, GWL_EXSTYLE, Style);

     Msg.Result := S_OK;
    end;

    Как саму рамку убрать пока не понимаю.
  • Сапёр (18.01.19 21:33) [4]
    Это тема оформления говорю. И это как бы не совсем DWM, это старый добрый STYLE/EXSTYLE. Только зачем SetWindowLong() в каждом OnPaint? о___О

    Задача-то в чём? При одной теме будет рисоваться рамка 1px, при другой тебе не будет рисоваться рамка, при третьей будет рамка вообще 5px. Как вы определите программно что там рисуется не то что вы хотите? Только самому рисовать, только это даст гарантии...
  • Сапёр (18.01.19 21:33) [5]
    теме *
  • dmk © (18.01.19 22:11) [6]
    >Только самому рисовать, только это даст гарантии...
    Да не вопрос, только как убрать бордюр?
  • Сапёр (19.01.19 00:23) [7]
    так... Ну вообще для начала - Aero и более новые хрени могут по умолчанию не позволять рисовать на NC, их надо сперва явно попросить...
    И возможно что вам уже этого будет достаточно:

    ... { OnCreate or OnReCreate or OnCreateWnd or OnReCreateWnd or OnCreateHandle or e.t.c. };
    var policy: DWMNCRENDERINGPOLICY { or DWORD };
    begin
    policy:=DWMNCRP_DISABLED { or 1 };
    DwmSetWindowAttribute(Handle, DWMWA_NCRENDERING_POLICY, @policy, SizeOf(policy));
    end;


    Остальное тут: http://www.delphisources.ru/pages/faq/base/draw_on_form_border.html
  • Сапёр (19.01.19 15:46) [8]
    Пардон, совсем склероз одолел, ещё такой вот вариант:
    ... { OnCreate or OnReCreate or OnCreateWnd or OnReCreateWnd or OnCreateHandle or e.t.c. };
    var allow: BOOL;
    begin
    allow:=True;
    DwmSetWindowAttribute(Handle, DWMWA_ALLOW_NCPAINT, @allow, SizeOf(allow));
    end;

    // + regular WM_NCPAINT handler
  • dmk © (29.01.19 23:46) [9]
    >Пардон, совсем склероз одолел, ещё такой вот вариант:
    Вы не поверите. Windows обновился до версии 1809, и теперь DWM не рисует эту чертову рамку. Ее просто нет. Красота. Биться не с чем ;)
  • dmk © (29.01.19 23:55) [10]
 
Конференция "Начинающим" » Убрать рамку окна Win10
Есть новые Нет новых   [118608   +46][b:0][p:0]