Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.191.174.168] |
|
Сообщ.
#1
,
|
|
|
проблема:
ложу на форму панель, устанавливаю цвет, например черный запускаю - все ок тепер ложу на форму манифест запускаю - цвет панели = цвет формы причем в run-time цвет панели не меняется (ParentColor=False) глюк? или так должно быть? как победить? |
Сообщ.
#2
,
|
|
|
Цитата Scorpy @ глюк? или так должно быть? Так и должно быть. Цитата Scorpy @ как победить? Победить -довольно муторно. ИМХО, лучше кинуть на панельку какой-нибудь TShape и не мучаться (в аттаче картинка - это без манифеста, с манифестом цветной будет только верхняя панель). Прикреплённый файлp1.JPG (13.04 Кбайт, скачиваний: 369) |
Сообщ.
#3
,
|
|
|
хм... ну раз без напильника никак...
спасибо |
Сообщ.
#4
,
|
|
|
Где-то на форуме, вроде была статья про XP Themes. И на rsdn, кажется что-то видел. А вообще, повторюсь, - дело муторное (особенно с такими custom'ными компонентами, как Panel). Проще, по-моему вот так...
|
Сообщ.
#5
,
|
|
|
А что мешает сделать наследничка от панели, где запретить темы?
|
Сообщ.
#6
,
|
|
|
Цитата s-mike @ запретить темы? как? |
Сообщ.
#7
,
|
|
|
Цитата Scorpy @ как? Очень просто : unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, XPMan; type TForm1 = class(TForm) Panel1: TPanel; XPManifest: TXPManifest; procedure FormCreate(Sender: TObject); end; var Form1: TForm1; implementation {$R *.dfm} uses Themes; type TMyPanel = class(TPanel) public constructor Create(AOwner: TComponent); override; end; { TMyPanel } constructor TMyPanel.Create(AOwner: TComponent); begin inherited Create(AOwner); if ThemeServices.ThemesEnabled then ControlStyle := ControlStyle - [csParentBackground] + [csOpaque]; end; procedure TForm1.FormCreate(Sender: TObject); var R: TRect; begin with TMyPanel.Create(Self) do begin Parent := Self; Color := clGreen; R := Panel1.BoundsRect; R.Left := R.Left + 300; R.Right := R.Right + 300; BoundsRect := R; end; end; end. |
Сообщ.
#8
,
|
|
|
сеньк
если так, то и компонент писать не надо |
Сообщ.
#9
,
|
|
|
Цитата Scorpy @ если так, то и компонент писать не надо Дык компонентом удобнее, не надо писать каждый раз. |
Сообщ.
#10
,
|
|
|
s-mike, запретить-то можно конечно (и для отдельного окна, если их в проге несколько, к примеру), только вот Scorpy хотел, чтоб совсем "без напильника"
|
Сообщ.
#11
,
|
|
|
Цитата Krid @ s-mike, запретить-то можно конечно (и для отдельного окна, если их в проге несколько, к примеру), только вот Scorpy хотел, чтоб совсем "без напильника" Да какой это напильник? Так, мелкое усовершенствование, его даже в имеющихся программах легко внедрить, поменять только названия классов панелей. |
Сообщ.
#12
,
|
|
|
Кста, раз пошел "базар в тему" Можно, например такие чтуки чудить (в аттаче). Да, темы должны быть включены и манифест лежать на форме. Вот код
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, StdCtrls, ComCtrls, XPMan; type TForm1 = class(TForm) Button1: TButton; Button2: TButton; Button3: TButton; Button4: TButton; Button5: TButton; XPManifest1: TXPManifest; procedure FormCreate(Sender: TObject); private procedure Unload2Themes(var M:TMSG); message WM_USER+1; public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} function SetWindowTheme(hwnd: HWND; pszSubAppName: LPCWSTR; pszSubIdList: LPCWSTR): HRESULT; stdcall; external 'uxtheme.dll'; procedure TForm1.Unload2Themes(var M: TMSG); begin SetWindowTheme(Button4.Handle, ' ', ' '); SetWindowTheme(Button5.Handle, ' ', ' '); SetWindowTheme(Form1.Handle, ' ', ' '); end; procedure TForm1.FormCreate(Sender: TObject); begin PostMessage(Handle,WM_USER+1,0,0) end; end. ЗЫ работает только с виндовыми контролами. Прикреплённый файлt.jpg (8.8 Кбайт, скачиваний: 336) |
Сообщ.
#13
,
|
|
|
Krid, тоже любопытно, спасибо.
|