Door een bug in TWinControl.SetFocus (getest met Delphi 7) werken sommige controls niet goed als op een VCL-control staan die op zijn beurt op een niet-VCL window is gezet. In mijn geval staat een TEdit op een TFrame die op een TPanel staat. De TPanel is op een niet-VCL window gezet met behulp van de ParentWindow property.
Bij een TCustomEdit geeft dit een probleem met popupmenu's. Bij iedere keer rechtsklikken op een TCustomEdit, popupmenu toegekend of niet, treedt een EInvalidOperation op in WMContextMenu
. Dit is de relevante code:
Bij een TCustomEdit geeft dit een probleem met popupmenu's. Bij iedere keer rechtsklikken op een TCustomEdit, popupmenu toegekend of niet, treedt een EInvalidOperation op in WMContextMenu
Delphi:
Hoe voorkom ik dit probleem zonder de VCL te hercompileren?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| type TCustomEdit = class(TWinControl) private ... procedure WMContextMenu(var Message: TWMContextMenu); message WM_CONTEXTMENU; ... end; procedure TCustomEdit.WMContextMenu(var Message: TWMContextMenu); begin SetFocus; // veroorzaakt een EInvalidOperation inherited; end; |
Een goede grap mag vrienden kosten.
