我正在将VCL应用程序迁移到FMX。我需要知道具有焦点的控件的类。该应用程序适用于各种动态创建的帧,具有多个输入控件 在VCL中,我使用VCL.Forms.TScreen.OnActiveControlChange,因为这是一致地捕获活动控件的地方。此事件在FMX.Forms.TScreen中不可用。什么是FMX的替代方法?
答案 0 :(得分:1)
在Delphi 10.3中,不幸的是,@ iamjoosy概述的方法在某些情况下(特别是当TabControls / TabItems用作其他控件的容器时)因“访问冲突”而严重失败。
我正在使用的代码:
<script type="text/javascript">
$(document).ready(function(){
$('#select_all').on('click',function(){
if(this.checked){
$('.checkbox').each(function(){
this.checked = true;
});
}else{
$('.checkbox').each(function(){
this.checked = false;
});
}
});
$('.checkbox').on('click',function(){
if($('.checkbox:checked').length == $('.checkbox').length){
$('#select_all').prop('checked',true);
}else{
$('#select_all').prop('checked',false);
}
});
});
</script>
<script src='https://ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js'></script>
<ul class="main">
<li><input type="checkbox" id="select_all" /> Select all</li>
<ul>
<li><input type="checkbox" class="checkbox" value="1"/>Item 1</li>
<li><input type="checkbox" class="checkbox" value="2"/>Item 2</li>
<li><input type="checkbox" class="checkbox" value="3"/>Item 3</li>
<li><input type="checkbox" class="checkbox" value="4"/>Item 4</li>
<li><input type="checkbox" class="checkbox" value="5"/>Item 5</li>
</ul>
</ul>
但要增加一点吸引力,如果出现以下情况,上述方法将恢复正常工作:
1)没有TabControl / TabItem对象
2)如果我将以下事件处理程序添加到每个子按钮(例如,将焦点设置回其父TabItem):
procedure TForm1.FormFocusChanged(Sender: TObject);
var
Control : iControl;
MyControl : TFMXObject;
begin
Control := form1.focused;
try
MyControl := TFmxObject(Control.GetObject);
form1.Caption := MyControl.Name + ' of type ' + MyControl.ClassName;
finally
MyControl := nil;
Control := nil;
end;
end;
希望有人可以提供有关我是否在做愚蠢的事情,或者是否遇到了FMX错误的建议。
答案 1 :(得分:0)
FMX中最类似的方法是收听TForm.OnFocusChanged事件。然后,您可以在事件处理程序中查找TForm.Focused属性。