?? tntdesigneditors_design.pas
字號:
{*****************************************************************************}
{ }
{ Tnt Delphi Unicode Controls }
{ http://www.tntware.com/delphicontrols/unicode/ }
{ Version: 2.3.0 }
{ }
{ Copyright (c) 2002-2007, Troy Wolbrink (troy.wolbrink@tntware.com) }
{ }
{*****************************************************************************}
unit TntDesignEditors_Design;
{$INCLUDE ..\Source\TntCompilers.inc}
interface
uses
Classes, Forms, TypInfo, DesignIntf, DesignEditors;
type
ITntDesigner = IDesigner;
TTntDesignerSelections = class(TInterfacedObject, IDesignerSelections)
private
FList: TList;
{$IFDEF COMPILER_9_UP}
function GetDesignObject(Index: Integer): IDesignObject;
{$ENDIF}
protected
function Add(const Item: TPersistent): Integer;
function Equals(const List: IDesignerSelections): Boolean;
function Get(Index: Integer): TPersistent;
function GetCount: Integer;
property Count: Integer read GetCount;
property Items[Index: Integer]: TPersistent read Get; default;
public
constructor Create; virtual;
destructor Destroy; override;
procedure ReplaceSelection(const OldInst, NewInst: TPersistent);
end;
function GetObjectInspectorForm: TCustomForm;
procedure EditPropertyWithDialog(Component: TPersistent; const PropName: AnsiString; const Designer: ITntDesigner);
implementation
uses
SysUtils;
{ TTntDesignerSelections }
function TTntDesignerSelections.Add(const Item: TPersistent): Integer;
begin
Result := FList.Add(Item);
end;
constructor TTntDesignerSelections.Create;
begin
inherited;
FList := TList.Create;
end;
destructor TTntDesignerSelections.Destroy;
begin
FList.Free;
inherited;
end;
function TTntDesignerSelections.Equals(const List: IDesignerSelections): Boolean;
var
I: Integer;
begin
Result := False;
if List.Count <> Count then Exit;
for I := 0 to Count - 1 do
begin
if Items[I] <> List[I] then Exit;
end;
Result := True;
end;
function TTntDesignerSelections.Get(Index: Integer): TPersistent;
begin
Result := TPersistent(FList[Index]);
end;
function TTntDesignerSelections.GetCount: Integer;
begin
Result := FList.Count;
end;
{$IFDEF COMPILER_9_UP}
function TTntDesignerSelections.GetDesignObject(Index: Integer): IDesignObject;
begin
Result := nil; {TODO: Figure out what IDesignerSelections.GetDesignObject is all about. Must wait for more documentation!}
end;
{$ENDIF}
procedure TTntDesignerSelections.ReplaceSelection(const OldInst, NewInst: TPersistent);
var
Idx: Integer;
begin
Idx := FList.IndexOf(OldInst);
if Idx <> -1 then
FList[Idx] := NewInst;
end;
{//------------------------------
// Helpful discovery routines to explore the components and classes inside the IDE...
//
procedure EnumerateComponents(Comp: TComponent);
var
i: integer;
begin
for i := Comp.ComponentCount - 1 downto 0 do
MessageBoxW(0, PWideChar(WideString(Comp.Components[i].Name + ': ' + Comp.Components[i].ClassName)),
PWideChar(WideString(Comp.Name)), 0);
end;
procedure EnumerateClasses(Comp: TComponent);
var
AClass: TClass;
begin
AClass := Comp.ClassType;
repeat
MessageBoxW(0, PWideChar(WideString(AClass.ClassName)),
PWideChar(WideString(Comp.Name)), 0);
AClass := Aclass.ClassParent;
until AClass = nil;
end;
//------------------------------}
//------------------------------
function GetIdeMainForm: TCustomForm;
var
Comp: TComponent;
begin
Result := nil;
if Application <> nil then begin
Comp := Application.FindComponent('AppBuilder');
if Comp is TCustomForm then
Result := TCustomForm(Comp);
end;
end;
function GetObjectInspectorForm: TCustomForm;
var
Comp: TComponent;
IdeMainForm: TCustomForm;
begin
Result := nil;
IdeMainForm := GetIdeMainForm;
if IdeMainForm <> nil then begin
Comp := IdeMainForm.FindComponent('PropertyInspector');
if Comp is TCustomForm then
Result := TCustomForm(Comp);
end;
end;
{ TPropertyEditorWithDialog }
type
TPropertyEditorWithDialog = class
private
FPropName: AnsiString;
procedure CheckEditProperty(const Prop: IProperty);
procedure EditProperty(Component: TPersistent; const PropName: AnsiString; const Designer: ITntDesigner);
end;
procedure TPropertyEditorWithDialog.CheckEditProperty(const Prop: IProperty);
begin
if Prop.GetName = FPropName then
Prop.Edit;
end;
procedure TPropertyEditorWithDialog.EditProperty(Component: TPersistent; const PropName: AnsiString; const Designer: ITntDesigner);
var
Components: IDesignerSelections;
begin
FPropName := PropName;
Components := TDesignerSelections.Create;
Components.Add(Component);
GetComponentProperties(Components, [tkClass], Designer, CheckEditProperty);
end;
procedure EditPropertyWithDialog(Component: TPersistent; const PropName: AnsiString; const Designer: ITntDesigner);
begin
with TPropertyEditorWithDialog.Create do
try
EditProperty(Component, PropName, Designer);
finally
Free;
end;
end;
end.
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -