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;
if ms_Chul_B = '1' then begin StatusBar.Panels[0].Text := '저장된 파일이 없습니다.'; ms_Chul_B := ''; //변수값을 초기화 한다. Exit; end; StatusBar.Panels[0].Text := '선택된 작업의 파일이 저장 되었습니다.'; 위와 같은 소스...
다른방법도 있겠지만 상태바에는 직접쓰는걸 제어할수있게
패널마다 각각 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;