Kolory systemowe

0

Z kolorami systemowymi jest cosik nie tak... Konkretnie chodzi o odczyt RGB:

procedure TForm1.FormCreate(Sender: TObject);
var
  R, G, B: Byte;
begin
  R := GetRValue(Cardinal(clBtnFace));
  G := GetGValue(Cardinal(clBtnFace));
  B := GetBValue(Cardinal(clBtnFace));
  Caption := Format('%d %d %d', [R, G, B]);
  // Jest: 15 0 0 :-0 ;-( 
  // A powinno: 236 233 216 (schemat niebieski w WinXP)
end;

Efekt jest identyczny bez wzgledu na to, jak odczytam kolor systemowy (np. constant clBtnFace, komponent, itp.). F1, F1, F1!

// dopraszasz sięo bęcki - po co wpychasz to samo pytanie dwa razy, zwłaszcza, że już masz odpowiedź? - ŁF

0

Może to Ci pomoże:

procedure TColor2RGB(const Color: TColor; var R, G, B: Byte); 
begin 
  R := Color and $FF; 
  G := (Color shr 8) and $FF; 
  B := (Color shr 16) and $FF; 
end;
0

A po uj rzutujesz na cardinal ? GetXValue wymaga jako parametru zmiennej typu TColor.

// a tcolor to cardinal/dword/longword/... :] [mf]
// sorki to longint.. ale nie rzutuje [mf]

0

clBtnFace - to jest stała, jakbyś nie zauważył. Zamieniana jest na numer koloru tylko przy rysowaniu.

Nie dziw się więc, że dla stałej efekty masz ciągle te same :)

0

Też to miałem: Pobierz sobie kolorek za pomocą funkcji GetSysColor. (opis w win32.hlp)

1 użytkowników online, w tym zalogowanych: 0, gości: 1