Что нового

Элементы GUI Как сделать динамическое изменение размеров элементов через нажатие мышкой

smsgeorge

Новичок
Сообщения
63
Репутация
0
Здравствуйте! Как оптимизировать этот код. Задача кода - у меня есть элементы edit в окне, между ними отступы. Нажимая мышкой между отступами и перемещая мышкой начинается изменение размеров ширины edit и перемещение других элементов из-за того, что изменилась ширина. Код работает, но работает не стабильно. Не всегда как будто улавливается нажатие (хотелось бы, чтобы нажал и сработало) а срабатывает, когда с одного, а когда и с 3-5 раз. Сам код делает, что надо. Как сделать, чтобы легко улавливалось нажатие мышкой?
Код:
#include <GuiScrollBars.au3>
#include <WinAPI.au3>
#include <WindowsConstants.au3>
#include <FontConstants.au3>
#include <GUIConstantsEx.au3>
#include <EditConstants.au3>
#include <StaticConstants.au3>
#include <Constants.au3>
#include <Array.au3>
#Include <GUIEdit.au3>
#Include <WinAPIEx.au3>
#include <Misc.au3>
#include <WindowsConstants.au3>
#include <GUIConstantsEx.au3>
#include <Date.au3>
#include <Timers.au3>
#include <ButtonConstants.au3>
#include <TabConstants.au3>
#include <TreeViewConstants.au3>
#include <GDIPlus.au3>
#include <ScreenCapture.au3>

#Include <Pop-ups.au3>
#include <WinAPIGdi.au3>
#include <SendMessage.au3>


#NoTrayIcon

global $ToolTip_skrinsoot

Opt("GUIOnEventMode", 1) ; Включает режим OnEvent



TrayCreateItem("Ответы")
TrayItemSetOnEvent(-1, "_spryatat_pokazat_otveti")

TrayCreateItem("Шаблоны ЦФЗ")
TrayItemSetOnEvent(-1, "_Spryatati_okno_shabloni_cfz")

TrayCreateItem("База знаний")
TrayCreateItem("")


TrayCreateItem("Настройки")
TrayItemSetOnEvent(-1, "_spryatat_pokazat_nastroiki")

TrayCreateItem("")

TrayCreateItem("Рестарт")
TrayItemSetOnEvent(-1, "_Restart")

TrayCreateItem("")


TrayCreateItem("Выход")
TrayItemSetOnEvent(-1, "_Exit")

Global $Cvet_fona_4_stadiya = 0xFF2400 ;;;;;; Цвет 4 стадии (красный)

Sozdanie_okna_razmer_zakaza()

;000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ГОРЯЧИЕ КЛАВИШИ ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
HotKeySet("{F1}", "Kopirovanie_dannih")
HotKeySet("{F2}", "_spryatat_pokazat_otveti")
HotKeySet("{F3}", "_Spryatati_okno_shabloni_cfz")
HotKeySet("{F4}", "_Exit")
HotKeySet("{F5}", "_Spryatati_okno_bloknot")
HotKeySet("{F6}", "_Spryatati_okno_kartinki")

HotKeySet("{F9}", "_Spryatati_okno_zak_tov")
HotKeySet("^1", "_Bistroe_pereklucnhenie_zakazov_f1")
HotKeySet("^2", "_Bistroe_pereklucnhenie_zakazov_f2")
HotKeySet("^3", "_Bistroe_pereklucnhenie_zakazov_f3")
HotKeySet("^4", "_Bistroe_pereklucnhenie_zakazov_f4")
HotKeySet("^5", "_Bistroe_pereklucnhenie_zakazov_f5")
;000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; РЕЖИМЫ ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Opt("TrayMenuMode", 1 + 2) ; Не отображать в трее пункты меню по умолчанию (Script Paused/Exit) и не отмечать галочками при выборе.
Opt("TrayOnEventMode", 1) ; Включает режим TrayOnEventMode.
;------------------------------------------------------------------------------------------------
TraySetState(1) ; Показывает меню трея
;------------------------------------------------------------------------------------------------;------------------------------------------------------------------------------------------------
AdlibRegister('_Poluchaem_znachenie', 50)
AdlibRegister('Izmenenie_cveta_okon_proverka', 300)
;------------------------------------------------------------------------------------------------
;=====================================================================================================================================================================================================================
;=====================================================================================================================================================================================================================
While 1
    Sleep(1000) ; Цикл ожидания
