名前 題名 ▼ Takiさん > 再び、Takiです。 > > やりたいことはButton2の座標位置からPanel2→Panel1→Form1の > 情報を得たいのです。 > > SDKに付いてくるInspedt.exeのAncestorsのような情報が欲しいのです。 > > AccessibleObjectFromPointとAcc.get_accParentを組み合わせれば > できそうなので、マスターのサンプルプログラムのEnumAccTreeItemsを > 参考にして親の情報を得るプログラムを書いてみました。 > > QueryInterfaceとかのコードの意味は全く理解できていません。 > 見よう見まねで書いたコードです。 > > 手続きtestをTimerで3秒おきに呼び出して、その都度一覧を得ています。 > > > function getOya(ko:IAccessible;oyalist:TMemo):IAccessible; > var > varChild : OleVariant; > AccDisp : IDispatch; > rAcc :IAccessible; > s : wideString; > begin > result := nil; > if (ko = nil) then exit; > > if ko.Get_accParent(AccDisp) = S_OK then // koの親をAccDispで受け取る > begin > > if Assigned(AccDisp) then // AccDispが有効なら > begin > AccDisp.QueryInterface(IID_IAccessible,rAcc); // rAccへ > > // 親のNameプロパティ 確認用 > TVariantArg(varChild).vt := VT_I4; > TVariantArg(varChild).lVal := CHILDID_SELF; // これでいいのか? > if rAcc.Get_accName(varChild,s) = S_OK then > begin > oyalist.Lines.Append(s); > result := rAcc; > end; > end else begin > oyalist.Lines.Append('AccDisp 無効'); > end; > end else begin > oyalist.Lines.Append('Get_acc 失敗'); > end; > end; > > procedure test; // これをTimerで呼び出す > var > pAcc : IAccessible; > varChild : OleVariant; > AccNext : IAccessible; // 親のオブジェクト > s : wideString; > i : integer; > mPos : TPoint; > > begin > GetCursorPos(mPos); > if AccessibleObjectFromPoint(mPos,pAcc,varChild) = S_OK then > begin > FormMain.Memo1.Clear; > // マウスの位置のNameプロパティ > if pAcc.Get_accName(varChild,s) = S_OK then > begin > FormMain.Memo1.Lines.Append(s); > end; > > // マウス位置のAccオブジェクトのNameプロパティ > TVariantArg(varChild).vt := VT_I4; // OleVariant型にセット > TVariantArg(varChild).lVal := CHILDID_SELF; > if pAcc.Get_accName(varChild,s) = S_OK then > begin > FormMain.Memo1.Lines.Append(s); > end; > > accNext := pAcc; > > for i := 0 to 10 do // 無限ループを回避するため > begin > accNext := getOya(accNext,FormMain.Memo1); > if (accNext = nil) then break; > end; > > end; > end; > > ワードとかはリボンまでしかさかのぼれません。 > Get_accParentを使う方法では限界があるのでしょうか。 > > 忘れていました。私の環境です。 > Windows7Pro(32Bit)+DelphiXE(Starter) > uses plEnumAccInfos.pas GIF,JPEG,PNG画像ファイル及びLZH,ZIPファイルをアップロードできます.600 x 1200 ピクセルを超える画像は縮小表示されます(画像クリックで拡大表示). (上限122000(120k)バイト) 削除キー Link