-
-
эм... Это такая тема оформления, активное окно - вот такое вот. Смысл убирать? Ну если так сильно хочется - можно пробовать перекрыть WM_NCPAINT и/или сопутствующие.
-
Да уже все перепробовал. Она через DWM рисуется. Думал через SetWindowLong убрать как обычно, но ни на один Extended-стиль не реагирует. Только через WS_EX_TOOLWINDOW убирается, но мне системное меню нужно оставить. В TOOLWINDOW только крестик для закрытия окна остается.
-
Вот так убирается отрисовка окна через DWM. Окно становится похожим на Win7-окно. https://hostingkartinok.com/show-image.php?id=6e7598fb3de887ab98271588a216d915procedure 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;
Как саму рамку убрать пока не понимаю.
-
Это тема оформления говорю. И это как бы не совсем DWM, это старый добрый STYLE/EXSTYLE. Только зачем SetWindowLong() в каждом OnPaint? о___О
Задача-то в чём? При одной теме будет рисоваться рамка 1px, при другой тебе не будет рисоваться рамка, при третьей будет рамка вообще 5px. Как вы определите программно что там рисуется не то что вы хотите? Только самому рисовать, только это даст гарантии...
-
теме *
-
>Только самому рисовать, только это даст гарантии... Да не вопрос, только как убрать бордюр?
-
так... Ну вообще для начала - 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
-
Пардон, совсем склероз одолел, ещё такой вот вариант:
... { 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
-
>Пардон, совсем склероз одолел, ещё такой вот вариант: Вы не поверите. Windows обновился до версии 1809, и теперь DWM не рисует эту чертову рамку. Ее просто нет. Красота. Биться не с чем ;)
-
|