⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 d_lmdpi.pas

📁 delphi 运行期间窗体设计
💻 PAS
字号:
unit d_lmdpi;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls, Grids, LMDDsgPropPage, LMDDsgPropInsp,
  TypInfo, Menus {$IFDEF VER130} ,LmdDsgD5Adds {$ENDIF}, d_lmdpi1, ComCtrls;

type
  TfrmLMDPIDemo = class(TForm)
    LMDPropertyInspector1: TLMDPropertyInspector;
    Label3: TLabel;
    pnlContainer: TPanel;
    Panel1: TPanel;
    CheckBox1: TCheckBox;
    Memo1: TMemo;
    Label2: TLabel;
    Label1: TLabel;
    Memo2: TMemo;
    Label5: TLabel;
    PageControl1: TPageControl;
    TabSheet1: TTabSheet;
    TabSheet2: TTabSheet;
    TabSheet3: TTabSheet;
    Shape1: TShape;
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    Button4: TButton;
    Button5: TButton;
    Button7: TButton;
    Button10: TButton;
    Label4: TLabel;
    CheckBox2: TCheckBox;
    Memo3: TMemo;
    CheckBox3: TCheckBox;
    RadioButton1: TRadioButton;
    RadioButton2: TRadioButton;
    RadioButton3: TRadioButton;
    RadioButton4: TRadioButton;
    TabSheet4: TTabSheet;
    Button6: TButton;
    Button8: TButton;
    CheckBox4: TCheckBox;
    CheckBox5: TCheckBox;
    CheckBox6: TCheckBox;
    Button9: TButton;
    Button11: TButton;
    CheckBox7: TCheckBox;
    PopupMenu1: TPopupMenu;
    Label6: TLabel;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
    procedure Button5Click(Sender: TObject);
    procedure LMDPropertyInspector1FilterProp(Sender: TObject;
      AInstance: TPersistent; APropInfo: PPropInfo;
      AIsSubProp: Boolean; var AIncludeProp: Boolean);
    procedure Button7Click(Sender: TObject);
    procedure LMDPropertyInspector1GetCaptionColor(Sender: TObject;
      AItem: TLMDPropertyInspectorItem; var AColor: TColor);
    procedure Button10Click(Sender: TObject);
    procedure LMDPropertyInspector1Click(Sender: TObject);
    procedure LMDPropertyInspector1Change(Sender: TObject);
    procedure CheckBox2Click(Sender: TObject);
    procedure CheckBox3Click(Sender: TObject);
    procedure LMDPropertyInspector1GetComponents(Sender: TObject;
      AClass: TComponentClass; AResult: TList);
    procedure LMDPropertyInspector1GetComponentName(Sender: TObject;
      AComponent: TComponent; var AName: String);
    procedure LMDPropertyInspector1GetComponent(Sender: TObject;
      const AComponentName: String; var AComponent: TComponent);
    procedure RadioButton1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure Button6Click(Sender: TObject);
    procedure Button8Click(Sender: TObject);
    procedure CheckBox5Click(Sender: TObject);
    procedure CheckBox6Click(Sender: TObject);
    procedure CheckBox4Click(Sender: TObject);
    procedure Button9Click(Sender: TObject);
    procedure Button11Click(Sender: TObject);
    procedure CheckBox7Click(Sender: TObject);
    procedure PopupMenu1Popup(Sender: TObject);
  private
    { Private declarations }
    FEditorClass: TLMDPropEditorClass;
    procedure UpdateObjectsMemo;
    procedure MenuItemClick(Sender: TObject);
  public
    { Public declarations }
  end;

var
  frmLMDPIDemo: TfrmLMDPIDemo;
                      
implementation

{$R *.dfm}

procedure TfrmLMDPIDemo.Button1Click(Sender: TObject);
begin
  LMDPropertyInspector1.Objects.Clear;
  LMDPropertyInspector1.Objects.Add(Panel1);
  UpdateObjectsMemo;
end;

procedure TfrmLMDPIDemo.Button2Click(Sender: TObject);
begin
  LMDPropertyInspector1.Objects.Clear;
  LMDPropertyInspector1.Objects.Add(CheckBox1);
  UpdateObjectsMemo;
end;

procedure TfrmLMDPIDemo.Button3Click(Sender: TObject);
begin
  LMDPropertyInspector1.Objects.Clear;
  LMDPropertyInspector1.Objects.Add(Memo1);
  UpdateObjectsMemo;
end;

procedure TfrmLMDPIDemo.UpdateObjectsMemo;
var
  LI: Integer;
begin
  Memo2.Lines.Clear;
  for LI := 0 to LMDPropertyInspector1.Objects.Count - 1 do
    Memo2.Lines.Add(LMDPropertyInspector1.Objects[LI].GetNamePath);
end;

procedure TfrmLMDPIDemo.Button4Click(Sender: TObject);
begin
  LMDPropertyInspector1.Objects.Clear;
  LMDPropertyInspector1.Objects.Add(Memo1.Font);
  UpdateObjectsMemo;
end;

