Difference between revisions of "Accessing the Interfaces directly"
m |
|||
Line 11: | Line 11: | ||
* under Qt, a Handle is often a pointer to a object descendent of TQtWidget. | * under Qt, a Handle is often a pointer to a object descendent of TQtWidget. | ||
− | Be aware that you should avoid relying on any widgetset specials. This page is for people improving the widgetsets and for people | + | Be aware that you should avoid relying on any widgetset specials. This page is for people improving the widgetsets and for people writing components that need to access the widgets directly. |
− | ==Per-Widgetset Details== | + | == Per-Widgetset Details == |
− | ===Qt=== | + | === Qt === |
Handles on Qt are mostly pointers to objects. Every time a control is created, a helper object is also created and both are connected. The helper object is necessary to receive events from Qt. After receiving a event it will send it to the LCL. | Handles on Qt are mostly pointers to objects. Every time a control is created, a helper object is also created and both are connected. The helper object is necessary to receive events from Qt. After receiving a event it will send it to the LCL. | ||
− | Most of those objects are descendents from TQtWidget as declared | + | Most of those objects are descendents from TQtWidget as declared below: |
<pre> | <pre> | ||
Line 37: | Line 37: | ||
* LCLObject - Is a bridge with the LCL object it is linked to. | * LCLObject - Is a bridge with the LCL object it is linked to. | ||
− | ===Windows=== | + | === Windows === |
Handles on Win32 or WinCE are almost always the same as their relative win api handles,For example handle of tmenu is HMENU,handle of TBrush is HBRUSH,so you can easily use them and pass them to windows apis. | Handles on Win32 or WinCE are almost always the same as their relative win api handles,For example handle of tmenu is HMENU,handle of TBrush is HBRUSH,so you can easily use them and pass them to windows apis. | ||
− | ==List of Handles on various LCL classes== | + | == List of Handles on various LCL classes == |
− | ===TFont=== | + | === TFont === |
* Win32,WinCE: HFONT | * Win32,WinCE: HFONT | ||
* Qt: A TQtFont object from qtprivate.pas | * Qt: A TQtFont object from qtprivate.pas | ||
− | ===TCanvas=== | + | === TCanvas === |
* Win32,WinCE: HDC | * Win32,WinCE: HDC | ||
* Qt: A TQtDeviceContext object from qtprivate.pas | * Qt: A TQtDeviceContext object from qtprivate.pas | ||
− | ===TBrush=== | + | === TBrush === |
* Win32,WinCE: HBRUSH | * Win32,WinCE: HBRUSH | ||
* Qt: A TQtBrush object from qtprivate.pas | * Qt: A TQtBrush object from qtprivate.pas | ||
− | ===TBitmap=== | + | === TBitmap === |
* Win32,WinCE: HBITMAP | * Win32,WinCE: HBITMAP | ||
Line 85: | Line 85: | ||
</pre> | </pre> | ||
− | ===TCustomForm=== | + | === TCustomForm === |
* Win32,WinCE: it´s a HWND, a native window handle | * Win32,WinCE: it´s a HWND, a native window handle | ||
Line 91: | Line 91: | ||
* Qt: The Handle is a pointer to a object from the TQtMainWindow class declared at qtprivate.pas. To have access to the QMainWindow Qt object it represents do: TQtMainWindow(Handle).Widget | * Qt: The Handle is a pointer to a object from the TQtMainWindow class declared at qtprivate.pas. To have access to the QMainWindow Qt object it represents do: TQtMainWindow(Handle).Widget | ||
− | ===TMenu=== | + | === TMenu === |
* Win32,WinCE : HMENU | * Win32,WinCE : HMENU |
Revision as of 22:35, 6 July 2006
This page describes, how to write a new LCL control, using the various LCL interfaces for the platform dependent implementations.
OpenGL is a platform independent language for 3D graphics. The platform dependent part is to get a OpenGL context. Under linux/freebsd/X you use glx for that, under windows you use WGL and under MacOSX you can use AGL.
Every TWinControl has a Handle, and the LCL does not need to know, what a Handle is. The meaning of the Handle is totally up to the LCL interface:
- under gtk a Handle is often a PGtkWidget
- under windows a Handle is often a HWnd.
- under carbon a Handle is often a ControlRef
- under Qt, a Handle is often a pointer to a object descendent of TQtWidget.
Be aware that you should avoid relying on any widgetset specials. This page is for people improving the widgetsets and for people writing components that need to access the widgets directly.
Per-Widgetset Details
Qt
Handles on Qt are mostly pointers to objects. Every time a control is created, a helper object is also created and both are connected. The helper object is necessary to receive events from Qt. After receiving a event it will send it to the LCL.
Most of those objects are descendents from TQtWidget as declared below:
{ TQtWidget } TQtWidget = class(TObject) private public Widget: QWidgetH; LCLObject: TWinControl; end;
Notice the two variables they all contain:
- Widget - This is a connect to the Qt object for this Widget
- LCLObject - Is a bridge with the LCL object it is linked to.
Windows
Handles on Win32 or WinCE are almost always the same as their relative win api handles,For example handle of tmenu is HMENU,handle of TBrush is HBRUSH,so you can easily use them and pass them to windows apis.
List of Handles on various LCL classes
TFont
- Win32,WinCE: HFONT
- Qt: A TQtFont object from qtprivate.pas
TCanvas
- Win32,WinCE: HDC
- Qt: A TQtDeviceContext object from qtprivate.pas
TBrush
- Win32,WinCE: HBRUSH
- Qt: A TQtBrush object from qtprivate.pas
TBitmap
- Win32,WinCE: HBITMAP
- Gtk: PGDIObject (defined on unit GtkDef)
- Qt: A QImageH qt object.
You can access this on Gtk using:
var GDIObject: PGDIObject; Bitmap: TBitmap; AImage: PGtkWidget; begin ... GDIObject := PgdiObject(Bitmap.Handle); AImage := gtk_image_new_from_pixmap(GDIObject^.GDIPixmapObject, GDIObject^.GDIBitmapMaskObject); gtk_widget_show(AImage); gtk_container_add(GTK_CONTAINER(MyForm.Handle), AImage); end;
TCustomForm
- Win32,WinCE: it´s a HWND, a native window handle
- Gtk: It´s a pointer to a structure.
- Qt: The Handle is a pointer to a object from the TQtMainWindow class declared at qtprivate.pas. To have access to the QMainWindow Qt object it represents do: TQtMainWindow(Handle).Widget
TMenu
- Win32,WinCE : HMENU