mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-05-05 11:12:40 +02:00
121 lines
3.0 KiB
ObjectPascal
121 lines
3.0 KiB
ObjectPascal
unit MainUnit;
|
|
|
|
{$mode objfpc}{$H+}
|
|
|
|
interface
|
|
|
|
uses
|
|
Classes, SysUtils, TypInfo, LResources, Forms, Controls, Graphics, Dialogs,
|
|
ObjectInspector, PropEdits, StdCtrls, Buttons;
|
|
|
|
type
|
|
{ TMyComponent }
|
|
|
|
TMyComponent = class(TComponent)
|
|
private
|
|
FAnInteger: integer;
|
|
procedure SetAnInteger(const AValue: integer);
|
|
public
|
|
published
|
|
property AnInteger: integer read FAnInteger write SetAnInteger;
|
|
end;
|
|
|
|
TForm1 = class(TForm)
|
|
PropGridGroupbox: TGROUPBOX;
|
|
SetCompAsOIRootButton: TBUTTON;
|
|
SetOIRootFormButton: TBUTTON;
|
|
OIGroupbox: TGROUPBOX;
|
|
PropertyGrid: TOIPropertyGrid;
|
|
procedure Form1CREATE(Sender: TObject);
|
|
procedure Form1DESTROY(Sender: TObject);
|
|
procedure SetCompAsOIRootButtonCLICK(Sender: TObject);
|
|
procedure SetOIRootFormButtonCLICK(Sender: TObject);
|
|
private
|
|
procedure SetObjectInspectorRoot(AComponent: TComponent);
|
|
public
|
|
TheObjectInspector: TObjectInspectorDlg;
|
|
ThePropertyEditorHook: TPropertyEditorHook;
|
|
ARootComponent: TMyComponent;
|
|
end;
|
|
|
|
var
|
|
Form1: TForm1;
|
|
|
|
implementation
|
|
|
|
{ TForm1 }
|
|
|
|
procedure TForm1.Form1CREATE(Sender: TObject);
|
|
begin
|
|
// create the PropertyEditorHook (the interface to the properties)
|
|
ThePropertyEditorHook:=TPropertyEditorHook.Create;
|
|
|
|
// create the ObjectInspector
|
|
TheObjectInspector:=TObjectInspectorDlg.Create(Application);
|
|
TheObjectInspector.PropertyEditorHook:=ThePropertyEditorHook;
|
|
TheObjectInspector.SetBounds(10,10,240,500);
|
|
|
|
// create a second Root component for demonstration
|
|
ARootComponent:=TMyComponent.Create(nil);
|
|
|
|
// create the PropertyGrid
|
|
PropertyGrid:=TOIPropertyGrid.CreateWithParams(Self,ThePropertyEditorHook
|
|
,[tkUnknown, tkInteger, tkChar, tkEnumeration, tkFloat, tkSet{, tkMethod}
|
|
, tkSString, tkLString, tkAString, tkWString, tkVariant
|
|
{, tkArray, tkRecord, tkInterface}, tkClass, tkObject, tkWChar, tkBool
|
|
, tkInt64, tkQWord],
|
|
25);
|
|
with PropertyGrid do begin
|
|
Name:='PropertyGrid';
|
|
Parent:=PropGridGroupbox;
|
|
Align:=alClient;
|
|
end;
|
|
|
|
// select the Form1 in the ObjectInspector
|
|
SetObjectInspectorRoot(Self);
|
|
end;
|
|
|
|
procedure TForm1.Form1DESTROY(Sender: TObject);
|
|
begin
|
|
// TheObjectInspector is owned by the Application and therefore destroyed
|
|
// automatically
|
|
ThePropertyEditorHook.Free;
|
|
ARootComponent.Free;
|
|
end;
|
|
|
|
procedure TForm1.SetCompAsOIRootButtonCLICK(Sender: TObject);
|
|
begin
|
|
SetObjectInspectorRoot(ARootComponent);
|
|
end;
|
|
|
|
procedure TForm1.SetOIRootFormButtonCLICK(Sender: TObject);
|
|
begin
|
|
SetObjectInspectorRoot(Self);
|
|
end;
|
|
|
|
procedure TForm1.SetObjectInspectorRoot(AComponent: TComponent);
|
|
var
|
|
Selection: TPersistentSelectionList;
|
|
begin
|
|
ThePropertyEditorHook.LookupRoot:=AComponent;
|
|
Selection:=TPersistentSelectionList.Create;
|
|
Selection.Add(AComponent);
|
|
TheObjectInspector.Selection:=Selection;
|
|
PropertyGrid.Selection:=Selection;
|
|
Selection.Free;
|
|
end;
|
|
|
|
{ TMyComponent }
|
|
|
|
procedure TMyComponent.SetAnInteger(const AValue: integer);
|
|
begin
|
|
if FAnInteger=AValue then exit;
|
|
FAnInteger:=AValue;
|
|
end;
|
|
|
|
initialization
|
|
{$I mainunit.lrs}
|
|
|
|
end.
|
|
|