2

オブジェクトインスペクター/イベントタブでOnMouseDownをクリックすると、シェイプが作成されます。「SelectMessage」の手順を実行してほしいのですが、オプションとして表示されません。また、手動で「SelectMessage」と入力すると、エラーが発生します。プロパティとメソッドSelectmessageは互換性がありません。

Selectmessage

procedure TFZone1Mod7.Selectmessage(sender: TObject);
var
  ShapeOrderNo: Integer;
begin
  if TryStrToInt(copy(TShape(Sender).Name,6,MaxInt),ShapeOrderNo) then
    begin
      LookUpMessage(ShapeOrderNo);
    end;
end;

私が行った場合

procedure TFZone1Mod7.Shape1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
   selectmessage(sender);
end;

その後、それは動作します。できればイベントから選択する方が簡単です。ありがとう

4

2 に答える 2

3

のイベントハンドラには、OnMouseEvent次の形式の署名が必要です。

procedure (Sender: TObject; Button: TMouseButton; 
    Shift: TShiftState; X, Y: Integer) of object;

コンポーネントはこれらすべてのパラメーターを渡してイベントハンドラーを呼び出します。イベントハンドラーは期待される形式である必要があります。

これを制御することはできません。コンポーネントには、イベントハンドラー用に事前に定義されたハードコードされた形式があります。あなたは単に適合しなければなりません。あなたの現在の解決策は正しいものです。

そうは言っても、SelectMessageそれが渡されたときにのみ機能することができTShapeます。したがって、関数をそのように宣言します。

procedure TFZone1Mod7.SelectMessage(Shape: TShape);
var
  ShapeOrderNo: Integer;
begin
  if TryStrToInt(copy(Shape.Name,6,MaxInt), ShapeOrderNo) then
    LookUpMessage(ShapeOrderNo);
end;

そしてそれをこのように呼んでください:

procedure TFZone1Mod7.Shape1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  SelectMessage(Sender as TShape);
end;
于 2012-10-23T08:33:54.623 に答える
3

私のDelphiの知識は少し錆びていますが、AFAIRの署名は、IDEで生成されたメソッドの署名と一致する必要があります。

procedure TFZone1Mod7.Selectmessage(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
var
  ShapeOrderNo: Integer;
begin
  if TryStrToInt(copy(TShape(Sender).Name,6,MaxInt),ShapeOrderNo) then
    begin
      LookUpMessage(ShapeOrderNo);
    end;
end;
于 2012-10-23T08:34:00.060 に答える