자유롭게 질의 및 응답을 할 수 있는 게시판입니다. 개발자 여러분의 답변이 큰 도움이 됩니다. 
  • 제품설치/등록 오류 문의: 설치/등록 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 17241
공지 유용한 관련 사이트 관리자2 2014.03.20 56122
공지 본 게시판은 개발자 여러분들의 질문과 답변을 공유하는 공간입니다. 관리자 2012.01.10 99559
2419 ClientDataSet open 맥 simumlator error 이미지입니다. [1] file kerry 2015.10.27 205
2418 초보적인 문의 드립니다. [4] BD 2021.02.04 205
2417 Xe5에서 안드로이드 버전 얼마까지 지원되나요? [1] 농가사랑 2016.06.01 206
2416 10.3으로 컴파일하면 스플래쉬에서 멈추고 끝납니다. [3] file 화이부동 2018.12.19 206
2415 TImage->Width와 실제 값 차이 문의 [4] file icj 2019.11.13 206
2414 Delphi10 에서 bpl로 제작된 컴포넌트 Install 메뉴가 안보이는 문제. (64bit 컴파일) [1] 김재욱 2016.03.04 206
2413 [공유] 실행 중 도형등의 크기를 변경하려면 어떻게 하나요? 험프리 2016.03.21 206
2412 ems start 버튼 클릭시 [FireDAC][Phys][IB]I/O error for file [1] 느림보 2021.03.15 206
2411 한번에 개발하는 안드로이드 질문입니다. [2] file youngdel 2016.04.20 207
2410 [시작하는 사람들을 위한 델파이 프로그래밍] 모듈 7 - Exercise 3 [1] 관리자 2016.05.02 207
2409 쇼핑몰 결제시스템관련 질문 유정 2019.06.24 207
2408 [10.3.3 브리핑] 안드로이드 앱 번들과 iOS 유니버셜 앱의 차이점은? file 험프리 2019.12.05 207
2407 파이어몽키로 안드로이드 시스템상에서 터치 이벤트 발생이 가능한가요? [2] 유성 2021.03.24 207
2406 [시작하는 사람들을 위한 델파이 프로그래밍] 모듈 8 - Exercise 1 [2] 관리자 2016.05.02 208
2405 firedac에서 alias사용한 쿼리를 edit하면 에러가 나네요. [1] fraha 2019.09.25 208
2404 [XE8 출시세미나] 앱 애널리틱스 (App Analytics)에는 통계만 저장되나요? 아니면 각 사용자 고유의 정보도 저장되나요? [1] 관리자 2015.04.30 208
2403 [XE8 웹세미나] 유니코드관련 델파이 마이그레이션 정보를 알고 싶습니다. Humphery 2015.05.13 208
2402 C#에서 연결테스트 중 "message length error (encountered 287, expected 68)" [1] 아리수 2016.09.13 209
2401 [재질문] 콤보박스의 글자와 글자간 간격이 이상합니다. file 떵묻은강아지 2016.12.14 209
2400 Tokyo 10.2 Starter Edition Component 관련 질문 [2] goinma 2018.04.30 209