WEnd

Func _Exit()
    _Perezapis_txt(0)
    Exit
EndFunc

Func Sozdanie_okna_razmer_zakaza()
    global   $Edit_feik_zakaz[13]
    global $LB_feik_zakaz[13]
    global $LB_megdu[13]

    ;    Global $Okno_zatemnenie = GUICreate("Настройка размеров", @DesktopWidth, @DesktopHeight,0, 0,   $WS_POPUP, $WS_EX_TOPMOST)
    Global $Shirina_okna_GL = 700
    Global $Visota_okna_GL =400
    Global $X_okna_GL = 150
    Global $Y_okna_GL =250
    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

    global    $mainwindow_razmer_zakaz = GUICreate("Самокопи", $Shirina_okna_GL, $Visota_okna_GL, $X_okna_GL, $Y_okna_GL, ($GUI_SS_DEFAULT_GUI - $WS_CAPTION)+$WS_CLIPCHILDREN, ($WS_EX_TOPMOST +$WS_EX_COMPOSITED))
    GUISetBkColor($Cvet_fona_4_stadiya, $mainwindow_razmer_zakaz)

    Global $Razmeri_ellementov_zakaza_shirina[13]
    Global $Razmeri_ellementov_tovara_shirina[7]
    Global $Razmeri_ellementov_zakaza_x1[13]
    Global $Razmeri_ellementov_zakaza_x2[13]
    Global $vremenaya_shirina[13]
    Global $vremenaya_x[13]

    global $otstup_megdu_slovami = 5
    global $x_edit_1 = 10
    global $y_edit_1 = 20
    ;;;;;;;;;
    global $y_label_1 = 5
    ;;;;;;;;;
    global $razmer_shirina_1 = 50
    global $razmer_visota_edit = 20
    global $razmer_visota_label =17
    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    $Razmeri_ellementov_zakaza_shirina[1]=50
    $Razmeri_ellementov_zakaza_shirina[2]=50
    $Razmeri_ellementov_zakaza_shirina[3]=50
    $Razmeri_ellementov_zakaza_shirina[4]=50
    $Razmeri_ellementov_zakaza_shirina[5]=50
    $Razmeri_ellementov_zakaza_shirina[6]=50
    $Razmeri_ellementov_zakaza_shirina[7]=50
    $Razmeri_ellementov_zakaza_shirina[8]=50
    $Razmeri_ellementov_zakaza_shirina[9]=50
    $Razmeri_ellementov_zakaza_shirina[10]=50
    $Razmeri_ellementov_zakaza_shirina[11]=50
    $Razmeri_ellementov_zakaza_shirina[12]=50
    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

    $narastayshaya=$x_edit_1
    $Razmeri_ellementov_zakaza_x2[0]=$x_edit_1
    for $i=1 to 12
        $narastayshaya=$narastayshaya+$Razmeri_ellementov_zakaza_shirina[$i]
        $Razmeri_ellementov_zakaza_x1[$i]=$narastayshaya
        $narastayshaya=$narastayshaya+$otstup_megdu_slovami
        $Razmeri_ellementov_zakaza_x2[$i]=$narastayshaya

    next

    for $i=1 to 12

        $vremenaya_shirina[$i]= $Razmeri_ellementov_zakaza_shirina[$i]
        $vremenaya_x[$i]=  $Razmeri_ellementov_zakaza_x2[$i]

    next

    $Razmeri_ellementov_tovara_shirina[1]=50
    $Razmeri_ellementov_tovara_shirina[2]=50
    $Razmeri_ellementov_tovara_shirina[3]=50
    $Razmeri_ellementov_tovara_shirina[4]=50
    $Razmeri_ellementov_tovara_shirina[5]=50
    $Razmeri_ellementov_tovara_shirina[6]=50
    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    global $narastayshaya
    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

    $narastayshaya=$x_edit_1
    for $l=1 to 12
        ;ConsoleWrite(@CR&"  nar   "&$narastayshaya)
        $Edit_feik_zakaz[$l] = GUICtrlCreateEdit($Razmeri_ellementov_zakaza_shirina[$l],$narastayshaya , 50, $Razmeri_ellementov_zakaza_shirina[$l], $razmer_visota_edit*$l, $ES_NUMBER)
        GUICtrlSetOnEvent($Edit_feik_zakaz[$l] , "oo")

        $narastayshaya=$narastayshaya+$Razmeri_ellementov_zakaza_shirina[$l]
        $LB_megdu[$l] = GUICtrlCreatelabel($l,$Razmeri_ellementov_zakaza_x1[$l], $y_label_1, $otstup_megdu_slovami, $razmer_visota_label)
        $narastayshaya=$narastayshaya+$otstup_megdu_slovami
    next



    ;$LB_feik_zakaz[1] = GUICtrlCreatelabel(1,$x_edit_1 , $y_label_1, $Razmeri_ellementov_zakaza_shirina[1], $razmer_visota_label, -1, $GUI_WS_EX_PARENTDRAG)
    ;$narastaysaya=$narastaysaya+$x_edit_1+$Razmeri_ellementov_zakaza_shirina[1]
    ;$LB_megdu[1] = GUICtrlCreatelabel(1,$narastaysaya, $y_label_1, $otstup_megdu_slovami, $razmer_visota_label, -1, $GUI_WS_EX_PARENTDRAG)
    ;$narastaysaya=$narastaysaya+$otstup_megdu_slovami
    ;;;;;;;;
    ;$iEdit_1_zakaz[$i] = GUICtrlCreateEdit("",$x_edit_1+($i-1)*($razmer_shirina_1+$otstup_megdu_slovami), $y_edit_1, $razmer_shirina_1, $razmer_visota_edit, $ES_NUMBER)
    ;;;;;;;;;;;;;;;;;;;;;;;
    ;GUICtrlSetColor  (     $LB_1_zakaz[$i], $Cvet_texta_podpisei )
    ;GUICtrlSetBkColor (     $iEdit_1_zakaz[$i], $Cvet_fona_dannih_edit )



    GUISetState(@SW_SHOW,$mainwindow_razmer_zakaz)
    GUISetState(@SW_SHOW,$mainwindow_razmer_zakaz)
    AdlibRegister('_Proverka_mishi_rameri', 150)
