dword screen_copy; void ScreenCopy_activate() { SetEventMask(EVM_REDRAW+EVM_KEY+EVM_BUTTON+EVM_MOUSE); screen_copy = malloc(image.columns * image.rows * 3 +4); } void ScreenCopy_onMouseEvent(int mouseX, int mouseY, int lkm, int pkm) { dword i; int x, y; x = mouse.x + Form.left + 5 - calc(image.columns/2); y = mouse.y + Form.top + skin_height - calc(image.rows/2); CopyScreen( screen_copy, math.in(x, 0, screen.width - image.columns), math.in(y, 0, screen.height - image.rows), image.columns, image.rows ); for (i = 0; i < image.columns*image.rows; i++;) { image.mas[i] = ESDWORD[i*3+screen_copy] & 0xFFFFFF; } DrawCanvas(); if (mouse.down) { screen_copy = free(screen_copy); SetEventMask(EVM_REDRAW+EVM_KEY+EVM_BUTTON+EVM_MOUSE+EVM_MOUSE_FILTER); actionsHistory.saveCurrentState(); setCurrentTool(previousTool); if (!CheckActiveProcess(Form.ID)) ActivateWindow(GetProcessSlot(Form.ID)); } }