Delphi의 TstatusBar 컨트롤 향상

Delphi가 제공하는 TstatusBar 시각화 컨트롤러는 상태 표시줄을 신속하게 실현할 수 있습니다.그러나 Delphi 자체 TstatusBar에서 만든 상태 표시줄은 문자만 표시할 수 있습니다.본고는 Delphi 프로그램에서 더욱 아름다운 StatusBar를 만드는 방법을 소개한다.Netscape 스타일과 같은 상태 표시줄을 만들려면 기존의 Delphi 컨트롤을 사용할 수 없습니다.창 상태 표시줄에 텍스트 이외의 내용이 포함되도록 기존 TstatusBar 컨트롤을 개선해야 합니다.TstatusBar 컨트롤을 기반으로 새로운 Delphi 컨트롤 TstatusBarEx를 작성합니다.델피의 TstatusBar 컨트롤은 다른 컨트롤을 받아들일 수 없기 때문에 Timage, TButton 등을 TstatusBar에 놓을 수 없습니다.하지만 다음에 만들 TstatusBarEx 컨트롤은 다른 컨트롤을 포용할 수 있습니다.TstatusBarEx 컨트롤을 통해 Delphi가 만든 상태 표시줄을 Netscape의 상태 표시줄처럼 예쁘게 만들 수 있습니다. 도형, 애니메이션, 진도 표시줄 등을 포함할 수 있습니다.Delphi에서 컨트롤 중 하나가 다른 컨트롤의 상위 컨트롤이 될 수 있는지 여부는 해당 컨트롤의 ControlStyle 속성에 따라 달라집니다.ControlStyle 속성은 집합 형식입니다. 이 집합이 csAcceptsControls 요소를 포함한다면 다른 컨트롤을 받아들일 수 있습니다.그렇지 않으면 다른 컨트롤의 아버지 컨트롤이 될 수 없습니다.ControlStyle 속성은 컨트롤의 구조 함수(Constructor)에서만 지정할 수 있으며 프로그램이 실행될 때는 변경할 수 없습니다.따라서 창 상태 표시줄에 다른 컨트롤을 포함하기를 원한다면, 상속 클래스에서 TstatusBar 컨트롤의 Constructor 함수를 다시 불러오고 컨트롤의 집합 속성인 ControlStyle에 csAcceptsControls를 포함하면 됩니다.TstatusBarEx 컨트롤의 실현은 TstatusBarEx 컨트롤을 실현하는 Delphi 소스 코드입니다. 이 코드를 복사하여 파일StatusBarEx에 저장하십시오.PAS에서 가요.그리고 Delphi로 StatusBarEx를 엽니다.PAS 파일 다음에 "Component | Install Component..."을 선택하여 TstatusBarEx 컨트롤을 설치합니다.
unit StatusBarEx; 

interface 

uses 
Windows, Messages, SysUtils, Classes, Graphics, 
Controls, Forms, Dialogs, ComCtrls, DsgnIntf; 

type 

//  About         
TAbout = class(TPropertyEditor) 
public 
  procedure Edit; override; 
  function GetAttributes: TPropertyAttributes; override; 
  function GetValue: string; override; 
end; 

//  TStatusBarEx   
TStatusBarEx = class(TStatusBar) 
private 
  { Private declarations } 
  FAbout:TAbout; 
protected 
  { Protected declarations } 
public 
  { Public declarations } 
  constructor Create(AOwner: TComponent); override; 
published 
  { Published declarations } 
property About: TAbout read FAbout; 
end; 

procedure Register; 

implementation 

constructor TStatusBarEx.Create(AOwner: TComponent); 
begin 
inherited Create(AOwner); 

{   TStatusBarEx         ,   
 ControlStyle  (    )  csAcceptsControls  } 
ControlStyle:= ControlStyle + [csAcceptsControls]; 
end; 

//   TAbout          
procedure TAbout.Edit; 
begin 
Application.MessageBox('TStatusBarEx for Delphi 5'#13#10 
           +'Written by Simon Liu'#13#10 
           +'Email:[email protected]', 
           'About TStatusBarEx',MB_ICONINFORMATION); 
end; 

function TAbout.GetAttributes: TPropertyAttributes; 
begin 
Result := [paDialog, paReadOnly]; 
end; 

function TAbout.GetValue: string; 
begin 
Result := '(Simon)'; 
end; 

procedure Register; 
begin 
// TStatusBarEx     Delphi 5    Win32   
RegisterComponents('Win32', [TStatusBarEx]); 

// About          
RegisterPropertyEditor(typeInfo(TAbout), TStatusBar, 
            'About', TAbout); 
end; 

end. 

TstatusBarEx 컨트롤을 사용하면 StatusBar에 다른 내용을 쉽게 추가할 수 있습니다.예를 들어 상태 표시줄에 그림을 표시하려면 TstatusBarEx 컨트롤에 Image 컨트롤을 놓으십시오.진도표를 추가하려면 ProgressBar를 추가하면 됩니다!
dsgnintf.pas 유닛이 D6 및 D7에서 찾을 수 없는 해결 방법
1. 검색 경로 추가
C:\Program Files\Borland\Delphi7\Source\ToolsAPI

2. 열기
C:\Program Files\Borland\Delphi7\Source\ToolsAPI\DesignEditors.pas

3. 찾아서
uses
  Types, SysUtils, Classes, TypInfo, Variants, DesignIntf, DesignMenus,Proxies;  
uses
  Types, SysUtils, Classes, TypInfo, Variants, DesignIntf, DesignMenus{,Proxies};

4. 찾아서
if (FAncestor = nil) and (Component <> Designer.Root)
        and IsProxyClass(Component.ClassType) then
  
      if (FAncestor = nil) and (Component <> Designer.Root)
        {and IsProxyClass(Component.ClassType)} then

5. 찾아서
  while IsProxyClass(ComponentClass) do
  
  //while IsProxyClass(ComponentClass) do

6. 저장, 컴파일 실행, OK
위 3, 4, 5.바로 Proxies 단원을 Design Editors 단원에서 제거하는 것이다. Design Editors 단원 중 두 군데만 Proxies 단원의 함수를 인용하고 같은 함수인 IsProxy Class를 주석하면 된다.

좋은 웹페이지 즐겨찾기