procedure TfrmLMDPIDemo.Button5Click(Sender: TObject);
begin
  LMDPropertyInspector1.Objects.Clear;
  LMDPropertyInspector1.Objects.Add(Shape1.Brush);
  UpdateObjectsMemo;
end;

procedure TfrmLMDPIDemo.LMDPropertyInspector1FilterProp(Sender: TObject;
  AInstance: TPersistent; APropInfo: PPropInfo; AIsSubProp: Boolean;
  var AIncludeProp: Boolean);
begin
  // Example filter properties
  if CheckBox2.Checked and (Memo3.Lines.IndexOf(APropInfo^.Name) <> -1) then
    AIncludeProp := False;
end;

procedure TfrmLMDPIDemo.Button7Click(Sender: TObject);
begin
  LMDPropertyInspector1.Objects.Clear;
  LMDPropertyInspector1.Objects.Add(Memo1);
  LMDPropertyInspector1.Objects.Add(Panel1);
  LMDPropertyInspector1.Objects.Add(CheckBox1);
  LMDPropertyInspector1.Objects.Add(Label2);
  UpdateObjectsMemo;
end;

procedure TfrmLMDPIDemo.LMDPropertyInspector1GetCaptionColor(
  Sender: TObject; AItem: TLMDPropertyInspectorItem; var AColor: TColor);
begin
  if CheckBox3.Checked and (Memo3.Lines.IndexOf(AItem.PropName) <> -1) then
    AColor := clRed;
end;

procedure TfrmLMDPIDemo.Button10Click(Sender: TObject);
begin
  LMDPropertyInspector1.Objects.Clear;
  LMDPropertyInspector1.Objects.Add(Label2);
  UpdateObjectsMemo;
end;

procedure TfrmLMDPIDemo.LMDPropertyInspector1Click(Sender: TObject);
begin
  if LMDPropertyInspector1.ActiveItem <> nil then
    Label3.Caption := 'Active property: ' +
      LMDPropertyInspector1.ActiveItem.PropName
  else if LMDPropertyInspector1.ActiveCategory <> nil then
    Label3.Caption := 'Active category: ' +
      LMDPropertyInspector1.ActiveCategory.Name
  else
    Label3.Caption := 'No active item or category';
end;

procedure TfrmLMDPIDemo.LMDPropertyInspector1Change(Sender: TObject);
begin
  LMDPropertyInspector1Click(nil);
end;

procedure TfrmLMDPIDemo.CheckBox2Click(Sender: TObject);
begin
  LMDPropertyInspector1.UpdateItems;
end;

procedure TfrmLMDPIDemo.CheckBox3Click(Sender: TObject);
begin
  LMDPropertyInspector1.UpdateItems;
end;

procedure TfrmLMDPIDemo.LMDPropertyInspector1GetComponents(Sender: TObject;
  AClass: TComponentClass; AResult: TList);
var
  LI: Integer;
begin
  // Add to AResult list only controls you want to appear
  // in the drop-down list of the component reference property editor
  // (for examle in PopupMenu or FocusControl property). This event is used
  // only for generating drop-down list, but does not restrict user to
  // type any other component name directly in the property inspector.
  // Real restriction must be done in the OnGetComponent event handler.
  // In this examle only proper children of pnlContainer will be added.
  //
  // See also: OnGetComponentName, OnGetComponent
  //
  // This events can be used to flexible control component reference
  // property editors behavior.
  
  for LI := 0 to pnlContainer.ControlCount - 1 do
    { Check class compability }
    if (pnlContainer.Controls[LI].ClassType = AClass) or
      (pnlContainer.Controls[LI].InheritsFrom(AClass)) then
      AResult.Add(pnlContainer.Controls[LI]);
end;

procedure TfrmLMDPIDemo.LMDPropertyInspector1GetComponentName(
  Sender: TObject; AComponent: TComponent; var AName: String);
begin
  // Provide string that will be used as the name of the
  // component in the values column and drop-down list of the
  // component reference property editors. You can return string, that
  // differs from TComponent.Name, but you must be available to find
  // component reference (pointer to component) using this string in the
  // OnGetComponent event handler.
  //
  // See also: OnGetGetComponents, OnGetComponent
  //
  // This events can be used to flexible control component reference
  // property editors behavior.

  AName := AComponent.Name;
end;

procedure TfrmLMDPIDemo.LMDPropertyInspector1GetComponent(Sender: TObject;
  const AComponentName: String; var AComponent: TComponent);
begin
  // Search for component using string provided in the OnGetComponentName
  // event hadler. In this event you can restrict number of components used by
  // property inspector as component reference targets.
  // In this examle only children of pnlContainer can be used (by chousing from
  // drop-down list or typing directly) as component reference targets.
  //
  // See also: OnGetGetComponents, OnGetComponentName
  //
  // This events can be used to flexible control component reference
  // property editors behavior.

  AComponent := pnlContainer.FindChildControl(AComponentName);
end;

