Sign in Join
Wiki copytemporary

Revision 2 of 3, by WikiArchive on 11-4-2026. The page as it is now.

Accessing the Interfaces directly/pt

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.

Contents

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 }
    
     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 }
    
     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
      ...
    
      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

TQtMainWindow(Handle).Widget

TMenu, TMainMenu, TMenuItem and TPopUpMenu


From the Free Pascal wiki, page "Accessing the Interfaces directly/pt", as the Internet Archive kept it on 2024-03-08. 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.