Форум программистов, компьютерный форум, киберфорум
Наши страницы
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
Gudzik11
1 / 1 / 1
Регистрация: 14.09.2011
Сообщений: 264
1

Сделать цвет формы как у панели задач

07.08.2014, 22:36. Просмотров 721. Ответов 1
Метки нет (Все метки)

Нужно чтоб форма принимала цвет панели задач !
Вот нашёл такой пример все работает но есть пару не недочётов при первой загрузке формы цвет определяется не правильно . А после смены цвета в windows форма принимает правильный цвет.

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
unit Unit1;
 
interface
 
uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs , Winapi.Dwmapi;
 
type
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
    OldWindowProc : TWndMethod;
    function GetAeroColor:Tcolor;
    procedure OnAeroColorChange;
  public
    { Public declarations }
    procedure NewWindowProc(var Message: TMessage);
    procedure WMNCHitTest(var M: TWMNCHitTest); message wm_NCHitTest;
  end;
 
var
  Form1: TForm1;
 
implementation
 
{$R *.dfm}
 
{ TForm1 }
 
procedure TForm1.FormCreate(Sender: TObject);
begin
  // Aero Farbe ermitteln und anzeigen
 form1.Color := getAeroColor;
 
// Wenn clnone ausgegeben wird: Fehlermeldung machen
if form1.Color = clnone then
 showmessagE('Aero nicht unterstьtzt oder Fehler aufgetreten!');
 
// WndProc
 OldWindowProc := form1.WindowProc;
 form1.WindowProc := NewWindowProc;
 
end;
 
function TForm1.GetAeroColor: Tcolor;
{****************************************************}
// Dies Funktion gibt die Aero Farbe als Tcolor zurьck
// Unterstьzt das OS kein Windows Aero, so wird der
// Wert clnone ausgegeben
{****************************************************}
var
// Gibt an ob Fenster Undurchsichtig sind
OpaqueBlend: bool;
// Gibt die Farbe an
farbe : dword;
// A=AlphaValue; RGB=R,G und B Farbwerte
A,R,G,B: integeR;
// um festzustellen, ob Aero unterstьzt wird
osVInfo: TOSVersionInfo;
begin
  // Feststellen, ob Windows Aero unterstьzt wird
 { ZeroMemory(@osVinfo, SizeOf(osVinfo));
  OsVinfo.dwOSVersionInfoSize := SizeOf(TOSVERSIONINFO);
 
 
  if  ((( not GetVersionEx(osVInfo))
  and   (osVinfo.dwPlatformId <> VER_PLATFORM_WIN32_NT)
  and   (osVinfo.dwMajorVersion < 5)))
 { or    (dwmapi.DWM_GetColorizationColor(farbe,OpaqueBlend) = S_False) then
  begin
    // Falls nicht wird das Ergebnis clnone ausgegeben
    result := clnone;
    exit;
  end; }
 
  // AlphaValue und RGB-Werte ermitteln
  A := (farbe and $FF000000) shr 24;
  R := (farbe and $FF0000) shr 16;
  G := (farbe and $FF00) shr 8;
  B := (farbe and $FF);
 
  // AlphaValue auf RGB-Werte anwenden
  // Die 40 ermцglicht eine krдftigere Darstellung der Farbe
  r := r + (255-a-40);
  g := g +  (255-a-40);
  b := b + (255-a-40);
 
  // Ьberprьfen ob die RGB-Werte zulдssig sind
  if r < 0 then r := 0;
  if g < 0 then g := 0;
  if b < 0 then b := 0;
 
  if r > 255 then r := 255;
  if g > 255 then g := 255;
  if b > 255 then b := 255;
 
  // Farbe errechnen und ausgeben
  result := rgb(r,g,b);
end;
 
 
procedure TForm1.NewWindowProc(var Message: TMessage);
begin
  case message.Msg of
  WM_DWMCOLORIZATIONCOLORCHANGED: OnAeroColorChange;
 end;
 
 OldWindowProc(Message);
end;
 
procedure TForm1.OnAeroColorChange;
begin
 // Farbe ermitteln und anzeigen
form1.Color := GetAeroColor;
 
// Wenn clnone ausgegeben wird: Fehlermeldung machen
if form1.Color = clnone then
showmessagE('Aero nicht unterstьtzt oder Fehler aufgetreten!');
end;
 
 
 
end.
Подскажите как исправить чтоб при запуске форма сразу принимала цвет темы?
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.08.2014, 22:36
Ответы с готовыми решениями:

Как сделать, чтобы формы были поверх панели задач?
как сделать, чтобы формы были поверх панели задач? благодарю за помощь !

Как из dll получить указатель формы приложения и развернуть его из панели задач?
Доброго времени суток. Помогите, как из dll обратиться к приложению, из которого её запустили. А...

Как из dll получить указатель формы приложения и развернуть его из панели задач?
Всем доброго времени суток. Как из dll получить указатель формы приложения и развернуть его из...

Не работает сворачивание формы из панели задач.
Здравствуйте. Вот я создал форму, без бордюра, сделал отдельную кнопку свернуть:...

Запрет на сворачивание формы из панели задач
Доброе время суток! Как сделать так, чтобы пользователь не смог сворачивать программу из панели...

1
droider
Universal
Эксперт Pascal/Delphi
4537 / 2545 / 810
Регистрация: 04.10.2012
Сообщений: 9,268
08.08.2014, 22:49 2
Цитата Сообщение от Gudzik11 Посмотреть сообщение
как исправить чтоб при запуске форма сразу принимала цвет темы?
SetSysColor попробуйте
1
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.08.2014, 22:49

При скрытии главной формы пропадает значок на панели задач
Если скрыть первую форму, а вторую открыть то на панели задач приложение пропадёт. Как сделать так...

Пропадает значок с панели задач при скрытии главной формы
Вопрос такой. Есть главная форма авторизации...если все успешно то открывается другая форма. Если я...

Не убирать значок программы на панели задач при открытии второй формы (XE2)
Проблема такова: при открытии 2ой формы (и скрытии 1ой) убирается значок с панели задач,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.