FCL
│
Deutsch (de) │
English (en) │
español (es) │
suomi (fi) │
français (fr) │
Bahasa Indonesia (id) │
日本語 (ja) │
русский (ru) │
中文(中国大陆) (zh_CN) │
The Free Component Library (FCL) consists of a collection of units, providing components (mostly classes) for common tasks. You can also see the LCL Components available directly within Lazarus. The FCL intends to be compatible with Delphi's Visual Component Library (VCL), but the FCL is restricted to non-visual components. On the other hand, the FCL also goes beyond the VCL.
See Free Component Library for the current development status and an overview of the available components (though this seems inconsistent with Reference for 'fcl' in Lazarus). You can also check the source repository. Note that there are also some platform-specific files in the FCL.
After the example, you can find a list of some FCL components.
Usage
To use an FCL component you need to include the name of the unit which implemented it, in a uses clause in your program or unit (see example below). The default compiler configuration file is set up to search the FCL directories for such units. You can also set the appropriate search path with a command-line compiler option of the form -Fu<path-to-fcl-units>.
Subpackages
The full list of subpackages of the FCL can be found here: Package List
The fcl-prefixed subpackages are:
- fcl-base The base units (including e.g. an expression parser)
- fcl-async Asynchronous I/O (serial?)
- fcl-db Generic database support + prepackaged drivers
- fcl-fpcunit Unit testing framework
- fcl-image Raster Image reading and writing (aka fpimage)
- fcl-json Routines for javascript object streaming
- fcl-net Network related units
- fcl-passrc Pascal language parsing and transformation
- fcl-process Process controll
- fcl-registry Registry
- fcl-res Resource handling
- fcl-stl Generic container library (standard template library)
- fcl-web Helper for web development
- fcl-xml XML (DOM) unit and related units.
Documentation
Currently, the FCL is not completely documented (feel free to contribute; also take a look at Reference for 'fcl'). For Delphi compatible units, you could consult the Delphi documentation. You can always take a look at the source files in the source repository.
Example
The following program illustrates the use of the class TObjectList in the FCL unit Contnrs (providing various containers, including lists, stacks, and queues):
program TObjectListExample;
{$mode ObjFPC}
uses
Classes, { from RTL for TObject }
Contnrs; { from FCL for TObjectList }
type
TMyObject = class(TObject) { just some application-specific class }
private
FName: String; { with a string field }
public
constructor Create(AName: String); { and a constructor to create it with a given name }
property Name: String read FName; { and a property to read the name }
end;
constructor TMyObject.Create(AName: String);
begin
inherited Create;
FName := AName;
end;
var
VObjectList: TObjectList; { for a list of objects; it is a reference to such a list! }
begin
VObjectList := TObjectList.Create; { create an empty list }
with VObjectList do
begin
Add(TMyObject.Create('Thing One'));
Writeln((Last as TMyObject).Name);
Add(TMyObject.Create('Thing Two'));
Writeln((Last as TMyObject).Name);
end;
end.
This program must be compiled in an object-oriented mode, such as -Mobjfpc or -Mdelphi.
FCL Components
This is not an exhaustive list (to avoid duplication of effort). It only mentions some important components, or components that are otherwise not easy to find.
- Classes
- Base classes for Object Pascal extensions in Delphi mode
- Contnrs
- Some common container classes
- FPCUnit
- A Unit testing framework (based on Kent Beck's unit testing framework. See JUnit),FPCUnit tutorial (pdf)
- XMLRead, XMLWrite and DOM
- Detailed at the XML Tutorial