Alex7wrt Опубликовано 29 февраля, 2016 Поделиться Опубликовано 29 февраля, 2016 (изменено) Добрый день. Интересует, как можно сделать фон формы прозрачным так, чтобы у нее остались видны заголовок и рамки. Если выставить свойство Transparancy в True, то заголовок и рамки исчезают. То же самое происходит если выставить цвет заливки прозрачным. Изменено 29 февраля, 2016 пользователем Alex7wrt Цитата Ссылка на комментарий
0 Axbor Опубликовано 1 марта, 2016 Поделиться Опубликовано 1 марта, 2016 Наверно нужно создать свой стил или изменить какую нибудь имеющийся стил в котором изменяется бордерс формы и тем накосячит что бы только середина формы стало прозрачным. Сейчас посмотрю но мне кажется такое невозможно. Цитата Ссылка на комментарий
0 Axbor Опубликовано 1 марта, 2016 Поделиться Опубликовано 1 марта, 2016 (изменено) На VCL это очень легко делается. Сделаете TransparentColor = true, и color формы сделаете одинаково со свойством TransparentColorValue На FMX пока не нашел Изменено 1 марта, 2016 пользователем Axbor Alex7wrt 1 Цитата Ссылка на комментарий
0 Alex7wrt Опубликовано 1 марта, 2016 Автор Поделиться Опубликовано 1 марта, 2016 (изменено) Да, в VLC это было просто. Спасибо, что откликнулись! Изменено 1 марта, 2016 пользователем Alex7wrt Цитата Ссылка на комментарий
0 GASCHE Опубликовано 1 марта, 2016 Поделиться Опубликовано 1 марта, 2016 (изменено) А я бы попробовал использовать в качестве образца Transparent.Style он как-то интересно закрашивает саму форму. См. object TSubImage. Изменено 1 марта, 2016 пользователем GASCHE Цитата Ссылка на комментарий
0 ramir Опубликовано 1 марта, 2016 Поделиться Опубликовано 1 марта, 2016 (изменено) TMainWorkPlaceRemoteControlForm = class(TForm) private ... FAlphaBlend: Boolean; FAlphaBlendValue: Byte; FTransparentColor: Boolean; FTransparentColorValue: TColor; procedure SetAlphaBlend(const Value: Boolean); procedure SetAlphaBlendValue(const Value: Byte); procedure SetLayeredAttribs; procedure SetTransparentColor(const Value: Boolean); procedure SetTransparentColorValue(const Value: TColor); public ... property AlphaBlend: Boolean read FAlphaBlend write SetAlphaBlend default False; property AlphaBlendValue: Byte read FAlphaBlendValue write SetAlphaBlendValue default 255; property TransparentColor: Boolean read FTransparentColor write SetTransparentColor default False; property TransparentColorValue: TColor read FTransparentColorValue write SetTransparentColorValue; end; implementation type TSetLayeredWindowAttributes = function (Hwnd: THandle; crKey: COLORREF; bAlpha: Byte; dwFlags: DWORD): Boolean; stdcall; var SetLayeredWindowAttributes: TSetLayeredWindowAttributes = nil; constructor TMainWorkPlaceRemoteControlForm.Create(AOwner: TComponent); begin // FUIAdapter := TFMXUIAdapter.Create(Self); @SetLayeredWindowAttributes := GetProcAddress(GetModuleHandle(User32), 'SetLayeredWindowAttributes'); end; procedure TMainWorkPlaceRemoteControlForm.SetAlphaBlend(const Value: Boolean); begin if FAlphaBlend <> Value then begin FAlphaBlend := Value; SetLayeredAttribs; end; end; procedure TMainWorkPlaceRemoteControlForm.SetAlphaBlendValue(const Value: Byte); begin if FAlphaBlendValue <> Value then begin FAlphaBlendValue := Value; SetLayeredAttribs; end; end; procedure TMainWorkPlaceRemoteControlForm.SetLayeredAttribs; const cUseAlpha: array [Boolean] of Integer = (0, LWA_ALPHA); cUseColorKey: array [Boolean] of Integer = (0, LWA_COLORKEY); var AStyle: Integer; begin if not (csDesigning in ComponentState) and (Assigned(SetLayeredWindowAttributes)) then begin AStyle := GetWindowLong( WindowHandleToPlatform(Handle).Wnd, GWL_EXSTYLE); if FAlphaBlend or FTransparentColor then begin if (AStyle and WS_EX_LAYERED) = 0 then SetWindowLong(WindowHandleToPlatform(Handle).Wnd, GWL_EXSTYLE, AStyle or WS_EX_LAYERED); SetLayeredWindowAttributes(WindowHandleToPlatform(Handle).Wnd, ColorToRGB(FTransparentColorValue), FAlphaBlendValue, cUseAlpha[FAlphaBlend] or cUseColorKey[FTransparentColor]); end else begin SetWindowLong(WindowHandleToPlatform(Handle).Wnd, GWL_EXSTYLE, AStyle and not WS_EX_LAYERED); RedrawWindow(WindowHandleToPlatform(Handle).Wnd, nil, 0, RDW_ERASE or RDW_INVALIDATE or RDW_FRAME or RDW_ALLCHILDREN); end; end; end; procedure TMainWorkPlaceRemoteControlForm.SetTransparentColor(const Value: Boolean); begin if FTransparentColor <> Value then begin FTransparentColor := Value; SetLayeredAttribs; end; end; procedure TMainWorkPlaceRemoteControlForm.SetTransparentColorValue(const Value: TColor); begin if FTransparentColorValue <> Value then begin FTransparentColorValue := Value; SetLayeredAttribs; end; end; Под Windows можно так попробовать. Правда будет влиять на прозрачность всего окна (с содержимым) Изменено 1 марта, 2016 пользователем ramir Цитата Ссылка на комментарий
Вопрос
Alex7wrt
Добрый день.
Интересует, как можно сделать фон формы прозрачным так, чтобы у нее остались видны заголовок и рамки. Если выставить свойство Transparancy в True, то заголовок и рамки исчезают. То же самое происходит если выставить цвет заливки прозрачным.
Изменено пользователем Alex7wrtСсылка на комментарий
5 ответов на этот вопрос
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.