Carbon interface internals/de

From Lazarus wiki
Revision as of 18:30, 11 February 2007 by Swen (talk | contribs)
Jump to navigationJump to search

Deutsch (de) English (en)

macOSlogo.png

Dieser Artikel behandelt ausschließlich macOS.

Siehe auch: Multiplatform Programming Guide/de

Apple iOS new.svg

Dieser Artikel behandelt ausschließlich iOS.

Siehe auch: Multiplatform Programming Guide/de


Diese Seite bietet einen Überblick über die LCL Carbon Schnittstelle für Mac OS X und soll neuen Entwicklern helfen.

Für die Installation und Erzeugung einer ersten Carbon Anwendung lesen sie zunächst Carbon Interface.

Dokumentation über Carbon

Carbon Buch zum Download

Carbon Dev

Was funktioniert bereits ?

  • Erstellen einer TForm
  • Erstellen und Klicken auf einen TButton
  • Erstellen und Bearbeiten eines TEdit
  • Erstellen und Klicken auf eine TGroupBox
  • Erstellen und Klicken auf eine TCheckBox
  • Erstellen eines TStaticText
  • Erstellen eines TTimer
  • Erstellen von TOpenGLControl mit AGL Kontext (siehe components/opengl/)
  • Maus Ereignisse
  • Tastatur Ereignisse (VK_ mapping für fremde Tastaturen muß noch getestet werden)

Was muß als nächstes getan werden ?

  • Erstellen weiterer Bedienelemente (TComboBox, TRadioButton, TMemo, TListBox, TImage)
  • Resize Ereignisse (wenn das Formular vom Benutzer resized wird)
  • InvalidateRect
  • ShowModal (für Dialoge)

Weitere schwierige Aufgaben

  • TLabel ist custom drawn in der LCL. Das bedeutet, daß zuerst TCanvas implementiert werden muß.
  • TCanvas benötigt GetDC/ReleaseDC, fonts, brush, pen, clipping und paint Nachrichten
  • TMenu ist ganz anders als die GTK und Win32 Menüs.

Wie man ein neues Bedienelement hinzufügt

Zum Beispiel TButton.

TButton wird definiert in lcl/buttons.pp. Dies ist der plattformunabhängige Teil der LCL, welcher vom normalen LCL Programmierer benutzt wird.

Seine widgetset Klasse befindet sich in lcl/widgetset/wsbuttons.pp. Dies ist die plattformabhängige Basis für alle widgetsets (carbon, gtk, win32, ...).

Seine Carbon Schnittstellenklasse ist in lcl/interfaces/carbon/carbonwsbuttons.pp:

 TCarbonWSButton = class(TWSButton)
 private
 protected
 public
   class function  CreateHandle(const AWinControl: TWinControl; const AParams: TCreateParams): TLCLIntfHandle; override;
 end;

Jede WS Klasse, die tatsächlich etwas implementiert, muß registriert werden. Schauen sie den initialization Abschnitt am Ende der carbonwsXXX.pp Unit an:

 RegisterWSComponent(TCustomButton, TCarbonWSButton);

TCarbonWSButton setzt CreateHandle außer Kraft, um einen Carbon Button zu erstellen. Der Code ist kurz und sollte leicht anpassbar sein für andere Bedienelemente wie TCheckBox.

Tastatur

  • Apple Command key is mapped to ssCtrl due to Apple Guidelines
  • Apple control key is mapped to ssMeta
  • Apple option key is mapped to its inscription, i.e. ssAlt