🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: cn.bbs.comp.program
Article #1029

Delphi�Զ��岿������

#1029
From: �ϵ�
Date: Sun, 26 Apr 1998 00:00
349 lines
26180 bytes
������: wdsq (WonderDiscoveror), ����: Visual
��  ��: Delphi�Զ��岿������ (ת��)
����վ: ���е����������� (Fri Dec 20 13:56:08 1996)

;37m�� ��������ת���� 2mProgramming 7m������ ��
�� ԭ����2m zhjjs7m ��� ��m


19.2.2 Delphi�������

19.2.2.1 ��������

  �����ԣ�Property���Dz�����������IJ��֣���Ҫ��Ϊ�����û������ʱ���Կ����
�������ǣ������ڽ���������������õ����ؽ������Ҳ����Ҫ����Ϊ���������
�ƺú󣬽�ʹ�û������׵�ʹ�ã��Լ�ά������Ҳ�����ס�
����Ϊ��ʹ���ڲ����и�õ�ʹ�����ԣ������ֽ������������ݣ�
  ���� ΪʲôҪ��������
��  �� ���Ե�����
  ���� ����(publishing)�̳е�����
��  �� ���岿������ 
��  �� ��д���Ա༭��

����1. ΪʲôҪ��������
���������ṩ�dz���Ҫ�ĺô��������Եĺô������������ʱ�ܳ�����Object Inspecto
r�����У��⽫�򻯱�̹�������Ϊ��ֻ����û����ֵ����Ҫ���?�����IJ���
�����Ӳ���ʹ���ߵĹ۵㿴��������������û����Ը����Ը�ֵ���ֵ���ͺ���������
�������
�����Ӳ�����д�ߵĹ۵㿴���Աȶ�������и�ǿ�Ĺ��ܣ�
�� �� �û����������ʱ��������
�������Ƿdz���Ҫ�ģ���Ϊ���󷽷���ֻ��������ʱ���ʡ�����ʹ�û������г���֮ǰ
���ܶ��Ʋ�����ͨ����IJ�����Ӧ��ܶ�ķ��������ǵĹ��ܿ���ͨ��������ʵ�֡�
�� �� ������������ϸ��ʵ��ϸ��
��  �� ����������򵥵ظ�ֵ֮�����Ӧ���紥���¼�
������ �������Ե�ʵ�ַ������������ⷽ���������Ƽ򵥵������ڲ�ͬ�IJ����У���
ʵ�ֲ�ͬ�Ĺ��ܡ�

  ��2. ���Ե�����
�������Կ����Ǻ����ܷ��ص��κ����ͣ���Ϊ���Ե�ʵ�ֿ���ʹ�ú������е�Pascal
���ͣ������Թ����������ԡ�Ϊ����ѡ�����͵�����Ҫ�ķ����Dz�ͬ�����ͳ�����Obje
ct Inspector�����еķ�ʽ��ͬ��Object Inspector������ͬ�����;�������ֵķ�ʽ��
    ��Ҳ����ע�Ჿ��ʱ������ͬ�����Ա༭����
�����±��г����Գ�����Object Inspector�����еķ�ʽ

                    ��19.3  ���Գ�����Object Inspector�����еķ�ʽ
������������������������������������������������������������������������������
  �������͡���������������   ��   ��   ʽ
������������������������������������������������������������������������������
  �����͡���Numeric��Character�� String���Գ�����Object Inspector�У��û���
               ��ֱ�ӱ༭
  ö������     ö�����͵�������ʾֵ�ķ�ʽ�����ڴ����С�ѡ��ʱ��������������              
               ʽ�б����ʾ���еĿ���ȡֵ��
  ��������     �������ͳ�����Object Inspector������ʱ����һ�����ϣ�չ�����á�����������������
               ��ͨ���Ԫ����ΪTrue��False��ѡ��
  ��������     ��Ϊ��������Ա��������Ա༭�������������Լ���published��
               �ԣ��û���Object Inspector��ͨ��չ�����������У����Զ����༭���ǣ� 
               �������͵����Ա����TPersistent�̳С�
  ��������     �������Ա����������Լ������Ա༭����Object Inspectorû����Ƕ����
               �����Ա༭��֧�֡�����
������������������������������������������������������������������������������

    3. �����̳е�����
�������в��������������ͼ̳����ԡ���������в����̳�ʱ���²������̳���������
���������ԡ������̳е��dz����࣬��̳е�������protected��public��������publi
shed������ʹ�û�����protected��public���ԣ����Խ��������ض���Ϊpublished����
����ʹ��TWinControl�̳У���̳���Ctl3D���ԣ�����protected�ģ�����û�����ƺ�
����ʱ���ܷ���Ctl3D��ͨ�����²����н�Ctl3D������Ϊpublished���͸ı���Ctl3D��
���ʼ�������Ĵ�����ʾ��ν�Ctl3D����Ϊpublished��ʹ֮�����ʱ�ɱ����ʡ�

����type
      TSampleComponent=class(TWinControl)
      published
        property Ctl3D;
      end; 

    4. ���岿������
������ ���Ե�����
�����������������ԣ���Ҫ������
  ���� ������
��  �� ���Ե�����
������ ������������ֵ�ķ���

�������٣���������Ӧ�������ڲ�������������public���֣��������������ʱ�ܷ���
�ش��ⲿ���ʣ�Ϊ���������ʱ�༭���ԣ�Ӧ����������published������������������
���Զ���ʾ��Object Inspector�����С������ǵ��͵�����������

����type
      TYourComponent=class(TComponent)
           ��
      private
        FCount: Integer   { �ڲ��洢�� }
        function GetCount: Integer;    { ������ }
        procedure SetCount(ACount: Integer);    {  ��� }
      pubilic
        property Count: Integer read GetCount write SetCount;
      end; 

������ �ڲ���ݴ洢
����������δ洢���Ե����ֵ��Delphiû���ر�Ĺ涨��ͨ��Delphi������ѭ���й�
����
  ���� ������ݴ洢�ڶ���������
��  �� ���Զ�����ı�ʶ����F��ͷ�����綨����TControl�е�����FWidth
������ ������ݵĶ�����Ӧ������private����

��������ֻӦʹ�ü̳е��������?����ֱ�ӷ����ڲ�����ݴ洢��
������ ֱ�ӷ���
����ʹ������ݿ��õ���򵥵İ취��ֱ�ӷ��ʡ�����������read ��write����������
����ͨ����÷��ʷ��������ڲ������ֵ����һ�㶼��read����ֱ�ӷ��ʣ�����writ
e���з������ʣ��Ըı䲿����״̬��
��������IJ���������ʾ�����������Զ����read ��write���ֶ�����ֱ�ӷ��ʣ�

����type
      TYourComponent=class(TComponent)
               ��
      private    {  �ڲ��洢��˽��  }
        FReadOnly: Boolean;   {  ������������ֵ����  }
      published      {  ʹ���������ʱ����  }
        property ReadOnly: Boolean read FReadOnly write FReadOnly;              
      end;

������ ���ʷ���
�������Ե������﷨��������������read��write�����÷��ʷ���ȡ�����˽�������
�������������ʵ�����read ��write���֣�����ʵ��Ӧ����private������ֻ��ʹ
�ü̳е����Է��ʡ�
������ ������
    ���ԵĶ������Dz������ĺ����ҷ���ͬ������ͬ���͵�ֵ��ͨ�����������
���ǡ�Get��������������磬����Count�Ķ�������GetCount����������Ψһ����
���������ԡ�����㲻����read��������������ֻд�ġ�
������ ���
�������Ե�д��������ֻ��һ������Ĺ�̡�������������û�ֵ��ͨ���������"Set"
�����������磬����Count��д��������SetCount�������ֵ�����������Ե���ֵ����
�ˣ�д������Ҫִ�����ڲ��洢�����д�IJ�����
�������û������д��������ô������ֻ���ġ�
����ͨ����������ֵǰҪ�����ֵ�Ƿ��뵱ǰֵ��ͬ��
����������һ���򵥵���������Count��д������

����procedure TMyComponent.SetCount( value: Integer); 
    begin
      if value <>FCount then 
      begin
        FCount := Value; 
        update; 
      end; 
    end; 

    �� ȱʡ����ֵ
����������һ�����ԣ�����ѡ����������Ե�ȱʡֵ���������Ե�ȱʡֵ�Dz������췽
���е�����ֵ�������磬����Component Paletteѡ��ij�������ڴ�����ʱ��Delphiͨ��
���ò������췽�������������������������Գ�ʼֵ��
����Delphiʹ������ȱʡֵ�����Ƿ�����ֵ����DFM�ļ��С��������ȱʡֵ��Delph
i�����DZ��������ֵ������ȱʡֵ�ķ������������������defaultָ��ٸ�ȱʡֵ��
������������һ������ʱ���ܹ�����û��ȱʡֵ�����ԡ����̳е���������һ������
����û��ȱʡֵ�����Եķ������������������nodefaultָ�����ǵ�һ��������
�ԣ���û�б�Ҫ��nodefaultָ���Ϊû��defaultָ���ʾ��ˡ�
������������ΪIsTrue�IJ���������������ȱʡֵTrue�Ĺ�̣�

����type
      TSampleComponent=class(TComponent)
      private
        FIsaTrue: Boolean; 
      pubilic
        constructor Create (AOwner: TComponent); Overvide; 
      published
        property Istrue: Boolean read FIsTrue write FIsTrue default True; 
      end; 

      constructor TSampleComponent.Create (AOwner: TComponent);
      begin
        inherited Create ( Aowner); 
        Fistvue := True;   {  ����ȱʡֵ  }
      end; 

     5. ��д���Ա༭��
    Object Inspector�ṩ�����������Ե�ȱʡ�༭����DelphiҲ֧��ͨ���д��ע��
���Ա༭���ķ���Ϊ��������Լ��ı༭��������ע��ר��Ϊ�Զ��岿����������Ƶ�
�༭����Ҳ�������������ij���͵����ԡ���д���Ա༭����Ҫ����������裺
    �� �̳�һ�����Ա༭������
  ���� ��������Ϊ�ı��༭
��  �� ��������Ϊ����༭
������ �����༭������
  ���� ע�����Ա༭��

������ �̳����Ա༭������
����DsgnIntf�ⵥԪ�ж����˼������Ա༭�������Ƕ��Ǵ�TPropertyEditor�̳ж�����
���������Ա༭��ʱ������ֱ�Ӵ�TPropertyEditor�м̳л�ӱ��е���һ���Ա༭����
�̳С�


                         ��19.4  ���Ա༭��������
   ��������������������������������������������������������������������������
    ��������              �༭������
   ��������������������������������������������������������������������������
     TOrdinalProperty�� ��������������ԣ������ַ�ö�٣�
     TIntegerProperty�� ���������ͣ������ӽ�����



     TCharProperty���� ���ַ����ͻ��ַ��Ӽ�
     TEnumProperty����  �κ�ö������
     TFloatProperty����   �������
     TStringProperty����  �ַ������������ַ�
     TSetElementProperty  �����еĶ���Ԫ��
     TSetElementProperty  ���еļ��ϣ�������ֱ�ӱ༭�������ͣ�����չ����һ��
                          ����Ԫ������
     TClassProperty       ������ʾ����������������Ե�չ��
     TMethodPropevty     ����ָ�룬��Ҫָ�¼�
     TComponentProperty  ��ͬ�����еIJ������û����ܱ༭���������ԣ�
                          ����ָ����ݵIJ���
     TColorProperty������ ������ɫ����ʾ��ɫ������������ʾʮ�������
     TFontNameProperty   �������
     TFontProperty        ���壬����չ����������Ի򵯳�����Ի���
   ��������������������������������������������������������������������������

    ������TFloatPropertyEditor�Ķ��壺

    type
      TFloatProperty=Class(TPropertyEditor)
      public
        function AllEqual: Boolean; override; 
        function GetValue: String; override; 
        procedure SetValue ( Const Value: string ); override; 
      end;

    �� ���ı�һ��༭����
�������е����Զ���Ҫ�����ǵ�ֵ��Object Inspector���������ı��ķ�ʽ��ʾ������
�༭�������ṩ���ı����ֺ�ʵ��ֵ֮��ת�����鷽������Щ�鷽����GetValue��SetVal
ue��������Ա༭��Ҳ�ܼ̳���һϵ�еķ������ڶ���д��ͬ���͵�ֵ�����±?

                       ��19.5  ��д����ֵ�ķ���
           ����������������������������������������������������
               �������͡���  "Get"����         "Set"����
           ����������������������������������������������������
               ������      GetFloatValue         SetFloatVallue
               ����ָ��    GetMethodValue       SetMehodValue
               ��������    GetOrdValue          SetOrdValue
               �ַ�      GetStrValue           SetStrValue
           ����������������������������������������������������

    ������GetValue����ʱ������һ��"Get"������������SetValue����ʱ����һ��"Set
"������
�������Ա༭����GetValue��������һ���ַ��Ա��ֵ�ǰ����ֵ��ȱʡ�����GetValu
e����"unknown"��
    ���Ա༭����SetValue����Object Inspector����String���͵IJ������ת��
�ɺ��ʵ����ͣ�����������ֵ��
����������TIntegerProperty��GetValue��SetValue�����ӣ�

    function TIntegerProperty GetValue: string; 
    begin
      Result := IntToStr (GetOrdValue); 
    end; 

    proceduve TIntegerPropertySetValue (Const Value: string); 
    var
      L: Longint; 
    begin
      L := StrToInt(Value);  { ���ַ�ת��Ϊ��ѧ }
      with GetTypeData (GetPropType)^  do
        if  ( L < Minvalue ) or ( L > MaxValue ) then
          Raise EPropertyError.Create (FmtloadStr(SOutOfRange,
                                   [MinValue��MaxValue]));
      SetOrdValue (L);
    end;

    �� ��������Ϊһ���������༭
����Delphi֧���ṩ�û��ԶԻ���ķ�ʽ���ӻ��ر༭���ԡ�������������ڶԶ�����
�����Եı༭��һ�����͵�������Font���ԣ��û������ҿ�Font�Ի�����ѡ���������
�ԡ�
�����ṩ�������Ա༭�Ի���Ҫ�������Ա༭�����Edit������Edit����Ҳʹ��"Get"
��"Set"������
  ���ڴ�������ʹ�õ�Color���Խ���׼��Windows��ɫ�Ի�����Ϊ���Ա༭������
����TColorProperty��Edit����

    procedure TColorProperty.Edit
    var 
      ColorDialog: TColorDialog;
    begin
      ColorDialog := TColorDialog.Create(Application);  { �����༭�� }
      try
       ColorDialog.Color := GetOrdValue;  { ʹ�����е�ֵ }
       if ColorDialog.Execute then
     �� SetOrdValue (ColorDialog.Color);
      finally
        ColorDialog.Free;
      end;  
  ��end;

    �� �����༭��������
�������Ա༭�������Object Inspector������β��ú��ʵ���ʾ���ߡ�����Object Ins
pector������Ҫ֪�������Ƿ��������ԣ������Ƿ�����ʾ����ȡֵ���б?�����༭��
������ͨ���������Ա༭����GetAttributes������
    GetAttributes����TPropertyAttributes���͵ļ��ϡ������а��������κλ�����
��ֵ��

                       ��19.6 ���Ա༭��������־
     ���� ������������������������������������������������������
           ������־         ��   ��                  ��ط���
     ���� ������������������������������������������������������
             paValuelist     �༭���ܸ���һ��ö��ֵ    GetValues
             paSubPropertie  ������������             GetPropertises
             paDialog       �༭������ʾ�༭�Ի���    Edit
             PaMultiSelect   ���û�ѡ�����һ������
                             ʱ������Ӧ����ʾ         �Σ���
      ���� ������������������������������������������������������

    Color���������ģ���������Object Inspector�������Զ��ַ�ʽѡ�����ǡ�����
���룬���ߴ��б���ѡ�񶨱༭�������TColorProperty��GetAttributes�����ڷ���ֵ
�а�������ԡ�

����function TColorProperty.GetAttributes: TProrertyAttributes;
     begin
       Result := [PaMultiselect, paDialog, paValuelist];
     end;

  ���� ע�����Ա༭��
����һ���������Ա༭����������Delphi��ע�ᡣע�����Ա༭��ʱ��Ҫ��ij��������
����
��������RegisterPropertyEditor�����ע�����Ա༭�����ù�̽����ĸ�����
������ Ҫ�༭�����Ե�������Ϣ��ָ�롣������ͨ����õ���TypeInfo����õ�����Typ
eInfo ( TMyComponent )
������ �༭��Ӧ�õIJ������ͣ����ò���Ϊnil��༭��Ӧ�����������͵���������
������ ������ò���ֻ����ǰһ���������˲���������²ſ���
������ ʹ�ø����Ա༭�������Ե�����

��������������ע���׼�����Ĺ�̣�

    procedure Register;
    begin
      RegisterPropertyEditor (TypeInfo(TComponent), nil, TComponentProperty,
      RegisterPropertyEditor(TypeInfo(TComponentName), TComponent,
                         'Name', (ComponentNamePropety);
      RegisterPropertyEditor (TypeInfo(TMenuItem), TMenu, '', TMenuItemProperty);
    end;

�����������ʽʹ��RegisterPropertyEditor���ֲ�ͬ���÷���
������ ��һ�������
    ��ע������������TComponent�������Ե����Ա༭��TComponentProperty��ͨ����
��Ϊij����������ע�����Ա༭��ʱ�������Ӧ���������������͵����ԣ���ˣ��ڶ�
�͵��������Ϊnil��
������ �ڶ������ʽע���ض����͵����Ա༭��
    ��Ϊ�ض��������ض�����ע�����Ա༭��������������£��༭���������в�����Na
me���ԡ�
  ���� ��������ʽ���ڵ�һ���͵ڶ������ʽ֮��
    ��Ϊ����TMenu��TMenuItem���͵���������ע�������Ա༭����

--
m;36m�� ��Դ:�����е����������� s1000e.whnet.edu.cn��[FROM: 202.197.4.156]m

--
�� ��Դ:���ϴ�С�ٺ���Ϣ����վ bbs.nju.edu.cn��[FROM: a507yjh.nju.edu]
Technical Details
Message-ID: <3OG0Z6$tj3@bbs.nju.edu.cn>
Path: arc1-ca.pugleaf.net!unknown!not-for-mail

Show Full Headers
Complete Article Headers
X-Google-Language: Chinese,GB
X-Google-Thread: fc86e,a3fcabbecffc1052,start
X-Google-Attributes: gidfc86e,public
From: mendy.bbs@bbs.nju.edu.cn (�ϵ�)
Subject: Delphi�Զ��岿������ 
Date: 1998/04/26
Message-ID: <3OG0Z6$tj3@bbs.nju.edu.cn>
X-Deja-AN: 348024402
X-Filename: Programming/M.893585046.A
Organization: nju_bbs
Newsgroups: cn.bbs.comp.program