EndFunc

Func _Proverka_mishi_rameri()
    global $CursorInfo_razmerii
    global $schet
    local $narastayshaya

    $schet

    $schet=$schet+1

    While Not _IsPressed("01")

        $poziciya_mishi=MouseGetPos()
        $x_ninesnee=$poziciya_mishi[0]

        $CursorInfo_razmerii = GUIGetCursorInfo($mainwindow_razmer_zakaz)

        $kakoi=1
        Switch $CursorInfo_razmerii[0]
            case    $Razmeri_ellementov_zakaza_x1[1]-10 to    $Razmeri_ellementov_zakaza_x2[1]+10
                $kakoi=1
            case    $Razmeri_ellementov_zakaza_x1[2]-10 to    $Razmeri_ellementov_zakaza_x2[2]+10
                $kakoi=2
            case    $Razmeri_ellementov_zakaza_x1[3]-10 to    $Razmeri_ellementov_zakaza_x2[3]+10
                $kakoi=3
            case    $Razmeri_ellementov_zakaza_x1[4]-10 to    $Razmeri_ellementov_zakaza_x2[4]+10
                $kakoi=4
            case    $Razmeri_ellementov_zakaza_x1[5]-10 to    $Razmeri_ellementov_zakaza_x2[5]+10
                $kakoi=5
            case    $Razmeri_ellementov_zakaza_x1[6]-10 to    $Razmeri_ellementov_zakaza_x2[6]+10
                $kakoi=6
            case    $Razmeri_ellementov_zakaza_x1[7]-10 to    $Razmeri_ellementov_zakaza_x2[7]+10
                $kakoi=7
            case    $Razmeri_ellementov_zakaza_x1[8]-10 to    $Razmeri_ellementov_zakaza_x2[8]+10
                $kakoi=8
            case    $Razmeri_ellementov_zakaza_x1[9]-10 to    $Razmeri_ellementov_zakaza_x2[9]+10
                $kakoi=9
            case    $Razmeri_ellementov_zakaza_x1[10]-10 to    $Razmeri_ellementov_zakaza_x2[10]+10
                $kakoi=10
            case    $Razmeri_ellementov_zakaza_x1[11]-10 to    $Razmeri_ellementov_zakaza_x2[11]+10
                $kakoi=11
            case    $Razmeri_ellementov_zakaza_x1[12]-10 to    $Razmeri_ellementov_zakaza_x2[12]+10
                $kakoi=12

        EndSwitch

        While _IsPressed("01")
            $poziciya_mishi=MouseGetPos()
            $x_sled=$poziciya_mishi[0]

            Switch $kakoi
                case 1
                    GUICtrlSetPos ( $Edit_feik_zakaz[$kakoi], $Razmeri_ellementov_zakaza_x2[0],50,$Razmeri_ellementov_zakaza_shirina[$kakoi]+ ($x_sled-$x_ninesnee),20 )
                    for $h=2 to 12
                        GUICtrlSetPos ( $Edit_feik_zakaz[$h], $Razmeri_ellementov_zakaza_x2[$h-1]+$x_sled-$x_ninesnee,50,$Razmeri_ellementov_zakaza_shirina[$h],20 )
                    next

                    $vremenaya_shirina[1]=$Razmeri_ellementov_zakaza_shirina[1]+ ($x_sled-$x_ninesnee)

                    for $h=1 to 12
                        $vremenaya_x[$h]=$Razmeri_ellementov_zakaza_x2[$h]+$x_sled-$x_ninesnee
                    next

                    GUICtrlSetData ($Edit_feik_zakaz[1], $vremenaya_shirina[1])

                case 12

                    GUICtrlSetPos ( $Edit_feik_zakaz[$kakoi], $Razmeri_ellementov_zakaza_x2[$kakoi-1],50,$Razmeri_ellementov_zakaza_shirina[$kakoi]+$x_sled-$x_ninesnee,20 )

                    $vremenaya_shirina[12]=$Razmeri_ellementov_zakaza_shirina[12]+ ($x_sled-$x_ninesnee)

                    GUICtrlSetData ($Edit_feik_zakaz[12], $vremenaya_shirina[12])

                case else
                    GUICtrlSetPos ( $Edit_feik_zakaz[$kakoi], $Razmeri_ellementov_zakaza_x2[$kakoi-1],50,$Razmeri_ellementov_zakaza_shirina[$kakoi]+ ($x_sled-$x_ninesnee),20 )

                    $vremenaya_shirina[$kakoi]=$Razmeri_ellementov_zakaza_shirina[$kakoi]+ ($x_sled-$x_ninesnee)


                    for $h=$kakoi+1 to 12
                        GUICtrlSetPos ( $Edit_feik_zakaz[$h], $Razmeri_ellementov_zakaza_x2[$h-1]+$x_sled-$x_ninesnee,50,$Razmeri_ellementov_zakaza_shirina[$h],20 )
                    next

                    for $h=$kakoi to 12
                        $vremenaya_x[$h]=$Razmeri_ellementov_zakaza_x2[$h]+$x_sled-$x_ninesnee
                     next

                    GUICtrlSetData ($Edit_feik_zakaz[$kakoi], $vremenaya_shirina[$kakoi])

            EndSwitch

        WEnd

        for $i=1 to 12

            $Razmeri_ellementov_zakaza_shirina[$i]=$vremenaya_shirina[$i]

            $Razmeri_ellementov_zakaza_x2[$i]=$vremenaya_x[$i]
            $Razmeri_ellementov_zakaza_x1[$i]=$vremenaya_x[$i]-5
        next

        $narastayshaya=$x_edit_1
        $Razmeri_ellementov_zakaza_x2[0]=$x_edit_1
        for $i=1 to 12
            $Razmeri_ellementov_zakaza_shirina[$i]=GUICtrlRead ( $Edit_feik_zakaz[$i] )

            GUICtrlSetPos ( $Edit_feik_zakaz[$i],  $narastayshaya,50,$Razmeri_ellementov_zakaza_shirina[$i],20 )

            $narastayshaya=$narastayshaya+$Razmeri_ellementov_zakaza_shirina[$i]
            $Razmeri_ellementov_zakaza_x1[$i]=$narastayshaya
            $narastayshaya=$narastayshaya+$otstup_megdu_slovami
            $Razmeri_ellementov_zakaza_x2[$i]=$narastayshaya

        next

    WEnd

EndFunc

Сообщение автоматически объединено:

Сделал, рабочую версию выложу позже.
 
Последнее редактирование:
Верх