Od Delphi XE, po pojawieniu się możliwości wyboru stylu (Appearance) kolory wszystkich komponentów typu TEdit, TPanel, … zmieniane sa automatycznie na zgodne ze stylem. Jak można to ominąć i zmusić aplikację do ustawienia dowolnego koloru dla wybranych komponentów TPanel, TEdit, itp.?
Na początek spróbuj powyłączać Parent.Color
.
To już przerabiałem, ta możliwość wyboru stylu jest bardzo fajna, ale nie pozwala ani na zmianę koloru tła, ani koloru napisów. TLabel pozwala, co prawda, na zmianę koloru gdy Transparent = False ale koloru napisu już nie...
Wsparceie stylów po to właśnie zostało wprowadzone, aby kontrolki dostosowywały swój wygląd do reszty systemu. Przeczytaj ten artykuł: Changing the color of Edit Controls with VCL Styles Enabled.
Jeśli o panele chodzi to możesz też skorzystać z tych podpowiedzi.
No to mam roboty w piguły. TEdity jakoś przeboleję. Spróbuję z TPanelami (druga podpowiedź). Zobaczę co z tego wyjdzie.
Dzięki za podpowiedź, nie potrafiłem sformułować pytania do wujka Google, żeby coś takiego wyłuskać.
Może FireMonkey rozwiąże twój problem. Otrzymasz o wiele większe możliwości dostosowania wyglądu, niestety są też i minusy, bardzo dużo zaawansowanych komponentów nie istnieje na tą technologię.
Podchodzę do tego FireMonkey jak pies do jeża. Mam dosyć rozbudowany projekt komponenty z różnych epok i nie zawsze to wszystko z sobą współgra. Chyba będę jednak musiał coś z tym zrobić bo to b. fajne narzędzie.
Dzięki za podpowiedź.
A tak z innej beczki. Wiesz może jak poszerzyć scrollbara w Delphi XE 10.2?
ale jak to poszerzyć? jego wielkość może być dowolna, ustawiasz myszką. Chyba że masz na myśli tą kreskę w środku? Jej szerokość zależy od PageSize
Chodzi mi o paski przewijania (pionowy i poziomy) w TScrollBox, TMemo, TListBox itp.
procedure System_ScrollBar_Set_Width(p_width: integer);
var
s: string;
r: TRegistry;
value: Integer;
begin
// http://winaero.com/blog/how-to-change-the-size-of-scrollbars-in-windows-10/
if p_width <= 0 then Exit;
value := -15*p_width;
s := uppercase( ComputerName() );
// bez warunku !!!if Pos('OEM',s)=1 then
begin
r := TRegistry.Create;
r.RootKey := HKEY_CURRENT_USER;
if r.OpenKey('\Control Panel\Desktop\WindowMetrics',False) then
begin
r.WriteString('ScrollWidth',inttostr(value));
r.WriteString('ScrollHeight',inttostr(value));
end
else
begin
showmessage('error System_ScrollBar_Set_Width');
end;
r.free;
end;
end;
Tylko że to działa na cały system operacyjny :(
(u mnie to dziala bo moja aplikacja jest jedyna w systemie ;) )
Alternatywne rozwiazanie to np. używanie AlphaSkin https://www.alphaskins.com (ja polecam)
I tam jest własciwość TsSkinManager.ScrollsOptions.ScrollSize