Programowanie w języku Delphi » Gotowce

Zmiana koloru obramowania GroupBoxa

  • 7 komentarzy
  • 592 odsłony
  • Oceń ten tekst jako pierwszy
W odpowiedzi na post z forum tej strony dotyczący zmiany koloru obramowania GroupBox'a napisałem procedurkę ColorGroupBox(). Żądany efekt daje ona jednak tylko w Windows XP na formie z komponentem XPManifest. Stosując tę procedurę w swoim programie pamiętajcie więc o sprawdzeniu jaki system operacyjny posiada użytkownik oraz o wstawieniu na formę komponentu XPManifest (zakładka Win32). W innym przypadku efekt nie będzie zadowalający.

Oto treść procedury:

procedure ColorGroupBox(GroupBox : TGroupBox; Color : TColor);
var TextWdh : Integer;
    Rigth,Bottom : Integer;
    C : TCanvas;
begin
 
C := TCanvas.Create;
C.Handle := GetDC(GroupBox.Handle);
 
// Pobranie długości Caption'a w pikselach
C.Font := GroupBox.Font;
TextWdh := C.TextWidth(GroupBox.Caption);
 
C.Pen.Color := Color;
 
Rigth := GroupBox.Width;
Bottom := GroupBox.Height;
 
  if GroupBox.Caption <>
''
 then
    begin
      C.MoveTo(2,6);
      C.LineTo(8,6);
 
      C.MoveTo(TextWdh+8,6);
      C.LineTo(Rigth-2,6);
 
      C.MoveTo(Rigth-3,6);
      C.LineTo(Rigth-3,8);
 
      C.MoveTo(Rigth-2,7);
      C.LineTo(Rigth-2,9);
 
      C.MoveTo(Rigth-1,8);
      C.LineTo(Rigth-1,Bottom-2);
    end else
 
    begin
      C.MoveTo(2,0);
      C.LineTo(Rigth-2,0);
 
      C.MoveTo(Rigth-3,0);
      C.LineTo(Rigth-3,2);
 
      C.MoveTo(Rigth-2,1);
      C.LineTo(Rigth-2,3);
 
      C.MoveTo(Rigth-1,2);
      C.LineTo(Rigth-1,Bottom-2);
    end;
 
C.MoveTo(Rigth-2,Bottom-2);
C.LineTo(Rigth-2,Bottom-4);
 
C.MoveTo(Rigth-3,Bottom-1);
C.LineTo(Rigth-3,Bottom-3);
 
C.MoveTo(2,Bottom-1);
C.LineTo(Rigth-3,Bottom-1);
 
C.MoveTo(2,Bottom-1);
C.LineTo(2,Bottom-3);
 
C.MoveTo(1,Bottom-2);
C.LineTo(1,Bottom-4);
 
  if GroupBox.Caption <> '' then
    begin
      C.MoveTo(0,Bottom-3);
      C.LineTo(0,7);
 
      C.MoveTo(1,7);
      C.LineTo(1,9);
 
      C.MoveTo(2,7);
      C.LineTo(2,6);
    end else
 
    begin
      C.MoveTo(0,Bottom-3);
      C.LineTo(0,1);
 
      C.MoveTo(1,1);
      C.LineTo(1,3);
 
      C.MoveTo(2,1);
      C.LineTo(2,0);
    end;
 
end;


Przykład użycia:
ColorGroupBox(GroupBox1,clRed);


Powrót do domyślnego koloru (dla początkujących):
GroupBox1.Repaint;


Jako załącznik do artykułu dodałem kod źródłowy przykładowego pogramu stosującego tę procedurę.

7 komentarzy

adydan 2009-09-25 16:34

Moim zdaniem dlugachna mozna  by zrobic tablice z wartosciami i reszte  C.MoveTo i C.LineTo wrzucic w petle zajela by 2-ga czesc 5 linii.

AklimX 2005-01-25 09:44

widzie, że nikt nie odp, więc możesz zrobić tak (ale zastanów się nad tym), że zamiast gb dajesz shape

xbary 2005-01-23 17:09

dobra, a czy ktoś ma jakiś uniwersalny sposób na zrobienie żeby GroupBox był przeźroczysty , razem z capionem . Chodzi oto że jak mam tło gradientowe to żeby mi nie rysował dziwnie.

mitring 2005-01-22 20:57

Dla mnie wypas ;] szukalem tego THX :) Patyk

Ludomir 2005-01-22 19:57

to raczej do FAQ
przyłączam się: omg

Zitu 2005-06-18 19:52

niezła procedurka :)
potrzebowałem takiej do swojego programu :)