SO周りのブラウズ中に私が実際に解決策を見つけました。
私は、ポインタがにカーソルを変更するのMouseMoveをオーバーライドすることによって、それら(つまり、ボタンの動作)
の上にあるときのコンポーネントは通常、彼らは正しいマウスカーソルの種類を設定する方法である、独自のCursorプロパティを持っていることを忘れていcrHandPoint
ハイパーリンクのセル上にあり、ハイパーリンクを越えていない場合に元のカーソルプロパティを保存すると、正常に動作するように見えます(長時間実行されるコードで設定されたscreen.cursorとは別です)。コードが正常に動作することを確認するためにコードを完成させる必要があるので、私が期待どおりに動作することを確認するまで、未回答のまま残しておきます。
編集:コードを追加。私は、インターセプタクラスを使用することに決めました。グリッドをサブクラス化してコントロールを登録する必要はありません。私は、1つのアプリケーションで1つまたは2つの場所でしか使用しないで、他のマシンをセットアップする必要はありません。
TdxMasterView = class(dxMasterView.TdxMasterView)
private
FDefaultCursor: TCursor;
procedure MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); override;
procedure MouseMove(Shift: TShiftState; X, Y: Integer); override;
public
constructor Create(AOwner: TComponent); override;
end;
constructor TdxMasterView.Create(AOwner: TComponent);
begin
inherited create(AOwner);
FDefaultCursor := self.Cursor;
end;
procedure TdxMasterView.MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
var
lvHitTestCode: TdxMasterViewHitTestCode;
lvNode : TdxMasterViewNode;
lvColumn: TdxMasterViewColumn;
lvRowIndex, lvColIndex: integer;
begin
inherited;
lvHitTestCode := self.GetHitTestInfo(Point(X,Y),
lvNode,
lvColumn,
lvRowIndex,
lvColIndex);
if (lvHitTestCode = htContent) and (lvColumn is TMasterViewClickableColumn) then
begin
TMasterViewClickableColumn(lvColumn).onClickContentCell(lvNode);
end;
end;
procedure TdxMasterView.MouseMove(Shift: TShiftState; X, Y: Integer);
var
lvHitTestCode: TdxMasterViewHitTestCode;
lvNode : TdxMasterViewNode;
lvColumn: TdxMasterViewColumn;
lvRowIndex, lvColIndex: integer;
begin
inherited;
lvHitTestCode := self.GetHitTestInfo(Point(X,Y),
lvNode,
lvColumn,
lvRowIndex,
lvColIndex);
if (lvHitTestCode = htContent) and (lvColumn is TMasterViewClickableColumn) then
begin
self.cursor := TMasterViewClickableColumn(lvColumn).cursorOnMouseOver;
end
else
begin
self.cursor := self.FDefaultCursor;
end;
end;
ハンドル[ 'WM_SETCURSOR'](https://msdn.microsoft.com/en-us/library/windows/desktop/ms648382.aspxは) –
は多分これは役立ちます:https://でスタックオーバーフロー。com/questions/19257237/reset-cursor-in-wm-setcursorハンドラが正しく –
またはhttps://stackoverflow.com/q/19570880/8041231 – Victoria