LCL Messages/ja
English (en) |
日本語 (ja) |
slovenčina (sk)
Thumb rules:
メッセージはVCLとの互換性のために存在します。 メッセージはwin32メッセージのように見えますが、パラメータとフラグをサポートしているにすぎません。 それらは、サードパーティ製のものも含めて、既存のVCLコントロールに共通的に使われているからです。
共通的に使われていない、独自に利用するフラグは、インターフェースの実装を難しくします。 つまり、メッセージを追加する前に十分な思慮が必要です。
多くのメッセージは、読みにくい定数と、ちょっとした値を使い、インターフェースに用いられます。 Windowsはメッセージの順序を正確に決めることはありません。
(訳注:たとえば、Windows95系(95/98/ME)とNT系(NT,2000,XP)ではメッセージの順序や発生するかどうか自体も異なるものがあります。WindowsはGUI、メッセージについては基本的な仕様はとても複雑でOSの混乱をアプリケーションが収拾しないといけない「おまじない」を入れなくてはいけないことが時々あります。)
Lazarusが目標とすることは、すべてのメッセージを、メソッドに置き換えることです。 たとえば、コントロールはサイズを変更するにあたって、WMSizeのかわりに、DoOnChangeBoundsを使うことができます。
現在、LCLがメッセージをインターフェースに送るのは、たいへんまれなケースのみです。 事実として、VCLの共通な利用のみで使っているくらいです。
At the moment the interfaces send many messages to the LCL. This amount should
be reduced in future. Better create a procedure in the LCL, that will send the
message. This way the parameters are well defined and all interfaces creates
the messages the same way.
The messages:
- Interface -> LCL -> WMSize, WMMove
- Send from the interface to tell the LCL control to update its bounds. Because of the auto aligning/sizing features of the LCL and some interfaces, these messages are not sent everytime a HandleObject is resized. So, either trust the LCL bounds OR the interface bounds, but don't mix.