자유롭게 질의 및 응답을 할 수 있는 게시판입니다. 개발자 여러분의 답변이 큰 도움이 됩니다. 
  • 제품설치/등록 오류 문의: 설치/등록 Q&A 이용 (제품 구매 고객 한정)

Q. 

[VCL] 델파이 XE8에서 체크박스, 라디오버튼의 글자의 색상을 변경하고 싶어요.


A.

VCL 스타일 적용이후 체크박스, 라디오버튼의 글자 색상(Font.Color)이 적용되지 않습니다.


다음 코드를 통해 글자 색상을 적용할 수 있습니다.


1, 새로운 유닛(Vcl.StdCtrls.Ext)을 추가하고, WMPaint, Paint 메소드 오버라이딩 한 클래스를 작성합니다.

unit Vcl.StdCtrls.Ext;


interface


uses

  System.Classes, Winapi.Windows, Winapi.Messages,

  Vcl.StdCtrls, Vcl.Controls, Vcl.DBCtrls, Vcl.Graphics;


type

  http://stackoverflow.com/questions/2356431/how-can-you-change-the-font-color-of-a-theme-enabled-control

  TCheckBox = class(Vcl.StdCtrls.TCheckBox)

  private

      procedure WMPaint(var msg: TWMPaint); message WM_PAINT;

  end;


  // http://www.delphigroups.info/2/95/170811.html

  TDBText = class(Vcl.DBCtrls.TDBText)

  protected

    procedure Paint; override;

  end;


implementation


{ TCheckBox }


procedure TCheckBox.WMPaint(var msg: TWMPaint);

var

  BtnWidth: Integer;

  canv: TControlCanvas;

begin

  BtnWidth := GetSystemMetrics(SM_CXMENUCHECK);

  inherited;

  canv := TControlCanvas.Create;

  try

    canv.Control := Self;

    canv.Font := Font;

    SetBkMode(canv.Handle, Ord(TRANSPARENT));

    canv.TextOut(BtnWidth + 1, 2, Caption);

  finally

    canv.Free;

  end;

end;


{ TDBText }


procedure TDBText.Paint;

var

  InitChar : char;

begin

  Canvas.Brush.Color := Color;

  Canvas.FillRect(Canvas.ClipRect);  // paint the background color ...

  inherited Paint;

end;


end.



2, 폼의 interface uses 절 마지막에 위 유닛을 추가합니다.
uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls,
  FireDAC.Stan.Intf, FireDAC.Stan.Option, FireDAC.Stan.Param,
  FireDAC.Stan.Error, FireDAC.DatS, FireDAC.Phys.Intf, FireDAC.DApt.Intf,
  FireDAC.Stan.StorageBin, Vcl.DBCtrls, Data.DB, FireDAC.Comp.DataSet,
  FireDAC.Comp.Client,
  Vcl.StdCtrls.Ext;

위의 작업을 간단하게 설명하면, 
TCheckBox는 Vcl.StdCtrls에 선언되어 있습니다.
Vcl.StdCtrls.Ext.pas에는 Vcl.StdCtrls의 TCheckBox를 상속받아 동일한 클래스를 작성했습니다.
폼 유닛에서는 uses절의 마지막에 Vcl.StdCtrls.Ext를 추가했습니다.
uses절은 마지막의 유닛부터 참조하기 때문에 TCheckBox 컴포넌트는 Vcl.StdCtrls.Ext.pas의 TCheckBox 클래스를 이용해 컴포넌트를 생성합니다.

위 내용을 참고하면 기본 컴포넌트의 기능을 수정하거나 확장할 수 있습니다.

번호 제목 글쓴이 날짜 조회 수
공지 [프로그래밍 강의] 2021.6~2021.12 관리자 2015.01.22 17244
공지 유용한 관련 사이트 관리자2 2014.03.20 56130
공지 본 게시판은 개발자 여러분들의 질문과 답변을 공유하는 공간입니다. 관리자 2012.01.10 99565
1553 RAD 스튜디오 베를린 10.1에서 인포믹스 DB를 지원하나요? 험프리 2016.12.08 201
1552 구글스토어 개발자콘솔 앱등록 관련 문의드립니다. 시리온느 2019.03.13 201
1551 10.3.2 Update Trouble & Embarcadero Server Down 문의 [1] DKK 2019.07.25 201
1550 델파이 베를린의 FireUI 에 대하여 가르쳐주시기 바랍니다. [2] 거북이 2016.04.25 202
1549 델파이 상/하위 버전별 DataSnap 호환성.... [3] 가나당 2016.11.07 202
1548 지뢰찾기를 만드는중에 질문이 있어서 글올립니다. [1] file 땅콩맨 2017.09.15 202
1547 Delphi 10.2.2 Project close all 후 Error 관련 [2] file 엔달 2018.01.11 202
1546 [공유] 안드로이드 배포 시 "Missing profile name. Unable to get a valid profile from environment options file. Process aborted." 오류가 발생합니다. file 험프리 2018.11.05 202
1545 android 64비트를 알아내는법? [2] 100jk 2019.06.09 202
1544 데이터스냅 서버 또는 RAD서버 관련 질문 드립니다. [1] 유비케어 2020.08.31 202
1543 델파이로 iso앱을 개발하려면 mac pc가 있어야 하나요? [1] 델마당쇠 2020.01.24 202
1542 안드로이드 개발중에 질문이 있습니다. [2] 웅재 2018.02.13 203
1541 파이어닥 관련하여 궁금점이 있습니다. [1] 이즈로즈 2018.07.24 203
1540 RawByteString 클래스 사용이 안됩니다 [1] 손보라 2018.07.19 204
1539 REST.JSON 적용문의 [1] cleo0917 2018.08.27 204
1538 rio 10.3.3버전에서 다국어 작성중입니다. 봐주세요. [1] 델파이_사랑 2019.12.27 204
1537 Xe7 datasnap 안드로이드11 업그레이드후 실행이 안됨 [1] 천년바우 2021.02.08 204
1536 Delphi 10(10.1) MongoDB Driver => SCRAM-SHA-1 지원기능여부 문의드립니다. Terry 2016.07.14 205
1535 Ribbon 메뉴 에러 질문.. [1] file syc 2015.07.15 205
1534 컴파일시 Parameter 설정값 때문에 에러가 나옵니다. [1] file 대화마을 2017.03.02 205