Sign in Join
Wiki copytemporary

Accessing the Interfaces directly/pt

English · Português

Esta página descreve como ter acesso direto de escrita ao widgeset subjacente usado pelo Lazarus (por exemplo: a API do Windows, ou GTK ou QT, etc). Pode-se sempre tentar evitar de confiar nas especifidades do widgeset. Este documento está aqui para as pessoas melhorarem o widgeset e para quem escreve componentes e realmente precisa acessar os widgeset diretamente.

Visão Geral

Cada TWinControl tem um handle e a LCL não precisa saber o que é um handle. O significado de um handle é totalmente assunto da interface:

Detalhes de cada Widgetset

Qt

Handles em Qt são na maioria ponteiros para objetos. Toda vez que um controle é criado, um objeto de ajuda é também criado e os dois são conectados. O objeto de ajuda é necessário para receber eventos do Qt. Depois de receber um evento, ele vai enviá-lo para a LCL.

A maior parte dos objetos é descendente de TQtWidget, como declarado abaixo:

pascal
{ TQtWidget }
pascal
TQtWidget = class(TObject)
private
public
  Widget: QWidgetH;
  LCLObject: TWinControl;
end;

Note as duas variáveis que todos eles contêm:

Carbon

Handles em Carbon são muito similares aos do Qt. As classes do helper são descendentes da classe abstrata TCarbonWidget.

pascal
{ TCarbonWidget }
pascal
TCarbonWidget = class(TObject)
private
public
  Widget: Pointer;
  LCLObject: TWinControl;
end;

Note as duas variáveis que todos eles contêm:

Windows

Handles em Win32 ou WinCE são quase sempre o mesmo que os seus handles relativos da API. Por exemplo, um handle de TMenu é HMENU, um handle de TBrush é HBRUSH, portanto você pode facilmente usá-los e passá-los para as APIs.

List of Handles on various LCL classes

TFont

TCanvas

TBrush

TBitmap

Você pode acessar isto no Gtk fazendo:

pascal
var
  GDIObject: PGDIObject;
  Bitmap: TBitmap;
  AImage: PGtkWidget;
begin
  ...
pascal
GDIObject := PgdiObject(Bitmap.Handle);
pascal
AImage := gtk_image_new_from_pixmap(GDIObject^.GDIPixmapObject,
 GDIObject^.GDIBitmapMaskObject);
pascal
gtk_widget_show(AImage);
pascal
gtk_container_add(GTK_CONTAINER(MyForm.Handle), AImage);
pascal
end;

TCustomForm

TQtMainWindow(Handle).Widget

TMenu, TMainMenu, TMenuItem and TPopUpMenu


From the Free Pascal wiki, page "Accessing the Interfaces directly/pt", as it stood on 2012-02-03 after a change by Chronos, out of the wiki's dump of 2024-05-26. Copyright stays with the author who wrote it, according to the old wiki's Licensing page. If you have concerns about this material, message the admin.

Revision 3, last changed by WikiArchive .

Talk about this page

Nobody has opened a bench for this page yet. Sign in to open one.