1

Тема: AHK: Изменение размеров Gui контролов - мышью

Попытался сделать аналог контрола SizeBar (серая полоска посередине), для изменения размеров полей:


#SingleInstance Force  
#NoEnv
SetBatchLines, -1 
CoordMode, Mouse, Client
C_SIZEWE := DllCall("User32.dll\LoadCursor", "Ptr", NULL, "Int", 32644, "UPtr")  
wSizeBar := 4, Margin := 2

Gui, Margin, 5, 5
Gui, -DPIScale
Gui, Add, Edit, w200 h200 -vscroll
Gui, Add, Progress, x+%Margin% yp hp w%wSizeBar% vSizeBar BackgroundDbbbbbb
Gui, Add, Edit, w200 h200 -vscroll x+%Margin%
Gui, Show  
OnMessage(0x200, "SizeBar"), OnMessage(0x201, "SizeBar") 
Return  

SizeBar(wParam, lParam, msg) {
    Global C_SIZEWE, wSizeBar, Margin
    Static KeepSizeBar
    
    If (msg = 0x200) 
    { 
        If (A_GuiControl = "SizeBar")
            DllCall("User32.dll\SetCursor", "Ptr", C_SIZEWE) 
        If KeepSizeBar
        { 
            DllCall("User32.dll\SetCursor", "Ptr", C_SIZEWE) 
            SetTimer, MoveSizeBar, -10
        }
    } 
    Else If (msg = 0x201 && A_GuiControl = "SizeBar") 
    {
        KeepSizeBar := 1
        KeyWait LButton
        KeepSizeBar := 0 
        GoSub MoveControls
    }
    Return
    
    MoveSizeBar:
        MouseGetPos, SizeBarX
        GuiControl, Move, SizeBar, x%SizeBarX% 
        GuiControl, +Redraw, SizeBar 
        Return
        
    MoveControls: 
        GuiControlGet, SizeBar, Pos  
        GuiControlGet, Edit1, Pos  
        GuiControl, Move, Edit1, % "w" SizeBarX-Edit1X-Margin 
        GuiControlGet, Edit2, Pos  
        GuiControl, Move, Edit2, % "x" SizeBarX+Margin+wSizeBar " w" (Edit2X+Edit2W)-SizeBarX-Margin-wSizeBar
        Return
}

Есть идеи, как сделать проще?

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

2 (изменено: Alectric, 2013-11-05 13:20:53)

Re: AHK: Изменение размеров Gui контролов - мышью

Лучше использовать "gosub" вместо таймера, иначе глюк получается при быстром перемещении.
И эта строчка ненужна:

GuiControl, +Redraw, SizeBar 

Периодически из-за этого исчезает второй Edit.

Больше нечем даже дополнить, код идеальный.

Win 10 x64
AHK
                       Справка AHK v1 тебе в помощь.