2010年8月19日木曜日

interface(インターフェース)を持っている(実装されている)か?の判定

親クラスを持っているか?を判定するには、is を使用するればいいけど、
interface(インターフェース)を自分で作成して、
クラスに持っているかを判定したい場合、GetInterfaceEntry を
使用します。
as を使用したい場合には、interface に GUID を埋め込んで置く必要があります。
IDEのソース上で GUID を埋め込みするには、[Ctrlキー] + [Shiftキー] + [Gキー] を
キー入力します。

type
  IDWSShapeContainer = interface
   ['{8D26C9EF-AD7A-4A6F-B145-BBEBC2D85240}']
   function IsShapeFocused():Boolean;
  end;

  TDWSBoxFlowDiagram = class(TPanel, IDWSShapeContainer)
     :
  end;

procedure TDWSShape.PaintSelectFocus(ACanvas: TCanvas);
var
  container: IDWSShapeContainer;
begin
  // nil 以外なら持っている。nil なら持っていない
  if Self.Parent.GetInterfaceEntry(IDWSShapeContainer) <> nil then
  begin
    container := Self.Parent as IDWSShapeContainer;
    if not container.IsShapeFocused() then
    begin
      exit;
    end;
  end;
     :
end;

2010年8月18日水曜日

Lazarus を SVN 更新したのだけど、、、

Lazarus を SVN 更新して再構築を行うと、
起動時に Failed to create handles. でエラーになってしまい起動できなくなってしまいました~

仕方ないので、
Daily Snapshots から再インストールしてみたのだけど、
結果、、同じエラーで起動ができない(悲)

普段使いの Lazarus と、SVN 更新用の Lazarus は、環境を分けているので
とりあえず、問題はないのですが、、、、気になってしまう。
問題解決されるといいな~

2010年8月16日月曜日

Font プロパティで日本語を設定したい場合

Font プロパティで日本語を設定したい場合、
CharSet を設定しますが、

FEdit1.Font.CharSet := SHIFTJIS_CHARSET;

SHIFTJIS_CHARSET の定義は、LCLType にあります。

uses LCLType;