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:
- em Gtk um handle é freqüentemente um PGtkWidget.
- em Windows um handle é freqüentemente um HWnd.
- em Carbon um handle é freqüentemente um objeto descendente de TCarbonWidget.
- em Qt um handle é freqüentemente um ponteiro para um objeto descendente de TQtWidget.
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:
{ TQtWidget }TQtWidget = class(TObject)
private
public
Widget: QWidgetH;
LCLObject: TWinControl;
end;Note as duas variáveis que todos eles contêm:
- Widget - Esta é uma conexão ao objeto do Qt para este Widget
- LCLObject - É uma ponte com o objeto da LCL a que ele está vinculado.
Carbon
Handles em Carbon são muito similares aos do Qt. As classes do helper são descendentes da classe abstrata TCarbonWidget.
{ TCarbonWidget }TCarbonWidget = class(TObject)
private
public
Widget: Pointer;
LCLObject: TWinControl;
end;Note as duas variáveis que todos eles contêm:
- Widget - Esta é uma conexão com o objeto do Carbon para este Widget:ControlRef (descendentes de TCarbonControl) ou WindowRef (descendentes de TCarbonWindow).
- LCLObject - É uma ponte com o objeto da LCL a que ele está vinculado.
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
- Win32, WinCE: HFONT
- Qt: Um objeto TQtFont de qtprivate.pas
- Carbon: Um objeto TCarbonFont de carbongdiobjects.pp
TCanvas
- Win32, WinCE: HDC
- Gtk: Um objeto TDeviceContext de gtkdef.pp
- Você pode can pegar um drawable, por exemplo com: TDeviceContext(MyCanvas.Handle).Drawable
- Qt: Um objeto TQtDeviceContext de qtprivate.pas
- Carbon: Um objeto TCarbonDeviceContext de carboncanvas.pp
- O handle nativo pode ser accessado com TCarbonDeviceContext(MyCanvas.Handle).CGContext de tipo CGContextRef
TBrush
- Win32, WinCE: HBRUSH
- Qt: Um objeto TQtBrush de qtprivate.pas
- Carbon: Um objeto TCarbonBrush de carbongdiobjects.pp
TBitmap
- Win32, WinCE: HBITMAP
- Gtk: PGDIObject (definido na unidade GtkDef)
- Qt: Um objeto TQtImage de qtobjects.pas unit
- Carbon: Um objeto TCarbonBitmap de carbongdiobjects.pp
Você pode acessar isto no Gtk fazendo:
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, um handle de janela nativo
- Gtk: É um ponteiro para uma estrutura.
- Qt: O handle é um ponteiro para um objeto da classe TQtMainWindow declarada em qtwidgets.pas. Para ter acess ao objeto do Qt TQtMainWindow significa faça:
TQtMainWindow(Handle).Widget
- Carbon: TCarbonWindow de carbonprivate.pp
TMenu, TMainMenu, TMenuItem and TPopUpMenu
- Win32, WinCE : HMENU
- Qt: TMainMenu é um ponteiro para um objeto TQtMenuBar. TPopUpMenu é um objeto TQtMenu. TMenuItem pode ser um TQtAction se representa um item selecionável, ou um separador ou um TQtMenu se é um item que tem submenus.
- Carbon: TMenuItem é um objeto TCarbonMenu, TMenu (TMainMenu e TPopupMenu) é representado pelo seu item de menu raiz.
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.
Talk about this page
Nobody has opened a bench for this page yet. Sign in to open one.
