how much gml are you comfortable with? one simpler way to handle movement is to forgo keypress/release events and control gm's built-in hspeed/vspeed variables in the step event. if you had a top-down game with arrow key control you might have something like this.
create event:
friction = 0.2;
step event:
if keyboard_check(vk_left) {hspeed -= 1;}
if keyboard_check(vk_right) {hspeed += 1;}
...etc.
this makes motion a little slidey. you can mess around with the speeds and friction as you see fit. if you want more precise movement, you can ignore the speed and friction variables and instead increment x and y values.
something like that is a lot easier to keep track of and change around than a bunch of separate events. if you don't want to use gml, it can be adapted to drag n drop pretty easily. any questions? i'm afraid i don't have the excuse of being tipsy if this doesn't help you much!!!