ÀúÀ۱ǿ¡ ´ëÇÑ °øÁö
ÀÌ ¹®¼­¿¡ Æ÷ÇÔµÈ ¸ðµç ±Û°ú ¼Ò½º ÄÚµå´Â ÀÛÀÚÀÎ Àú ±è¼ºµ¿ÀÇ ÁöÀû Àç»êÀÌÁö¸¸ ¹«´ÜÀ¸·Î ¹èÆ÷Çϰųª Ã¥À̳ª °­ÀÇ ±³ÀçµîÀ» À§ÇÑ º¹Á¦ µî ÀúÀÛ±ÇÀ» ÀúÇØÇÏ´Â ÇàÀ§¸¦ Á¦¿ÜÇϰí´Â ÀÚÀ¯·Ó°Ô »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù.
¶ÇÇÑ ÀÌ ÆäÀÌÁö¿¡ ´ëÇÑ ¸µÅ©´Â ÀÚÀ¯·Ó°Ô ÇÒ ¼ö ÀÖÀ¸³ª Àü¹®À» ÀüÁ¦ÇÏ´Â ÀÏÀº Çã¿ëÇÏÁö ¾Ê½À´Ï´Ù.


1.4. ÇÁ·ÎÆÛƼ Ä«Å×°í¸®(Property Category)

1.4.1. °³¿ä
µ¨ÆÄÀÌ 5¿¡¼­ »õ·Ó°Ô ¼Ò°³µÈ °³³ä Áß¿¡ ÇÁ·ÎÆÛƼ Ä«Å×°í¸®°¡ ÀÖ´Ù. µ¨ÆÄÀÌ ¿ÀºêÁ§Æ® ÀνºÆåÅÍ´Â ¾Æ·¡ ±×¸²Ã³·³ ÄÞÆ÷³ÍÆ®ÀÇ ÇÁ·ÎÆÛƼ¸¦ Ä«Å×°í¸®º°·Î ºÐ·ùÇØ¼­ ƯÁ¤ Ä«Å×°í¸®¿¡ ¼ÓÇÑ ÇÁ·ÎÆÛƼµéÀ» ¼±ÅÃÀûÀ¸·Î ¼û±â°Å³ª º¸ÀÌ°Ô ÇÒ ¼ö ÀÖ´Ù. »õ·Î °³¹ßÇÑ ÄÞÆ÷³ÍÆ®¸¦ µî·ÏÇÒ ¶§ °¢ ÇÁ·ÎÆÛƼ¸¦ ƯÁ¤ Ä«Å×°í¸®¿¡ µî·Ï½Ãų ¼ö ÀÖ´Ù. ÇÁ·ÎÆÛƼ Ä«Å×°í¸®´Â RegisterPropertyInCategory¿Í RegisterPropertiesInCategory ÇÔ¼ö¸¦ ÀÌ¿ëÇØ¼­ µî·ÏÇÑ´Ù. ÇϳªÀÇ ÇÁ·ÎÆÛƼ¸¦ µî·ÏÇÒ ´ë´Â RegisterPropertyInCategory¸¦ »ç¿ëÇÏ°í ¿©·¯ °³ÀÇ ÇÁ·ÎÆÛƼ¸¦ ÇѲ¨¹ø¿¡ µî·ÏÇÒ ¶§´Â RegisterPropertiesInCategory¸¦ »ç¿ëÇÑ´Ù. À̵é ÇÔ¼ö´Â dsgnintf.pas¿¡ Á¤ÀǵǾî ÀÖ´Ù. »õ·Î °³¹ßµÈ ÄÞÆ÷³ÍÆ®ÀÇ ÇÁ·ÎÆÛƼ´Â Ưº°È÷ ÁöÁ¤ÇÏÁö ¾Ê´Â ÇÑ ±âº»ÀûÀ¸·Î TMiscellanousCategory¿¡ ¼ÓÇÏ°Ô µÇ¾î ÀÖÀ¸¸ç µ¨ÆÄÀÌ´Â 13°³ÀÇ ÇÁ·ÎÆÛƼ Ä«Å×°í¸® Ŭ·¡½º¸¦ °¡Áö°í ÀÖ´Ù. ÇÁ·ÎÆÛƼ¸¦ Ä«Å×°í¸®¿¡ µî·ÏÇÒ ¶§ À̵é 13°³ÀÇ ±âº» Ä«Å×°í¸® Ŭ·¡½º¸¦ »ç¿ëÇϰųª À̵é Ŭ·¡½º¿¡¼­ »ó¼Ó ¹Þ¾Æ¼­ »õ·Î¿î Ä«Å×°í¸®¸¦ ¸¸µé¾î »ç¿ëÇÒ ¼ö ÀÖ´Ù.

