fcpropedt.pas
上传用户:hylc_2004
上传日期:2014-01-23
资源大小:46800k
文件大小:30k
源码类别:

Delphi控件源码

开发平台:

Delphi

  1. unit fcPropEdt;
  2. {
  3. //
  4. // Components : TfcPropEdt
  5. //
  6. // Copyright (c) 1999 by Woll2Woll Software
  7. //
  8. // Changes:
  9. // 4/14/99 - PYW - Causes controls in OutlookBar not to be painted when a button is selected.
  10. // 12/7/99 - Better palette support for loading image button images.
  11. }
  12. interface
  13. {$i fcIfDef.pas}
  14. uses Windows, Messages, Classes, SysUtils, Graphics,
  15.   {$ifdef fcdelphi6up}
  16.   designintf, designeditors,
  17.   vcleditors,
  18.   {$else}
  19.   dsgnintf,
  20.   {$endif}
  21.   typinfo,
  22.   ColnEdit,
  23.   fcPicEdt, fcButton, fcImgBtn,
  24.   fcShapeBtn, fcLabel, fcLinesEditor, fcButtonGroup, fcCollectionEditor,
  25.   fcTreeView_ItemsEditor, fcTreeCombo, fcStatusBar, fcImager, Controls,
  26.   fcCommon, Dialogs, fcOutlookBar, fcImageForm, fcBitmap, fcOutlookList,
  27.   fcTreeView, fcColorCombo,stdctrls, fcCollection, forms, clipbrd,
  28.   fcTreeHeader;
  29. {$i fcIfDef.pas}
  30. const
  31.   FC_BTN_SETSHADECOLORS = 0;
  32.   FC_BTN_RESIZE = 1;
  33.   FC_IMGBTN_SPLIT = 2;
  34.   FC_CG_COUNT = 1;
  35.   FC_CG_NEWBUTTON = 0;
  36.   FC_OTLKPNL_ADDOUTLOOKLIST = 0;
  37.   FC_OTLKPNL_PASTE = 1;
  38. type
  39.   {$ifdef fcDelphi6Up}
  40.   TFormDesigner = IDesigner;
  41.   {$else}
  42.   TFormDesigner = IFormDesigner;
  43.   {$endif}
  44.   TfcComponentEditor = class(TDefaultEditor)
  45.   private
  46.     procedure ShowAboutBox;
  47.   public
  48.     function GetVerbCount: Integer; override;
  49.     function GetVerb(Index: Integer): string; override;
  50.     procedure ExecuteVerb(Index: Integer); override;
  51.   end;
  52.   TfcCustomOutlookListEditor = class(TfcComponentEditor)
  53.   public
  54.     procedure Edit; override;
  55.   end;
  56.   TfcControllerProperty = class(TComponentProperty)
  57.     procedure GetValues(Proc : TGetStrProc); override;
  58.     procedure fcGetStrProc(const s: string);
  59.   end;
  60.   TfcLabelCaptionEditor = class(TPropertyEditor)
  61.   public
  62.     function GetAttributes: TPropertyAttributes; override;
  63.     function GetValue: string; override;
  64.     procedure SetValue(const Value: string); override;
  65.     procedure Edit; override;
  66.   end;
  67.   TfcButtonCaptionEditor = class(TPropertyEditor)
  68.   public
  69.     function GetAttributes: TPropertyAttributes; override;
  70.     function GetValue: string; override;
  71.     procedure SetValue(const Value: string); override;
  72.     procedure Edit; override;
  73.   end;
  74.   TfcCustomBtnEditor = class(TfcComponentEditor)
  75.   public
  76.     constructor Create(AComponent: TComponent; ADesigner: TFormDesigner); override;
  77.     function GetVerb(Index: Integer): string; override;
  78.     function GetVerbCount: Integer; override;
  79.     procedure ExecuteVerb(Index: Integer); override;
  80.   end;
  81.   TfcImgBtnEditor = class(TfcCustomBtnEditor)
  82.   protected
  83.     ClickedPoint: TPoint;
  84.   public
  85.     constructor Create(AComponent: TComponent; ADesigner: TFormDesigner); override;
  86.     function GetVerb(Index: Integer): string; override;
  87.     function GetVerbCount: Integer; override;
  88.     procedure Edit; override;
  89.     procedure ExecuteVerb(Index: Integer); override;
  90.   end;
  91.   TfcImageBtnImageEditor = class(TPropertyEditor)
  92.   public
  93.     function GetAttributes: TPropertyAttributes; override;
  94.     function GetValue: string; override;
  95.     procedure Edit; override;
  96.   end;
  97.   TfcButtonGroupEditor = class(TfcComponentEditor)
  98.   protected
  99.     {$ifdef fcDelphi6Up}
  100.     Editor: IComponentEditor;
  101.     {$else}
  102.     Editor: TComponentEditor;
  103.     {$endif}
  104.     ExecutionPoint: TPoint;
  105.   public
  106.     function GetVerb(Index: Integer): string; override;
  107.     function GetVerbCount: Integer; override;
  108.     procedure GetObscuredEditor;
  109.     procedure Edit; override;
  110.     procedure ExecuteVerb(Index: Integer); override;
  111.   end;
  112.   TfcButtonGroupItemsEditor = class(TPropertyEditor)
  113.   public
  114.     function GetAttributes: TPropertyAttributes; override;
  115.     function GetValue: string; override;
  116.     procedure Edit; override;
  117.   end;
  118.   TfcButtonGroupControlClassEditor = class(TPropertyEditor)
  119.   public
  120.     function GetAttributes: TPropertyAttributes; override;
  121.     function GetValue: string; override;
  122.     procedure GetValues(Proc: TGetStrProc); override;
  123.     procedure SetValue(const Value: string); override;
  124.   end;
  125.   TfcTreeComboEditor = class(TfcComponentEditor)
  126.   public
  127.     procedure Edit; override;
  128.   end;
  129.   TfcTreeComboItemsProperty = class(TPropertyEditor)
  130.   public
  131.     procedure Edit; override;
  132.     function GetAttributes: TPropertyAttributes; override;
  133.     function GetValue: string; override;
  134.   end;
  135.   TfcStatusBarEditor = class(TfcComponentEditor)
  136.   public
  137.     procedure Edit; override;
  138.   end;
  139.   TfcHeaderEditor = class(TfcComponentEditor)
  140.   public
  141.     procedure Edit; override;
  142. {  public
  143.     procedure ExecuteVerb(Index: Integer); override;
  144.     function GetVerb(Index: Integer): string; override;
  145.     function GetVerbCount: Integer; override;
  146. }
  147.   end;
  148.   TfcStatusBarPanelsEditor = class(TPropertyEditor)
  149.   public
  150.     procedure Edit; override;
  151.     function GetValue: string; override;
  152.     function GetAttributes: TPropertyAttributes; override;
  153.   end;
  154.   TfcImagerEditor = class(TfcComponentEditor)
  155.     procedure Edit; override;
  156.   end;
  157.   TfcOutlookPanelEditor = class(TfcComponentEditor)
  158.     function GetVerb(Index: Integer): string; override;
  159.     function GetVerbCount: Integer; override;
  160.     procedure ExecuteVerb(Index: Integer); override;
  161.   end;
  162.   TfcImageFormEditor = class(TfcComponentEditor)
  163.     procedure Edit; override;
  164.   end;
  165.   TfcBitmapEditor = class(TPropertyEditor)
  166.     procedure Edit; override;
  167.     function GetAttributes: TPropertyAttributes; override;
  168.     function GetValue: string; override;
  169.   end;
  170.   TfcButtonGroupSelectedEditor = class(TPropertyEditor)
  171.     function GetAttributes: TPropertyAttributes; override;
  172.     function GetValue: string; override;
  173.     procedure SetValue(const Value: string); override;
  174.     procedure GetValues(Proc: TGetStrProc); override;
  175.   end;
  176.   TfcTreeViewItemsProperty = class(TPropertyEditor)
  177.      procedure Edit; override;
  178.      function GetAttributes: TPropertyAttributes; override;
  179.      function GetValue: string; override;
  180.   end;
  181.   TfcTreeViewEditor = class(TfcComponentEditor)
  182.   public
  183.     procedure Edit; override;
  184.   end;
  185.   TfcColorComboSelectedColorEditor = class(TPropertyEditor)
  186.   public
  187.     function GetAttributes: TPropertyAttributes; override;
  188.     function GetValue: string; override;
  189.     procedure Edit; override;
  190.     procedure SetValue(const Value: string); override;
  191.     procedure GetValues(Proc: TGetStrProc); override;
  192.   end;
  193.   {$ifdef fcDelphi6Up}
  194.   TfcImageBtnTranColorEditor = class(TColorProperty, ICustomPropertyListDrawing)
  195.   {$else}
  196.   TfcImageBtnTranColorEditor = class(TColorProperty)
  197.   {$endif}
  198.   public
  199.     {$ifdef fcDelphi5}
  200.     procedure ListDrawValue(const Value: string; ACanvas: TCanvas;
  201.       const ARect: TRect; ASelected: Boolean); override;
  202.     {$endif}
  203.     {$ifdef fcDelphi6Up}
  204.     { ICustomPropertyListDrawing }
  205.     procedure ListMeasureHeight(const Value: string; ACanvas: TCanvas;
  206.       var AHeight: Integer);
  207.     procedure ListMeasureWidth(const Value: string; ACanvas: TCanvas;
  208.       var AWidth: Integer);
  209.     procedure ListDrawValue(const Value: string; ACanvas: TCanvas;
  210.       const ARect: TRect; ASelected: Boolean);
  211.     {$endif}
  212.     function GetValue: string; override;
  213.     procedure SetValue(const Value: string); override;
  214.     procedure GetValues(Proc: TGetStrProc); override;
  215.   end;
  216.   TfcComponentProperty = class(TComponentProperty)
  217.   private
  218.     FStrings: TStringList;
  219.   protected
  220.     function ValidComponent(AComponent: TComponent): Boolean; virtual;
  221.     procedure GetBaseValues(const s: string); virtual;
  222.   public
  223.     function GetAttributes: TPropertyAttributes; override;
  224.     procedure SetValue(const Value: string); override;
  225.     procedure GetValues(Proc: TGetStrProc); override;
  226.   end;
  227.   TfcImageBtnExtImageEditor = class(TfcComponentProperty)
  228.   protected
  229.     function ValidComponent(AComponent: TComponent): Boolean; override;
  230.   end;
  231.   TfcOutlookBarActivePageEditor = class(TfcComponentProperty)
  232.   protected
  233.     function ValidComponent(AComponent: TComponent): Boolean; override;
  234.   public
  235.     function GetAttributes: TPropertyAttributes; override;
  236.   end;
  237.   TfcCollectionEditor = class(TPropertyEditor)
  238.   public
  239.     function GetAttributes: TPropertyAttributes; override;
  240.     function GetValue: string; override;
  241.     procedure Edit; override;
  242.   end;
  243. implementation
  244. uses fcabout, registry;
  245. var MyProc: TGetStrProc;
  246. constructor TfcCustomBtnEditor.Create(AComponent: TComponent; ADesigner: TFormDesigner);
  247. begin
  248.   inherited;
  249. //  if Selections.Equals(Selection) then
  250. //  if GetKeyState(VK_RBUTTON) >= 0 then
  251.     with Component as TfcCustomBitBtn do
  252.       if (Parent <> nil) and (Parent is TfcCustomButtonGroup) then
  253.   begin
  254.     if Parent is TfcCustomOutlookBar then
  255.       with Parent as TfcCustomButtonGroup do
  256.         Selected := ButtonItems.FindButton(Component as TfcCustomBitBtn);
  257.       //4/14/99 - PYW - Causes controls in OutlookBar not to be painted when a button is selected.
  258.       //Parent.Invalidate;
  259.   end;
  260. end;
  261. function TfcCustomBtnEditor.GetVerb(Index: Integer): string;
  262. begin
  263.   case Index of
  264.     FC_BTN_SETSHADECOLORS: result := '&Set Shade Colors';
  265.     FC_BTN_RESIZE: result := '&Size to Default';
  266.   else
  267.     result := inherited GetVerb(Index);
  268.   end;
  269. end;
  270. function TfcCustomBtnEditor.GetVerbCount: Integer;
  271. begin
  272.   result := inherited GetVerbCount + 2;
  273. end;
  274. procedure TfcCustomBtnEditor.ExecuteVerb(Index: Integer);
  275. begin
  276.   case Index of
  277.     FC_BTN_SETSHADECOLORS: begin
  278.       (Component as TfcCustomBitBtn).UpdateShadeColors((Component as TfcCustomBitBtn).Color);
  279.       Designer.Modified;
  280.     end;
  281.     FC_BTN_RESIZE: begin
  282.       (Component as TfcCustomBitBtn).SizeToDefault;
  283.       Designer.Modified;
  284.     end;
  285.   else
  286.     inherited;
  287.   end;
  288. end;
  289. // TfcImgBtnEditor - ComponentEditor for TfcImageBtn
  290. constructor TfcImgBtnEditor.Create(AComponent: TComponent; ADesigner: TFormDesigner);
  291. begin
  292.   inherited;
  293.   with AComponent as TfcCustomImageBtn do
  294.     if (Parent <> nil) and (Parent is TfcCustomButtonGroup) and
  295.        (Parent as TfcCustomButtonGroup).Transparent then
  296.       (Parent as TfcCustomButtonGroup).LastButtonRect := BoundsRect;
  297. end;
  298. procedure TfcImgBtnEditor.Edit;
  299. begin
  300.   if (Component is TfcCustomImageBtn) and not (Component is TfcCustomShapeBtn) and (Component as TfcCustomImageBtn).Image.Empty then
  301.   begin
  302.     fcExecutePictureEditor((Component as TfcCustomImageBtn).Image, (Component as TfcCustomImageBtn).Image);
  303.     Designer.Modified;
  304.   end else inherited;
  305. end;
  306. function TfcImgBtnEditor.GetVerb(Index: Integer): string;
  307. begin
  308.   ClickedPoint := (Component as TfcCustomImageBtn).ScreenToClient(fcGetCursorPos);
  309. {  case Index of
  310.     FC_IMGBTN_SPLIT: result := '&Split Highlighted Image';
  311.   else}
  312.     result := inherited GetVerb(Index);
  313. //  end;
  314. end;
  315. function TfcImgBtnEditor.GetVerbCount: Integer;
  316. begin
  317.   result := inherited GetVerbCount// + 1;
  318. end;
  319. procedure TfcImgBtnEditor.ExecuteVerb(Index: Integer);
  320. begin
  321.   case Index of
  322.     FC_BTN_SETSHADECOLORS:
  323.       if (Component as TfcCustomImageBtn).Color = clNone then
  324.         (Component as TfcCustomImageBtn).UpdateShadeColors((Component as TfcCustomImageBtn).ColorAtPoint(ClickedPoint))
  325.       else inherited ExecuteVerb(Index);
  326. //    FC_IMGBTN_SPLIT: if Component is TfcCustomImageBtn then (Component as TfcCustomImageBtn).SplitImage;
  327.   else
  328.     inherited ExecuteVerb(Index);
  329.   end;
  330. end;
  331. // TfcImageBtnImageEditor - PropertyEditor for the
  332. //   Image property of TfcImageBtn
  333. function TfcImageBtnImageEditor.GetAttributes: TPropertyAttributes;
  334. begin
  335.   result := [paDialog, paMultiSelect];
  336. end;
  337. function TfcImageBtnImageEditor.GetValue: string;
  338. begin
  339.   if TBitmap(Pointer(GetOrdValue)).Empty then
  340.     result := '(None)'
  341.   else result := '(TBitmap)';
  342. end;
  343. procedure TfcImageBtnImageEditor.Edit;
  344. begin
  345.   fcExecutePictureEditor(TfcBitmap(Pointer(GetOrdValue)), Pointer(GetOrdValue));
  346.   Designer.Modified;
  347. end;
  348. // TfcLabelCaptionEditor - PropertyEditor for the
  349. //   Caption property of TfcLabel
  350. function TfcLabelCaptionEditor.GetAttributes: TPropertyAttributes;
  351. begin
  352.   result := [paDialog, paAutoUpdate];
  353. end;
  354. function TfcLabelCaptionEditor.GetValue: string;
  355. begin
  356.   result := (GetComponent(0) as TfcCustomLabel).Caption;
  357.   if pos(#13#10, result) <> 0 then result := Copy(result, 1, Pos(#13#10, result) - 1);
  358. end;
  359. procedure TfcLabelCaptionEditor.SetValue(const Value: string);
  360. begin
  361.   (GetComponent(0) as TfcCustomLabel).Caption := Value;
  362.   Designer.Modified;
  363. end;
  364. procedure TfcLabelCaptionEditor.Edit;
  365. begin
  366.   fcExecuteTextEditor(GetComponent(0), 'Caption', (GetComponent(0) as TComponent).Name + '.Caption');
  367.   Designer.Modified;
  368. end;
  369. // TfcButtonCaptionEditor - PropertyEditor for
  370. //   Caption property of TfcCustomBitBtn
  371. function TfcButtonCaptionEditor.GetAttributes: TPropertyAttributes;
  372. begin
  373.   result := [paDialog, paAutoUpdate];
  374. end;
  375. function TfcButtonCaptionEditor.GetValue: string;
  376. begin
  377.   result := (GetComponent(0) as TfcCustomBitBtn).Caption;
  378.   if pos(#13#10, result) <> 0 then result := Copy(result, 1, Pos(#13#10, result) - 1);
  379. end;
  380. procedure TfcButtonCaptionEditor.SetValue(const Value: string);
  381. begin
  382.   (GetComponent(0) as TfcCustomBitBtn).Caption := Value;
  383.   Designer.Modified;
  384. end;
  385. procedure TfcButtonCaptionEditor.Edit;
  386. begin
  387.   fcExecuteTextEditor(GetComponent(0), 'Caption', (GetComponent(0) as TComponent).Name + '.Caption');
  388.   Designer.Modified;
  389. end;
  390. // TfcButtonGroupEditor - ComponentEditor for
  391. //   TfcCustomButtonGroup.
  392. procedure TfcButtonGroupEditor.GetObscuredEditor;
  393. var Control: TControl;
  394.   function ControlUnderMouse: TControl;
  395.   var i: Integer;
  396.       p: TPoint;
  397.   begin
  398.     result := nil;
  399.     with TfcCustomButtonGroup(Component) do
  400.     begin
  401.       p := ScreenToClient(ExecutionPoint);
  402.       for i := 0 to ControlCount - 1 do
  403.       begin
  404.         if PtInRect(Controls[i].BoundsRect, p) and not (Controls[i] is TfcCustomImager) then
  405.         begin
  406.           result := Controls[i];
  407.           Break;
  408.         end;
  409.       end;
  410.     end;
  411.   end;
  412. begin
  413.   Editor := nil;
  414.   with TfcCustomButtonGroup(Component) do
  415.   begin
  416.     Control := ControlUnderMouse;
  417.     if Control <> nil then Editor := GetComponentEditor(Control, Designer);
  418.   end;
  419. end;
  420. function TfcButtonGroupEditor.GetVerb(Index: Integer): string;
  421. begin
  422.   result := '';
  423.   case Index of
  424.     FC_CG_NEWBUTTON: result := '&New Button';
  425.   else
  426.     result := inherited GetVerb(Index);
  427.   end;
  428.   ExecutionPoint := fcGetCursorPos;
  429.   GetObscuredEditor;
  430.   if (Index >= FC_CG_COUNT) and (Index <> GetVerbCount - 1) and (Editor <> nil) then with Editor do
  431.     result := Component.ClassName + ' - ' + GetVerb(Index - FC_CG_COUNT);
  432. {  Editor.Free;
  433.   Editor := nil;}
  434. end;
  435. function TfcButtonGroupEditor.GetVerbCount: Integer;
  436. var CreatedEditor: Boolean;
  437. begin
  438.   ExecutionPoint := fcGetCursorPos;
  439.   result := inherited GetVerbCount + FC_CG_COUNT;
  440.   CreatedEditor := Editor = nil;
  441.   if CreatedEditor then GetObscuredEditor;
  442.   if Editor <> nil then inc(result, Editor.GetVerbCount - 1);
  443.   if CreatedEditor then
  444.   begin
  445.     {$ifndef fcDelphi6Up}
  446.     Editor.Free;
  447.     {$endif}
  448.     Editor := nil;
  449.   end;
  450. end;
  451. procedure TfcButtonGroupEditor.ExecuteVerb(Index: Integer);
  452. begin
  453.   case Index of
  454.     FC_CG_NEWBUTTON: (Component as TfcCustomButtonGroup).ButtonItems.AddItem;
  455.   else
  456.     inherited;
  457.   end;
  458.   if (Index >= FC_CG_COUNT) and (Index <> GetVerbCount - 1) then
  459.   begin
  460. //    GetObscuredEditor;
  461.     if (Editor <> nil) then Editor.ExecuteVerb(Index - FC_CG_COUNT);
  462.   end;
  463.   {$ifndef fcDelphi6Up}
  464.   Editor.Free;
  465.   {$endif}
  466.   Editor := nil;
  467. end;
  468. procedure TfcButtonGroupEditor.Edit;
  469. begin
  470.   fcExecuteCollectionEditor(Component.Name + '.Buttons',
  471.      TFormDesigner(Designer), 'ButtonItems', TfcButtonGroup(Component).ButtonItems, nil);
  472. end;
  473. // TfcButtonGroupItemsEditor - PropertyEditor for the
  474. //   Items property of TfcCustomButtonGroup.
  475. function TfcButtonGroupItemsEditor.GetAttributes: TPropertyAttributes;
  476. begin
  477.   result := [paDialog];
  478. end;
  479. function TfcButtonGroupItemsEditor.GetValue: string;
  480. begin
  481.   result := '(TfcButtonGroupItems)';
  482. end;
  483. procedure TfcButtonGroupItemsEditor.Edit;
  484. begin
  485.   fcExecuteCollectionEditor(TComponent(GetComponent(0)).Name + '.Buttons',
  486.     TFormDesigner(Designer), 'ButtonItems', TfcButtonGroup(GetComponent(0)).ButtonItems, nil);
  487. end;
  488. // TfcButtonGroupControlClassEditor - PropertyEditor
  489. //   for the ControlClass property of TfcCustomButtonGroup.
  490. function TfcButtonGroupControlClassEditor.GetAttributes: TPropertyAttributes;
  491. begin
  492.   result := [paValueList];
  493. end;
  494. function TfcButtonGroupControlClassEditor.GetValue: string;
  495. begin
  496.   result := TfcButtonGroup(GetComponent(0)).ButtonClassName;
  497. end;
  498. procedure TfcButtonGroupControlClassEditor.GetValues(Proc: TGetStrProc);
  499. begin
  500.   Proc('TfcShapeBtn');
  501.   Proc('TfcImageBtn');
  502. end;
  503. procedure TfcButtonGroupControlClassEditor.SetValue(const Value: string);
  504. begin
  505.   TfcButtonGroup(GetComponent(0)).ButtonClassName := Value;
  506. end;
  507. // TfcTreeComboEditor - ComponentEditor for TfcTreeCombo
  508. procedure TfcTreeComboEditor.Edit;
  509. begin
  510.   ExecuteTreeNodesEditor(Designer, (Component as TfcCustomTreeCombo).TreeView);
  511. end;
  512. // TfcTreeComboItemsProperty - PropertyEditor for
  513. //   the Items property of TfcTreeCombo.
  514. procedure TfcTreeComboItemsProperty.Edit;
  515. begin
  516.   ExecuteTreeNodesEditor(Designer, (GetComponent(0) as TfcCustomTreeCombo).TreeView);
  517. end;
  518. function TfcTreeComboItemsProperty.GetAttributes: TPropertyAttributes;
  519. begin
  520.    Result:= [paDialog, paReadOnly];
  521. end;
  522. function TfcTreeComboItemsProperty.GetValue: string;
  523. begin
  524.    result:= '(TfcTreeNodes)'
  525. end;
  526. // TfcStatusBarEditor - ComponentEditor for TfcStatusBar
  527. procedure TfcStatusBarEditor.Edit;
  528. begin
  529.   fcExecuteCollectionEditor(Component.Name + '.Panels', Designer as TFormDesigner, 'Panels',
  530.     TfcCustomStatusBar(Component).Panels, nil);
  531. end;
  532. // TfcStatusBarPanelsEditor - PropertyEditor for the
  533. //   Panels property of TfcStatusBar.
  534. procedure TfcStatusBarPanelsEditor.Edit;
  535. begin
  536.   fcExecuteCollectionEditor(TComponent(GetComponent(0)).Name + '.Panels', Designer as TFormDesigner, 'Panels',
  537.     TfcCustomStatusBar(GetComponent(0)).Panels, nil);
  538. end;
  539. function TfcStatusBarPanelsEditor.GetValue: string;
  540. begin
  541.   result := '(TfcStatusPanels)';
  542. end;
  543. function TfcStatusBarPanelsEditor.GetAttributes: TPropertyAttributes;
  544. begin
  545.   result := [paDialog, paReadOnly];
  546. end;
  547. procedure TfcImagerEditor.Edit;
  548. begin
  549.   fcExecutePictureEditor((Component as TfcCustomImager).Picture.Graphic, (Component as TfcCustomImager).Picture);
  550.   Designer.Modified;
  551. end;
  552. function TfcOutlookPanelEditor.GetVerb(Index: Integer): string;
  553. begin
  554.   case Index of
  555.     FC_OTLKPNL_ADDOUTLOOKLIST: result := '&Create OutlookList';
  556.     {$ifdef fcdelphi4up} { Delphi 3 does not support paste properly }
  557.     FC_OTLKPNL_PASTE: result := '&Paste';
  558.     {$endif}
  559.   else
  560.     result := inherited GetVerb(Index);
  561.   end;
  562. end;
  563. function TfcOutlookPanelEditor.GetVerbCount: Integer;
  564. begin
  565.   {$ifdef fcdelphi4up} { Delphi 3 does not support paste properly }
  566.   result := 2;
  567.   {$else}
  568.   result := 1;
  569.   {$endif}
  570.   inc(result, inherited GetVerbCount);
  571. end;
  572. procedure TfcOutlookPanelEditor.ExecuteVerb(Index: Integer);
  573. begin
  574.   case Index of
  575.     FC_OTLKPNL_ADDOUTLOOKLIST: with (Component as TfcOutlookPanel) do
  576.       TfcOutlookPage(OutlookPage).CreateOutlookList;
  577.     {$ifdef fcdelphi4up} { Delphi 3 does not support paste properly }
  578.     FC_OTLKPNL_PASTE: begin
  579.           if not (Component is TfcOutlookPanel) then exit;
  580. //          try
  581.             if (Designer<>nil) then Designer.SelectComponent(Component);
  582. //            for i:= 1 to 10000 do Application.ProcessMessages;
  583. //            (TfcOutlookPanel(Component).parent as TfcOutlookBar).InPaste:= True;
  584.             keybd_event(VK_CONTROL, 0, 0, 0); { Key down }
  585.             keybd_event(ORD('V'), 0, 0, 0); { Key down }
  586.             keybd_event(ORD('V'), 0, KEYEVENTF_KEYUP, 0);
  587.             keybd_event(VK_CONTROL, 0, KEYEVENTF_KEYUP, 0);
  588. //            for i:= 1 to 100000 do Application.ProcessMessages;
  589. //          except
  590. //            if (Designer<>nil) then Designer.SelectComponent(TWinControl(Component).parent);
  591. //          end;
  592. //            (TfcOutlookPanel(Component).parent as TfcOutlookBar).InPaste:= False;
  593. //
  594. //          except
  595. //            NoSel := TComponentList.Create;
  596. //            Designer.SetSelections(NoSel);
  597. //            NoSel.Free;
  598. //          end;
  599. //          PostMessage(TfcOutlookPanel(Component).Handle, WM_FC_DOCTRLV, 0, 0);
  600. //          TfcOutlookPanel(Component).DesignPasteFromClipboard;
  601.      end;
  602.      {$endif}
  603.     else inherited;
  604.   end;
  605. end;
  606. procedure TfcImageFormEditor.Edit;
  607. var ABitmap: TBitmap;
  608. begin
  609.   ABitmap := TBitmap.Create;
  610.   if fcExecutePictureEditor((Component as TfcCustomImageForm).Picture.Graphic, ABitmap) then
  611.     (Component as TfcCustomImageForm).Picture.Graphic := ABitmap;
  612.   ABitmap.Free;
  613.   Designer.Modified;
  614. end;
  615. procedure TfcBitmapEditor.Edit;
  616. var ABitmap: TfcBitmap;
  617.     OrigBitmap: TfcBitmap;
  618.     i: Integer;
  619. begin
  620.   ABitmap := TfcBitmap.Create;
  621.   { 12/7/99 - Remember original RespectPalette settings }
  622.   OrigBitmap:= TfcBitmap(GetOrdValue);
  623.   if OrigBitmap<>nil then
  624.      ABitmap.RespectPalette:= OrigBitmap.RespectPalette;
  625.   if fcExecutePictureEditor(OrigBitmap, ABitmap) then begin
  626.     for i := 0 to PropCount - 1 do begin
  627.        OrigBitmap.assign(ABitmap);   { 12/7/99 - Use assign instead of SetOrdValue }
  628. //       SetOrdValue(Integer(ABitmap));
  629.     end
  630.   end;
  631.   ABitmap.Free;
  632.   Designer.Modified;
  633. end;
  634. function TfcBitmapEditor.GetAttributes: TPropertyAttributes;
  635. begin
  636.   result := [paDialog, paMultiSelect];
  637. end;
  638. function TfcBitmapEditor.GetValue: string;
  639. begin
  640.   if TfcBitmap(GetOrdValueAt(0)).Empty then result := '(None)' else result := '(TfcBitmap)';
  641. end;
  642. function TfcButtonGroupSelectedEditor.GetAttributes: TPropertyAttributes;
  643. begin
  644.   result := [paValueList];
  645. end;
  646. function TfcButtonGroupSelectedEditor.GetValue: string;
  647. begin
  648.   result := '(No Item Selected)';
  649.   with GetComponent(0) as TfcCustomButtonGroup do
  650.     if Selected <> nil then result := Selected.Button.Name;
  651. end;
  652. procedure TfcButtonGroupSelectedEditor.SetValue(const Value: string);
  653. begin
  654.   with GetComponent(0) as TfcCustomButtonGroup do
  655.     Selected := ButtonItems.FindButton(Buttons[Value]);
  656. end;
  657. procedure TfcButtonGroupSelectedEditor.GetValues(Proc: TGetStrProc);
  658. var i: Integer;
  659. begin
  660.   with GetComponent(0) as TfcCustomButtonGroup do
  661.     for i := 0 to ButtonItems.Count - 1 do
  662.       Proc(ButtonItems[i].Button.Name);
  663. end;
  664. procedure TfcCustomOutlookListEditor.Edit;
  665. begin
  666.   fcExecuteCollectionEditor(Component.Name + '.Items', TFormDesigner(Designer), 'Items', TfcCustomOutlookList(Component).Items, nil);
  667. end;
  668. procedure TfcTreeViewItemsProperty.Edit;
  669. begin
  670.   ExecuteTreeNodesEditor(Designer, GetComponent(0) as TfcTreeView);
  671. end;
  672. function TfcTreeViewItemsProperty.GetAttributes: TPropertyAttributes;
  673. begin
  674.    Result:= [paDialog];
  675. end;
  676. function TfcTreeViewItemsProperty.GetValue: string;
  677. begin
  678.    result:= '<TfcTreeNodes>'
  679. end;
  680. procedure TfcTreeViewEditor.Edit;
  681. begin
  682.   ExecuteTreeNodesEditor(Designer, TfcTreeView(Component));
  683. end;
  684. function TfcColorComboSelectedColorEditor.GetAttributes: TPropertyAttributes;
  685. begin
  686.   result := [paValueList, paDialog];
  687. end;
  688. function TfcColorComboSelectedColorEditor.GetValue: string;
  689. begin
  690.   with GetComponent(0) as TfcCustomColorCombo do
  691.     result := SelectedColorString;
  692. end;
  693. procedure TfcColorComboSelectedColorEditor.Edit;
  694. begin
  695.   with GetComponent(0) as TfcCustomColorCombo do
  696.     SelectedColor := fcExecuteColorDialog(SelectedColor);
  697. end;
  698. procedure TfcColorComboSelectedColorEditor.SetValue(const Value: string);
  699. var i: Integer;
  700. begin
  701.   for i := 0 to PropCount - 1 do
  702.     with GetComponent(i) as TfcCustomColorCombo do
  703.       SelectedColorString := Value;
  704. end;
  705. procedure TfcColorComboSelectedColorEditor.GetValues(Proc: TGetStrProc);
  706. var i: Integer;
  707. begin
  708.   with GetComponent(0) as TfcCustomColorCombo do
  709.   begin
  710.     TListbox(ListBox).Sorted := True;
  711.     ListBox.InitColorList;
  712.     for i := 0 to ListBox.AllColors.Count - 1 do
  713.       Proc(ColorString(ListBox.AllColors.Names[i]));
  714.   end;
  715. end;
  716. { Support null color }
  717. {$ifdef fcDelphi5Up}
  718. procedure TfcImageBtnTrancolorEditor.ListDrawValue(const Value: string; ACanvas: TCanvas;
  719.   const ARect: TRect; ASelected: Boolean);
  720. var tempRect: TRect;
  721.   function ColorToBorderColor(AColor: TColor): TColor;
  722.   type
  723.     TColorQuad = record
  724.       Red,
  725.       Green,
  726.       Blue,
  727.       Alpha: Byte;
  728.     end;
  729.   begin
  730.     if (TColorQuad(AColor).Red > 192) or
  731.        (TColorQuad(AColor).Green > 192) or
  732.        (TColorQuad(AColor).Blue > 192) then
  733.       Result := clBlack
  734.     else if ASelected then
  735.       Result := clWhite
  736.     else
  737.       Result := AColor;
  738.   end;
  739. var
  740.   vRight: Integer;
  741.   vOldPenColor, vOldBrushColor: TColor;
  742. begin
  743.   vRight := (ARect.Bottom - ARect.Top) {* 2} + ARect.Left;
  744.   with ACanvas do
  745.   try
  746.     // save off things
  747.     vOldPenColor := Pen.Color;
  748.     vOldBrushColor := Brush.Color;
  749.     // frame things
  750.     Pen.Color := Brush.Color;
  751.     Rectangle(ARect.Left, ARect.Top, vRight, ARect.Bottom);
  752.     // set things up and do the work
  753.     if Value = 'clNullColor' then begin
  754.        Brush.Color := clWhite;
  755.     end
  756.     else
  757.        Brush.Color := StringToColor(Value);
  758.     Pen.Color := ColorToBorderColor(ColorToRGB(Brush.Color));
  759.     Rectangle(ARect.Left + 1, ARect.Top + 1, vRight - 1, ARect.Bottom - 1);
  760.     // restore the things we twiddled with
  761.     Brush.Color := vOldBrushColor;
  762.     Pen.Color := vOldPenColor;
  763.   finally
  764.     TempRect:= Rect(vRight, ARect.Top, ARect.Right, ARect.Bottom);
  765.     ACanvas.TextRect(TempRect, TempRect.Left + 1,
  766.        TempRect.Top + 1, Value);
  767.   end;
  768. end;
  769. {$endif}
  770. {$ifdef fcDelphi6Up}
  771. procedure TfcImageBtnTranColorEditor.ListMeasureWidth(const Value: string;
  772.   ACanvas: TCanvas; var AWidth: Integer);
  773. begin
  774.    inherited ListMeasureWidth(Value, ACanvas, AWidth);
  775. end;
  776. procedure TfcImageBtnTranColorEditor.ListMeasureHeight(const Value: string;
  777.   ACanvas: TCanvas; var AHeight: Integer);
  778. begin
  779.   // No implemenation necessary
  780. end;
  781. {$endif}
  782. function TfcImageBtnTranColorEditor.GetValue: string;
  783. begin
  784.   if GetOrdValue = clNullColor then result := 'clNullColor' else result := inherited GetValue;
  785. end;
  786. procedure TfcImageBtnTranColorEditor.SetValue(const Value: string);
  787. begin
  788.   if Value = 'clNullColor' then SetOrdValue(clNullColor)
  789.   else inherited;
  790. end;
  791. procedure TfcImageBtnTranColorEditor.GetValues(Proc: TGetStrProc);
  792. begin
  793.   Proc('clNullColor');
  794.   inherited;
  795. end;
  796. function TfcComponentProperty.GetAttributes: TPropertyAttributes;
  797. begin
  798.   Result := [paMultiSelect, paValueList, paSortList, paRevertable];
  799. end;
  800. function TfcComponentProperty.ValidComponent(AComponent: TComponent): Boolean;
  801. begin
  802.   result := True;
  803. end;
  804. procedure TfcComponentProperty.GetBaseValues(const s: string);
  805. begin
  806.   FStrings.Add(s);
  807. end;
  808. procedure TfcComponentProperty.SetValue(const Value: string);
  809. var CurComponent: TComponent;
  810. begin
  811.   if Value = '' then inherited
  812.   else begin
  813.    {$ifdef fcDelphi6Up}
  814.     CurComponent := Designer.Root.FindComponent(Value);
  815.    {$else}
  816.     CurComponent := Designer.Form.FindComponent(Value);
  817.    {$endif}
  818.     if ValidComponent(CurComponent) then inherited;
  819.   end;
  820. end;
  821. procedure TfcComponentProperty.GetValues(Proc: TGetStrProc);
  822. var i: Integer;
  823. begin
  824.   FStrings := TStringList.Create;
  825.   FStrings.Clear;
  826.   inherited GetValues(GetBaseValues);
  827.   for i := 0 to FStrings.Count - 1 do
  828.    {$ifdef fcDelphi6Up}
  829.     if ValidComponent(Designer.Root.FindComponent(FStrings[i])) then
  830.    {$else}
  831.     if ValidComponent(Designer.Form.FindComponent(FStrings[i])) then
  832.     {$endif}
  833.       Proc(FStrings[i]);
  834.   FStrings.Free;
  835. end;
  836. function TfcImageBtnExtImageEditor.ValidComponent(AComponent: TComponent): Boolean;
  837. var i: Integer;
  838. begin
  839.   result := False;
  840.   for i := 0 to PropCount - 1 do if (AComponent = GetComponent(i)) then Exit;
  841.   result := ((AComponent is TfcCustomImager) or (AComponent is TfcImageBtn));
  842. end;
  843. function TfcOutlookBarActivePageEditor.GetAttributes: TPropertyAttributes;
  844. begin
  845.   result := inherited GetAttributes - [paMultiSelect];
  846. end;
  847. function TfcOutlookBarActivePageEditor.ValidComponent(AComponent: TComponent): Boolean;
  848. begin
  849.   result := (AComponent is TfcCustomBitBtn) and
  850.             ((GetComponent(0) as TfcCustomOutlookBar).OutlookItems.FindButton(AComponent as TfcCustomBitBtn) <> nil)
  851. end;
  852. function TfcCollectionEditor.GetAttributes: TPropertyAttributes;
  853. begin
  854.   result := [paDialog];
  855. end;
  856. function TfcCollectionEditor.GetValue: string;
  857. begin
  858.   result := '(' + GetPropInfo.Name + ')';
  859. end;
  860. procedure TfcCollectionEditor.Edit;
  861. begin
  862.   fcExecuteCollectionEditor(TComponent(GetComponent(0)).Name + GetPropInfo.PropType^.Name, Designer,
  863.     GetPropInfo.PropType^.Name, TfcCollection(GetOrdValue), nil);
  864. end;
  865. function TfcComponentEditor.GetVerbCount: Integer;
  866. begin
  867.   result := 1;
  868. end;
  869. function TfcComponentEditor.GetVerb(Index: Integer): string;
  870. begin
  871.   if Index = GetVerbCount - 1 then result := '&About 1stClass';
  872. end;
  873. procedure TfcComponentEditor.ShowAboutBox;
  874. var fcReg: TRegIniFile;
  875.     ARegNumber: string;
  876. begin
  877.   fcreg := TRegIniFile.create('');
  878.   ARegNumber := fcreg.ReadString('SoftwareWoll2Woll1stClass', 'Reg. No.', '');
  879.   fcreg.Free;
  880.   with TfcAbout1stForm.create(Application) do begin
  881.      AVersion:= fcVersion1stClass;
  882.      ARegistration:= 'Reg. No.: ' + ARegNumber;
  883.      ShowModal;
  884.      Free;
  885.   end
  886. end;
  887. procedure TfcComponentEditor.ExecuteVerb(Index: Integer);
  888. begin
  889.   if Index = GetVerbCount - 1 then ShowAboutBox;
  890. end;
  891. procedure TfcHeaderEditor.Edit;
  892. begin
  893.   ShowCollectionEditor(Designer, Component,
  894.     TfcTreeHeader(Component).Sections, 'Sections');
  895. end;
  896. {
  897. procedure TfcHeaderEditor.ExecuteVerb(Index: Integer);
  898. begin
  899.   ShowCollectionEditor(Designer, Component,
  900.     TfcTreeHeader(Component).Sections, 'Sections');
  901. end;
  902. function TfcHeaderEditor.GetVerb(Index: Integer): string;
  903. begin
  904.   Result := 'Sections Editor';
  905. end;
  906. function TfcHeaderEditor.GetVerbCount: Integer;
  907. begin
  908.   Result := 1;
  909. end;
  910. }
  911. procedure TfcControllerProperty.fcGetStrProc(const s: string);
  912. var Component: TComponent;
  913. begin
  914.   component:= Designer.GetComponent(s);
  915.   if fcIsClass(Component.ClassType, 'TwwController') then
  916.      MyProc(s);
  917. end;
  918. procedure TfcControllerProperty.GetValues(Proc : TGetStrProc);
  919. //var
  920. //  I: Integer;
  921. //  ownerComponent, Component: TComponent;
  922. begin
  923.   MyProc:= Proc;
  924.   Designer.GetComponentNames(GetTypeData(TypeInfo(TComponent)), fcGetStrProc);
  925. end;
  926. end.