mirror of
				https://gitlab.com/freepascal.org/lazarus/lazarus.git
				synced 2025-11-04 04:59:39 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			121 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			121 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
Extending the IDE (Overview)
 | 
						|
============================
 | 
						|
 | 
						|
The IDE supports several types of plugins:
 | 
						|
 | 
						|
Components
 | 
						|
  These are the items in the component palette. For a example TButton can be
 | 
						|
  used to create Buttons.
 | 
						|
    
 | 
						|
Component Editors
 | 
						|
  Component editors are used when you double click on a component in the
 | 
						|
  designer or to add some extra items to the popup menu of the designer, when
 | 
						|
  you right click on a component.
 | 
						|
 | 
						|
Property Editors
 | 
						|
  These are used by the rows in the object inspector.
 | 
						|
 | 
						|
Experts
 | 
						|
  These are all other types.
 | 
						|
 | 
						|
 | 
						|
-------------------------------------------------------------------------------
 | 
						|
There are two possibilities to add your own plugins to Lazarus:
 | 
						|
 | 
						|
1. Write a package, install it and register your plugins in the 'Register'
 | 
						|
   procedure of a unit.
 | 
						|
2. Extend the lazarus code, and send your cvs diff to the lazarus mailing list.
 | 
						|
 | 
						|
 | 
						|
-------------------------------------------------------------------------------
 | 
						|
Writing components:
 | 
						|
 | 
						|
ToDo
 | 
						|
Hint: Create a new component via the package editor.
 | 
						|
 | 
						|
 | 
						|
 | 
						|
-------------------------------------------------------------------------------
 | 
						|
Writing component editors:
 | 
						|
 | 
						|
ToDo
 | 
						|
Hint: see componenteditors.pas for examples
 | 
						|
 | 
						|
 | 
						|
-------------------------------------------------------------------------------
 | 
						|
Writing property editors
 | 
						|
 | 
						|
ToDo
 | 
						|
Hint: see propedits.pp for examples
 | 
						|
 | 
						|
 | 
						|
-------------------------------------------------------------------------------
 | 
						|
Register event handlers
 | 
						|
 | 
						|
There are several events in the IDE, for which plugins can add their own
 | 
						|
handlers.
 | 
						|
In propedits.pp there is a GlobalDesignHook object, which maintains several
 | 
						|
events for designing. Each event calls a list of handlers. The default handlers
 | 
						|
are added by the IDE. You can add your own handlers with the AddHandlerXXX and
 | 
						|
RemoveHandlerXXX methods. They will be called before the default handlers.
 | 
						|
Examples:
 | 
						|
 | 
						|
  Adding your handler (this is normally done in the constructor of your object):
 | 
						|
    GlobalDesignHook.AddHandlerComponentAdded(@YourOnComponentAdded);
 | 
						|
    
 | 
						|
  Removing your handler:
 | 
						|
    GlobalDesignHook.RemoveHandlerComponentAdded(@YourOnComponentAdded);
 | 
						|
 | 
						|
  You can remove all handlers at once. For example, it is a good idea to add
 | 
						|
  this line in the destructor of object:
 | 
						|
    GlobalDesignHook.RemoveAllHandlersForObject(Self);
 | 
						|
 | 
						|
 | 
						|
The handlers of GlobalDesignHook:
 | 
						|
 | 
						|
  // lookup root
 | 
						|
  ChangeLookupRoot
 | 
						|
    Called when the LookupRoot changed.
 | 
						|
    The LookupRoot is the owner object of the currently selected components.
 | 
						|
    Normally this is a TForm.
 | 
						|
 | 
						|
  // methods
 | 
						|
  CreateMethod
 | 
						|
  GetMethodName
 | 
						|
  GetMethods
 | 
						|
  MethodExists
 | 
						|
  RenameMethod
 | 
						|
  ShowMethod
 | 
						|
    Called
 | 
						|
  MethodFromAncestor
 | 
						|
  ChainCall
 | 
						|
 | 
						|
  // components
 | 
						|
  GetComponent
 | 
						|
  GetComponentName
 | 
						|
  GetComponentNames
 | 
						|
  GetRootClassName
 | 
						|
  ComponentRenamed
 | 
						|
    Called when a component was renamed
 | 
						|
  ComponentAdded
 | 
						|
    Called when a new component was added to the LookupRoot
 | 
						|
  ComponentDeleting
 | 
						|
    Called before a component is freed.
 | 
						|
  DeleteComponent
 | 
						|
    Called by the IDE to delete a component.
 | 
						|
  GetSelectedComponents
 | 
						|
    Get the current selection of components.
 | 
						|
 | 
						|
  // persistent objects
 | 
						|
  GetObject
 | 
						|
  GetObjectName
 | 
						|
  GetObjectNames
 | 
						|
 | 
						|
  // modifing
 | 
						|
  Modified
 | 
						|
  Revert
 | 
						|
  RefreshPropertyValues
 | 
						|
 | 
						|
 | 
						|
 |