🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: cn.bbs.comp.program
1 messages
1 total messages Started by �ϵ� Sun, 26 Apr 1998 00:00
Delphi�Զ��岿������
#1029
Author: �ϵ�
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]
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads