Q&A

  • StatusBar.Panels[0]에 있는 폰트에 칼라를 주려 합니다
    if ms_Chul_B = '1' then begin
       StatusBar.Panels[0].Text := '저장된 파일이 없습니다.';
       ms_Chul_B := '';  //변수값을 초기화 한다.
       Exit;
   end;
       StatusBar.Panels[0].Text := '선택된 작업의 파일이 저장 되었습니다.';

위와 같은 소스에서 StatusBar.Panels[0]에 있는 폰트에 칼라를 주려 합니다.
어떻게 해야 하는지요??
도와주세요.  
1  COMMENTS
  • Profile
    홍성락 2002.06.21 02:45
    hsr//////////////////////////////////////////////////////////////////
    다른방법도 있겠지만 상태바에는 직접쓰는걸 제어할수있게
    패널마다 각각 psOwnerDraw를 제공합니다.
    문론 폰트도 바꾸고 다른 패널과 차이를 주고, 이미지도 넣구요....
    원하는 패널에 Style 속성을  psOwnerDraw로하면 상태바의
    OnDrawPanel 이벤트가 실행됩니다.
    이때 원하는 패널인지를 검사해 각각 표시할수있습니다.

    1. 아래는 원하는 패널번호를 집합형 전역변수에 넣는 초기작업이 있습니다.
       type
           TIntSet = set of 0..10;
       먼저 맨 위에 선언한후 전역변수 만듭니다.
       index : TIntSet;
       그리구 폼쇼나 다른데서 원하는 패널 인덱스번호를 넣습니다
       index := [0,3]; //원하는 index
       이때 위 0번3번 패널에 Style 속성을  psOwnerDraw이여합니다
       예제에선 자동 바꿔줍니다
       for i := 0 to StatusBar1.Panels.Count-1 do
           if i in index then
              StatusBar1.Panels[i].Style := psOwnerDraw;

    -------------------------------------------------------
    전체소스입니다.
    unit Unit1;
    interface
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls, ComCtrls;
    type
      TIntSet = set of 0..10;
    type
      TForm1 = class(TForm)
        StatusBar1: TStatusBar;
        procedure StatusBar1DrawPanel(StatusBar: TStatusBar;
          Panel: TStatusPanel; const Rect: TRect);
        procedure FormShow(Sender: TObject);
      private
        { Private declarations }
        index : TIntSet;
      public
        { Public declarations }
      end;
    var
      Form1: TForm1;
    implementation
    {$R *.dfm}
    procedure TForm1.FormShow(Sender: TObject);
    var
        i : integer;
    begin
        StatusBar1.Panels[0].Text := '123';
        StatusBar1.Panels[1].Text := '456';
        StatusBar1.Panels[2].Text := '789';
        StatusBar1.Panels[3].Text := '선택된 작업의 파일이 저장 되었습니다.';

        index := [0,3]; //원하는 index
        for i := 0 to StatusBar1.Panels.Count-1 do
           if i in index then
              StatusBar1.Panels[i].Style := psOwnerDraw;
    end;
    procedure TForm1.StatusBar1DrawPanel(StatusBar: TStatusBar;
      Panel: TStatusPanel; const Rect: TRect);
    var
       y : integer;
    begin
       if Panel.Index in Index then begin
          StatusBar1.Canvas.Font.Color := clRed;
          y := Round((StatusBar1.Height + StatusBar1.Font.Height)/2);
          StatusBar1.Canvas.TextRect(Rect, Rect.Left, y, Panel.Text);
       end;
    end;