OnSpecialKey is called whenever a special key is pressed. Special keys are arrows, "Home", "End", etc.
Note: ◼OnSpecialKey is called twice for each key press (On key down and on key up). This is by Microsoft design. You can use GetKeyState to determine whether this is the on key down or on key up call ◼If you have problems receiving OnSpecialKey events, it is recommended that you place the TImageEnView (or its inherited components) on a TPanel instead of TForm
// Allow the current layer to be moved using the Shift+Cursor keys procedure TForm1.ImageEnView1SpecialKey(Sender: TObject; CharCode: Word; Shift: TShiftState; var Handled: Boolean); begin if ( ssShift in Shift ) and ( ImageEnView1.LayersCurrent > 0 ) then case CharCode of VK_LEFT : if IEIsKeyPressed( VK_LEFT ) then // Ensure this is a KeyDown call begin ImageEnView1.Layers[ImageEnView1.LayersCurrent].PosX := ImageEnView1.Layers[ImageEnView1.LayersCurrent].PosX - 10; ImageEnView1.Update(); Handled := True; end; VK_RIGHT : if IEIsKeyPressed( VK_RIGHT ) then // Ensure this is a KeyDown call begin ImageEnView1.Layers[ImageEnView1.LayersCurrent].PosX := ImageEnView1.Layers[ImageEnView1.LayersCurrent].PosX + 10; ImageEnView1.Update(); Handled := True; end; VK_UP : if IEIsKeyPressed( VK_UP ) then // Ensure this is a KeyDown call begin ImageEnView1.Layers[ImageEnView1.LayersCurrent].PosY := ImageEnView1.Layers[ImageEnView1.LayersCurrent].PosY - 10; ImageEnView1.Update(); Handled := True; end; VK_DOWN : if IEIsKeyPressed( VK_DOWN ) then // Ensure this is a KeyDown call begin ImageEnView1.Layers[ImageEnView1.LayersCurrent].PosY := ImageEnView1.Layers[ImageEnView1.LayersCurrent].PosY + 10; ImageEnView1.Update(); Handled := True; end; end; end;