Q&A

  • Canvas에 글자 출력시 배경색 바꾸기
안녕하세요?

취미로 조금씩 델파이를 배우면서 사용하고 있습니다.

TPrinter.Canvas로 글자 출력할 때 글자의 배경색을 지정하고 싶거든요.

먼저 다음과 같은 코드가 있습니다.

//Silver 색상으로 영역을 칠한다.
Printer.Canvas.Brush.Style := bsSolid;
Printer.Canvas.Brush.Color := clSilver;

for i := 0 to 2 do begin
    Printer.Canvas.FillRect(Rect(x + OffsetX * 2+3 ,
                                                y + CenterY + OffsetY * i * 2+3,
                                            x + OffsetX * 33-3,
                                               y + CenterY + OffsetY * i * 2+OffsetY-3));
end;

//위에 칠해진 영역에 글자를 찍는다.
Printer.Canvas.TextOut(x + DiffX * 2 + OffsetX * 2 + OffsetX * i,
                    y + ColY * 2 + OffsetY * j, SData[DateSchedule[j + 1]]);

이때 문제가 발생합니다.
기존 Siver 색상으로 칠해진 영역에 TextOut으로 글자를 찍으면 글자가 찍혀지는 영역의 기존 칠해진 색상은 무시하고 배경이 하얗게 되면서 글자가 찍히거든요.

제가 원하는 것은 배경색은 그대로 유지하면서 글자를 찍는 건데 말입니다.
혹시라도 TPen에 Background를 지정할 수 있나 도움말을 뒤져봐도 나오질 않네요.

도움을 기다립니다.

즐거운 시간들 되세요.
4  COMMENTS
  • Profile
    한원희 2004.12.01 05:45
    안녕하세요. 한원희입니다.

    SetBkMode로 TRANSPARENT로 지정하면, 배경색을 투명하게 글자를 출력할 수 있습니다. 참고로, 배경색 지정은 SetBkColor API를 이용하면 됩니다.

    그럼, 즐프~

  • Profile
    이길환 2004.12.01 12:01
    안녕하세요?

    먼저 답변 감사드립니다.

    하지만 Windows API 함수를 한번도 써 본적이 없는 저로서는 아직도 막막하네요.

    일단 SetBkMode(TRANSPARENT)로 해 봤는데, 정의되지 않았다고 에러 메시지가 뜨네요.

    도움말을 뒤져보니 SetBkMode(HDC hdc, int iBkMode)로 되어 있던데,
    1. 이 경우 HDC에 어떤 것을 할당해야 하는지?
    2. uses 절에 어떤 것을 추가해야 하는지?

    도움말에 SetBkMode가 define 되어 있는 헤더 파일이 wingdi.h던데, 이 파일을 uses 절에 선언해도 *.dcu 파일이 없다고만 나옵니다.
    gdi32.lib 파일을 추가해도 마찬가지고요.

    답변 감사합니다만, 한번만 더 자세하게 사용법을 알려주실 수 있겠는지요?

    그럼 오늘도 즐거운 하루 되세요.



  • Profile
    ㉳㉥ㅗ㉣ㅐ㉧ㅛ 2004.12.01 18:36


    Canvas의 핸들값을 주면 됩니다....

    Canvas.Handle 하면 되구요....



    추가하지 않아도 되는 부분입니다.....


  • Profile
    이길환 2004.12.01 18:49
    답변 감사드립니다.

    덕분에 해결됐고요.

    참고로, 이 함수를 사용하는 유닛이 폼과 연결된 유닛이 아니라 따로 만든 유닛이라서 그냥 했을 때는 SetBkMode와 TRANSPARENT가 정의되지 않았다고 메시지가 뜨네요.

    그래서 uses에 Windows를 추가했더니 말끔하게 해결됐습니다.

    도움주신 분들 감사드립니다.

    즐거운 하루 되세요.