±×¸² 1-8 ÇÁ·ÎÆÛƼ Ä«Å×°í¸®


1.4.2. ÇÁ·ÎÆÛƼ Ä«Å×°í¸® Ŭ·¡½º
µ¨ÆÄÀÌ´Â ±âº»ÀûÀ¸·Î »ç¿ëÇÒ ¼ö ÀÖ´Â 12°³ÀÇ ÇÁ·ÎÆÛƼ Ŭ·¡½º¸¦ Á¦°øÇÑ´Ù. ¾Æ·¡ Ç¥´Â À̵é Ä«Å×°í¸®¸¦ ³ªÅ¸³»¾ú´Ù.

Ç¥ 1-3 ±âº» ÇÁ·ÎÆÛƼ Ä«Å×°í¸®
Ä«Å×°í¸®¼³¸í
TActionCategory½ÇÇà ½Ã Action°ú °ü·ÃµÈ ÇÁ·ÎÆÛƼ(Action, Caption, Enabled µî)
TDatabaseCategoryµ¥ÀÌÅͺ£À̽º Á¶ÀÛ¿¡ °ü·ÃµÈ ÇÁ·ÎÆÛƼ(DatabaseName, TableName, SQL µî)
TDragNDropCategoryDrag/Drop °ú °ü·ÃµÈ ÇÁ·ÎÆÛƼ(DragCursor, DragMode, DockSite µî)
THelpCategoryµµ¿ò¸» À̳ª Hint °ü·Ã ÇÁ·ÎÆÛƼ(HelpContext, HelpFile, Hint, ShowHint µî)
TLayoutCategory¼³°è ½Ã¿¡ ÄÞÆ÷³ÍÆ®ÀÇ ½Ã°¢ÀûÀΠǥÇö°ú °ü·ÃµÈ ÇÁ·ÎÆÛƼ(Align, Top, Left, Anchors, Constraints µî)
TLegacyCategory°ÅÀÇ »ç¿ëµÇÁö ¾ÊÀº ÇÁ·ÎÆÛƼ(Ctl3D, ParentCtl3D, OldCreateOrderµî)
TLinkageCategory´Ù¸¥ ÄÞÆ÷³ÍÆ®¸¦ ¿¬°áÇÏ´Â ÇÁ·ÎÆÛƼ(Menu, ActiveControl, Menu, Popupmenu, DataSet µî)
TLocaleCategory·ÎÄÉÀϰú °ü·ÃµÈ ÇÁ·ÎÆÛƼ(BidiMode, ParentBiDiMode µî)
TLocalizableCategoryÁö¿ªÈ­ÇÒ ´ë»óÀÌ µÇ´Â ÇÁ·ÎÆÛƼ(Text, Caption, Hint µî)
TMiscellaneousCategoryºÐ·ùÇÒ Çʿ䰡 ¾ø°Å³ª ¼ÓÇÏ´Â Ä«Å×°í¸®°¡ ¾ø´Â ±âŸ ÇÁ·ÎÆÛƼ(AllowAllUp, Name, DefaultMonitor, PixelsPerInch, Tag µî)
TVisualCategory½ÇÇà ½Ã ÄÞÆ÷³ÍÆ®ÀÇ ½ÃÀÛÀûÀΠǥÇö°ú °ü·ÃµÈ ÇÁ·ÎÆÛƼ(Align, Visible, Font, Color, Scaled µî)
TInputCategoryµ¥ÀÌÅÍ ÀԷ°ú °ü·ÃµÈ ÇÁ·ÎÆÛƼ(Enabled, ReadOnly, AutoScroll, KeyPreview µî)


»õ·Î¿î ÇÁ·ÎÆÛƼ Ä«Å×°í¸®¸¦ ¸¸µé·Á¸é À§¿¡¼­ ¼³¸íÇÑ 12°³ÀÇ Å¬·¡½º³ª TPropertyCategory¿¡¼­ »ó¼Ó ¹Þ¾Æ¼­ ¸¸µé¸é µÈ´Ù. »õ ÇÁ·ÎÆÛƼ Ä«Å×°í¸®¸¦ ¸¸µé ¶§ Name °¡»ó ¸Þ¼Òµå¸¦ ¿À¹ö¶óÀ̵å ÇØ¼­ »õ·Î ¸¸µç Ä«Å×°í¸®ÀÇ À̸§À» ÁöÁ¤ÇØ ÁØ´Ù. ¿¹¸¦ µé¾î TMyCategory À̶ó´Â Ä«Å×°í¸®¸¦ ¸¸µé¾úÀ¸¸é ¾Æ·¡¿Í °°ÀÌ Name ¸Þ¼Òµå¸¦ ¿À¹ö¶óÀ̵å ÇØ¼­ Ä«Å×°í¸®ÀÇ À̸§À» "My Category" ¶ó°í ÁöÁ¤ÇØ ÁØ´Ù. ÀÌ À̸§Àº ¿ÀºêÁ§Æ® ÀνºÆåÅÍ¿¡¼­ Ä«Å×°í¸®¸¦ Ç¥½ÃÇÒ ¶§ »ç¿ëÇÑ´Ù.

type
  TMyCategory = class(TPropertyCategory)
  public
    class function Name: string; override;
  end;

{ »ý·« }

implementation

{ »ý·« }

class function TMyCategory.Name : string;
begin
  Result := 'My Category';
end;


1.4.3. Ä«Å×°í¸® µî·Ï
ÇϳªÀÇ ÇÁ·ÎÆÛƼ Ä«Å×°í¸®¸¦ µî·ÏÇÒ ¶§´Â RegisterPropertyInCategory ÇÔ¼ö¸¦ »ç¿ëÇÑ´Ù. ÀÌ ÇÔ¼ö´Â ¾Æ·¡ ¼±¾ðó·³ 4 °¡Áö Á¾·ùÀÇ ÀÎÀÚ ¸®½ºÆ®¸¦ °¡Áöµµ·Ï ¿À¹ö·ÎµåµÇ¾î ÀÖ´Ù.

function RegisterPropertyInCategory(ACategoryClass: TPropertyCategoryClass;
  const APropertyName: string): TPropertyFilter; overload;
function RegisterPropertyInCategory(ACategoryClass: TPropertyCategoryClass;
  AComponentClass: TClass; const APropertyName: string): TPropertyFilter; overload;
function RegisterPropertyInCategory(ACategoryClass: TPropertyCategoryClass;
  APropertyType: PTypeInfo; const APropertyName: string): TPropertyFilter; overload;
function RegisterPropertyInCategory(ACategoryClass: TPropertyCategoryClass;
  APropertyType: PTypeInfo): TPropertyFilter; overload;