procedure TfrmLMDPIDemo.RadioButton1Click(Sender: TObject);
begin
  if FEditorClass <> nil then
    LMDPropertyInspector1.UnregisterPropEditor(TypeInfo(TBevelCut),
      nil, 'BevelInner', FEditorClass);
  if RadioButton2.Checked then
  begin
    FEditorClass := TBevelCutProperty;
    LMDPropertyInspector1.RegisterPropEditor(TypeInfo(TBevelCut),
      nil, 'BevelInner', FEditorClass);
  end
  else if RadioButton3.Checked then
  begin
    FEditorClass := TBevelCutDlgProperty;
    LMDPropertyInspector1.RegisterPropEditor(TypeInfo(TBevelCut),
      nil, 'BevelInner', FEditorClass);
  end
  else if RadioButton4.Checked then
  begin
    FEditorClass := TBevelCutDrawProperty;
    LMDPropertyInspector1.RegisterPropEditor(TypeInfo(TBevelCut),
      nil, 'BevelInner', FEditorClass);
  end;
end;

procedure TfrmLMDPIDemo.FormCreate(Sender: TObject);
begin
  // Register standard properties
  RegisterStandardCategories(LMDPropertyInspector1);
end;

procedure TfrmLMDPIDemo.Button6Click(Sender: TObject);
begin
  LMDPropertyInspector1.Color := clBtnFace;
  LMDPropertyInspector1.SelectionStyle := ssClassic;
  LMDPropertyInspector1.GridVisible := True;
  LMDPropertyInspector1.GutterVisible := False;
  LMDPropertyInspector1.CursorVisible := False;
  LMDPropertyInspector1.CategoryBackgroundColor := clBtnFace;
  LMDPropertyInspector1.CategoryFont.Color := clPurple;
  LMDPropertyInspector1.FlatSelectionBackgroundColor := clHighlight;
  LMDPropertyInspector1.FlatSelectionColor := clHighlightText;

  CheckBox5.Checked := True;
  CheckBox6.Checked := False;
  CheckBox4.Checked := False;
  CheckBox7.Checked := False;
end;

procedure TfrmLMDPIDemo.Button8Click(Sender: TObject);
begin
  LMDPropertyInspector1.Color := clWindow;
  LMDPropertyInspector1.SelectionStyle := ssFlat;
  LMDPropertyInspector1.GridVisible := False;
  LMDPropertyInspector1.GutterVisible := True;
  LMDPropertyInspector1.CursorVisible := True;
  LMDPropertyInspector1.CategoryBackgroundColor := $00E8E8E8;
  LMDPropertyInspector1.CategoryFont.Color := clMaroon;
  LMDPropertyInspector1.FlatSelectionBackgroundColor := $00E8E8E8;
  LMDPropertyInspector1.FlatSelectionColor := clWindowText;

  CheckBox5.Checked := False;
  CheckBox6.Checked := True;
  CheckBox4.Checked := True;
  CheckBox7.Checked := True;
end;

procedure TfrmLMDPIDemo.CheckBox5Click(Sender: TObject);
begin
  LMDPropertyInspector1.GridVisible := CheckBox5.Checked;
end;

procedure TfrmLMDPIDemo.CheckBox6Click(Sender: TObject);
begin
  LMDPropertyInspector1.CursorVisible := CheckBox6.Checked;
end;

procedure TfrmLMDPIDemo.CheckBox4Click(Sender: TObject);
begin
  LMDPropertyInspector1.GutterVisible := CheckBox4.Checked;
end;

procedure TfrmLMDPIDemo.Button9Click(Sender: TObject);
begin
  LMDPropertyInspector1.ArrangeKind := akByCategory;
end;

procedure TfrmLMDPIDemo.Button11Click(Sender: TObject);
begin
  LMDPropertyInspector1.ArrangeKind := akByName;
end;

procedure TfrmLMDPIDemo.CheckBox7Click(Sender: TObject);
begin
  if CheckBox7.Checked then
    LMDPropertyInspector1.SelectionStyle := ssFlat
  else
    LMDPropertyInspector1.SelectionStyle := ssClassic;
end;

procedure TfrmLMDPIDemo.PopupMenu1Popup(Sender: TObject);
var
  LI: Integer;
  LItem: TMenuItem;
begin
  PopupMenu1.Items.Clear;
  for LI := 0 to LMDPropertyInspector1.ObjectsCategories.Count - 1 do
  begin
    LItem := TMenuItem.Create(Self);
    LItem.Caption := LMDPropertyInspector1.ObjectsCategories[LI];
    LItem.Checked := not LMDPropertyInspector1.IsRegisteredCategoryHidden(
      LItem.Caption);
    LItem.OnClick := MenuItemClick;
    PopupMenu1.Items.Add(LItem);
  end;
end;

procedure TfrmLMDPIDemo.MenuItemClick(Sender: TObject);
begin
  if not TMenuItem(Sender).Checked then
    LMDPropertyInspector1.ShowCategory(TMenuItem(Sender).Caption)
  else
    LMDPropertyInspector1.HideCategory(TMenuItem(Sender).Caption);
end;

end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -