1
私はこの投稿から次のコードを使用しています。 Code from Checked AnswerLazarusカーソル下のコントロールを見つける
複数のTLabelのうちの1つからマウスカーソルの下にControl(Label.Caption)を取得する必要があります。LabelがMain Fromにあったときにうまくいきました。私はメインフォーム上のパネルにラベルを貼りましたが、これはパネルを見つけるだけです。私はこれがパネル上にある多数のラベルのうち、いくつかの選択されたラベルでしか動作しないようにしたい。
「Bring To Front」としてラベルのZオーダーを変更しようとしましたが、違いはなく、まだパネルがあります。パネル上にあるので、カーソルの下のラベルを再度見つける方法はありますか?
LazarusはFindVCLWindowまたはObjectAtPointを持っていないようです。
procedure TForm1.Button1Click(Sender: TObject);
var
ctrl : TControl;
point : TPoint;
begin
point := Mouse.CursorPos; // Mouse pos at screen
Dec(point.X, Left); // Adjust for window.
Dec(point.Y, Top);
Dec(point.Y, GetSystemMetrics(SM_CYCAPTION)); // Adjust to client area.
ctrl := ControlAtPos(point, True, True, True);
// I added the following
tStr:=ctrl.Name; // DEBUG: This now shows "Panel2"
aStr:=(ctrl as TLabel).Caption; // This used to work
end;
素晴らしい、ありがとうございました。それはパネル上でうまく動作します。 – X10WannaBe