ù¹øÂ°´Â Ä«Å×°í¸® Ŭ·¡½º¿Í ÇÁ·ÎÆÛƼ À̸§À» ÀÎÀÚ·Î °¡Áö¸ç ¸ðµç ÄÞÆ÷³ÍÆ®ÀÇ APropertyName ÇÁ·ÎÆÛƼ¸¦ ACategoryClass¿¡ µî·ÏÇØ ÁØ´Ù. µÎ¹øÂ°´Â Ä«Å×°í¸® Ŭ·¡½º, ÄÞÆ÷³ÍÆ® Ŭ·¡½º, ÇÁ·ÎÆÛƼ À̸§À» ÀÎÀÚ·Î °¡Áö¸ç ¸ðµç ÄÞÆ÷³ÍÆ®°¡ ¾Æ´Ï°í ÁöÁ¤ÇÑ ÄÞÆ÷³ÍÆ® Ŭ·¡½ºÀÇ ÇÁ·ÎÆÛƼ¿¡ ´ëÇØ¼­¸¸ µî·ÏÇØ ÁØ´Ù. ¼¼¹øÂ°´Â Ä«Å×°í¸® Ŭ·¡½º, Çü Á¤º¸, ÇÁ·ÎÆÛƼ À̸§À» ÀÎÀÚ·Î °¡Áö¸ç ÁöÁ¤ÇÑ ÇüÀÇ ÇÁ·ÎÆÛƼ¸¦ µî·ÏÇØ ÁØ´Ù. ³×¹øÂ°´Â Ä«Å×°í¸® Ŭ·¡½º¿Í Çü Á¤º¸¸¸À» ÀÎÀÚ·Î °¡Áö¸ç ÁöÁ¤ ÇüÀ» °¡Áö´Â ¸ðµç ÇÁ·ÎÆÛƼ¸¦ µî·ÏÇØ ÁØ´Ù. ¾Æ·¡ ÄÚµåµéÀº °¢ ÇÔ¼öÀÇ »ç¿ë ¿¹Á¦ÀÌ´Ù.

RegisterPropertyInCategory(TMyCategory, 'About');
RegisterPropertyInCategory(TMyCategory, TMyLabel, 'About');
RegisterPropertyInCategory(TMyCategory, TypeInfo(string), 'About');
RegisterPropertyInCategory(TMyCategory, Typeinfo(string));


ù¹øÂ°´Â ¸ðµç ÄÞÆ÷³ÍÆ®ÀÇ About ÇÁ·ÎÆÛƼ¸¦ TMyCategory¿¡ µî·ÏÇØ ÁÖ°í µÎ¹øÂ°´Â TMyLabel Ŭ·¡½º³ª ±× ÀÚ¼Õ Å¬·¡½ºÀÇ About ÇÁ·ÎÆÛƼ¸¦ TMyCategory¿¡ µî·ÏÇØ ÁØ´Ù. ±×¸®°í ¼¼¹øÂ°´Â ¸ðµç ÄÞÆ÷³ÍÆ®ÀÇ About ÇÁ·ÎÆÛƼ Áß ÇüÀÌ stringÀÎ °Í¸¸ µî·ÏµÇ°í ¸¶Áö¸·À¸·Î ³×¹øÂ°´Â string ÇüÀÇ ¸ðµç ÇÁ·ÎÆÛƼ¸¦ TMyCategory¿¡ µî·ÏÇØ ÁØ´Ù.

Çѹø¿¡ ¿©·¯ °³ÀÇ ÇÁ·ÎÆÛƼ¸¦ µî·ÏÇÒ ¶§ »ç¿ëÇÏ´Â RegisterPropertiesInCategory ÇÔ¼ö´Â ¾Æ·¡¿Í °°ÀÌ 3 °¡Áö Á¾·ùÀÇ ÀÎÀÚ ¸®½ºÆ®¸¦ °¡Áöµµ·Ï ¿À¹ö·ÎµåµÇ¾î ÀÖ´Ù.

function RegisterPropertiesInCategory(ACategoryClass: TPropertyCategoryClass;
  const AFilters: array of const): TPropertyCategory; overload;
function RegisterPropertiesInCategory(ACategoryClass: TPropertyCategoryClass;
  AComponentClass: TClass; const AFilters: array of string): TPropertyCategory; overload;
function RegisterPropertiesInCategory(ACategoryClass: TPropertyCategoryClass;
  APropertyType: PTypeInfo; const AFilters: array of string): TPropertyCategory; overload;


ù¹øÂ°´Â ÇÁ·ÎÆÛƼ À̸§¸¸ °¡Áö°í Ä«Å×°í¸®¸¦ ¿¬°áÇØ ÁÖ¸ç µÎ¹øÂ°´Â ÇÁ·ÎÆÛƼ À̸§°ú ÄÞÆ÷³ÍÆ® Ŭ·¡½º, ¼¼¹øÂ°´Â ÇÁ·ÎÆÛƼ À̸§°ú Çü Á¤º¸¸¦ °¡Áö°í µî·ÏÇÑ´Ù.
¾Æ·¡ ÄÚµå´Â °¢°¢ÀÇ ÇÔ¼ö¿¡ ´ëÇÑ »ç¿ë ¿¹Á¦ÀÌ´Ù.

RegisterPropertiesInCategory(TMyCategory, ['About', 'Caption' ]);
RegisterPropertiesInCategory(TMyCategory, TMyLabel, ['About', 'Caption']);
RegisterPropertiesInCategory(TMyCategory, TypeInfo(string), ['About', 'Caption']);


1.4.4. IsPropertyInCategory ÇÔ¼ö
ƯÁ¤ ÇÁ·ÎÆÛƼ°¡ ¾î´À Ä«Å×°í¸®¿¡ ¼ÓÇÏ´Â Áö¸¦ ¾Ë°í ½ÍÀ» ¶§´Â IsPropertyInCategory ÇÔ¼ö¸¦ »ç¿ëÇÑ´Ù. ÀÌ ÇÔ¼öµµ 2 °¡Áö Á¾·ùÀÇ ÀÎÀÚ ¸®½ºÆ®¸¦ °¡Áöµµ·Ï ¿À¹ö·Îµå µÇ¾î Àִµ¥ ù¹øÂ°´Â ÄÞÆ÷³ÍÆ® Ŭ·¡½º¿Í ÇÁ·ÎÆÛƼ À̸§, µÎ¹øÂ°´Â ÄÞÆ÷³ÍÆ® Ŭ·¡½ºÀÇ À̸§°ú ÇÁ·ÎÆÛƼ À̸§À» °¡Áö°í °Ë»çÇÑ´Ù.
¾Æ·¡´Â °£´ÜÇÑ »ç¿ë ¿¹Á¦ÀÌ´Ù.

IsItThere := IsPropertyInCategory(TMyCategory, TMyLabel, 'About');
IsItThere := IsPropertyInCategory(TMyCategory, 'TMyLabel', 'About');


´ÙÀ½À¸·Î PropertyCategoryList ÇÔ¼ö´Â TPropertyCategoryList ÇüÀÇ µ¥ÀÌÅ͸¦ ¹ÝȯÇϴµ¥ ÀÌ ÇüÀº ÇöÀç »ç¿ë °¡´ÉÇÑ ¸ðµç ÇÁ·ÎÆÛƼ Ä«Å×°í¸® Ŭ·¡½ºÀÇ ¸®½ºÆ®¸¦ °¡Áö°í ÀÖ´Ù.


ÀúÀ۱ǿ¡ ´ëÇÑ °øÁö
ÀÌ ¹®¼­¿¡ Æ÷ÇÔµÈ ¸ðµç ±Û°ú ¼Ò½º ÄÚµå´Â ÀÛÀÚÀÎ Àú ±è¼ºµ¿ÀÇ ÁöÀû Àç»êÀÌÁö¸¸ ¹«´ÜÀ¸·Î ¹èÆ÷Çϰųª Ã¥À̳ª °­ÀÇ ±³ÀçµîÀ» À§ÇÑ º¹Á¦ µî ÀúÀÛ±ÇÀ» ÀúÇØÇÏ´Â ÇàÀ§¸¦ Á¦¿ÜÇϰí´Â ÀÚÀ¯·Ó°Ô »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù.
¶ÇÇÑ ÀÌ ÆäÀÌÁö¿¡ ´ëÇÑ ¸µÅ©´Â ÀÚÀ¯·Ó°Ô ÇÒ ¼ö ÀÖÀ¸³ª Àü¹®À» ÀüÁ¦ÇÏ´Â ÀÏÀº Çã¿ëÇÏÁö ¾Ê½À´Ï´Ù.