Форум профессиональных мебельщиков PROMEBELclub
 
PROMEBELclub - Форум для мебельщиков: конструкторов, дизайнеров, мастеров, технологов и всех, кто имеет отношение к производству и изготовлению мебели. Программы для конструирования и дизайна мебели. Мебельная литература и обучающие пособия.
 
 

Вернуться   Форум профессиональных мебельщиков PROMEBELclub > Программы для мебельщиков > Программы для конструирования и дизайна мебели > Система БАЗИС > Базис-мебельщик. Скрипты

Меню

Маркет


Ответ
 
Опции темы Опции просмотра
Старый 02.10.2021, 17:36  
Базис + AutoHotkey
 
Аватар для Bystry
Bystry
Новичок
Регистрация: 02.11.2018
Сообщений: 16

Сказал(а) спасибо: 5
Поблагодарили 22 раз(а) в 3 сообщениях
Версия для печати Отправить по электронной почте
Bystry Bystry вне форума 02.10.2021, 17:36
Рейтинг: ()

Добрый день.
Предлагаю тут развивать тему скриптов AutoHotkey для базиса

Я ужа давно работаю в мебельщике с помощью PieMeny написанное на AutoHotkey. Ну и пару своих скриптов... Снял пару роликов на эту тему на ютьюбе. Кому интересно оставлю тут ссылочки

и

Интересно может кто-то еще использует AutoHotkey в работе? Хотелось бы посмотреть примеры использования.

Официальный сайт | Русскоязычная документация

Я попробовал выложить на гугл диск актуальную версию из второго видео, но гугл диск почему-то считает этот архив зло пакостным поэтому если кому надо пишите в телеграмме(@BNikitaG) поделюсь

Последний раз редактировалось Uncle; 05.10.2021 в 16:45.. Причина: ссылка на актуальную версию
Просмотров: 59394
Ответить с цитированием Вверх
20 пользователя(ей) сказали cпасибо:
Старый 17.01.2022, 01:30   #41
sergio1982
Местный
 
Регистрация: 01.09.2019
Сообщений: 424
Сказал(а) спасибо: 52
Поблагодарили 480 раз(а) в 147 сообщениях
Вес репутации: 195
sergio1982 - луч света в тёмном царствеsergio1982 - луч света в тёмном царствеsergio1982 - луч света в тёмном царствеsergio1982 - луч света в тёмном царствеsergio1982 - луч света в тёмном царстве
По умолчанию

Enigmaman

На практике, достаточно долго ищет, до нескольких секунд при большом количестве файлов.
Проверено в 8н.
Пути конечно нужно прописать свои.

Скрытый текст

PHP код:

#SingleInstance Force
#Persistent
#NoEnv
#UseHook
SetBatchLines -1
ListLines Off 
#KeyHistory 0
#ErrorStdOut
#NoTrayIcon
SetWorkingDir %A_ScriptDir
 

    ; 
___________________________ Body _________________________________________________




#If WinActive("ahk_exe Bazis_.exe") 

1::  
    If 
Bazis_SelectPath.Get()
        
Bazis_SelectPath.Select("Scripts\Папки\Выделение")
    Return
2:: 
    If 
Bazis_SelectPath.Get()
        
Bazis_SelectPath.Select("Scripts\Папки\Ящик")
    Return
3:: 
    If 
Bazis_SelectPath.Get()
        
Bazis_SelectPath.Select("Scripts")
    Return
    
    
#If
    
    
    
Esc::ExitApp



class Bazis_SelectPath

/*
Singleton - Bazis_SelectPath 00:09 17.01.2022
*/
    
Static Compliance := {"Фрагменты" "Фрагменты (*.fr3d;*.frw)"
        
"Furniture" "Крепеж, фурнитура (*.f3d)"
        
"Текстуры" "Текстуры (*.bmp;*.jpg;*.jpeg;*.png)"
        
"Scripts" "Файлы скриптов"
        
"Blum" "Каталог корпусов Blum Dynaplan (*.bxf)"
        
"Desktop" "Импорт 3D моделей (*.3ds;*.wrl;*.wrz;*.obj;*.x3d;*.x3dv;*.md3;*.salon)"   }
        , 
_____ := Acc_Init()
    
    
Get() {
        
WinExist("A")
        
WinGet, List, List, ahk_exe Bazis_.exe
        Loop 
% List
        {
            
hwnd :=  List%A_index%
            
WinGetTitleTitleahk_id %hwnd%
            
WinGetClass, Class, ahk_id %hwnd%
            If (Class = 
"TSpTBXFloatingWindowParent" && Title "Файлы" && DllCall("IsWindowVisible""Ptr"hwnd))
            {
                
Window := hwnd
                
Break
            }
        } 
        If !
Window
        
{
            
WinExist("ahk_class TFormMain ahk_exe Bazis_.exe"
            
WinGetControlListControlListHwnd 
            Loop
ParseControlList, `n, `r  
            
{
                
hwnd := A_LoopField
                WinGetClass
, Class, ahk_id %hwnd%
                
ControlGetTextText, , % "ahk_id " hwnd 
                
If (Class = "TSpTBXDockablePanel" && Text "Файлы" && DllCall("IsWindowVisible""Ptr"hwnd))  { 
                    
Window := hwnd
                    
Break
                } 
            }  
        }
        If !
Window
            
Return 0this.MsgBox("Не найдено окно файлов")
        
ControlGetComboBoxHwnd, , TComboBox1, % "ahk_id " Window 
        ControlGet
TreeComboBoxHwnd, , TBzTreeComboBox1, % "ahk_id " Window 
        ControlGetText
Text, , % "ahk_id " ComboBox
        this
.TreeComboBox := TreeComboBox
        this
.ComboBox := ComboBox
        this
.ComboBoxText := Text
        this
.Window := Window 
        this
.MouseMem()
        Return 
1
    

    
Select(Path) {
        
oPath := StrSplit(Path"\")
        If this.Compliance[oPath[1]] != this.ComboBoxText
        {
            Control, ChooseString,  % this.Compliance[oPath[1]] , , % "
ahk_id " this.ComboBox
            Sleep 200 
        }
        ControlClick, , % "
ahk_id " this.TreeComboBox
        Sleep 100
        ControlGet, TreeView, Hwnd, , TTreeView1, ahk_class TDropTreeForm ahk_exe Bazis_.exe  
        this.TreeView := TreeView
        Acc := Acc_ObjectFromWindow(TreeView)
        Match := 0
         
        for i, child in Acc_Children(Acc)
        { 
            If Acc.accValue(child) = Match && Acc.accName(child) = oPath[Match + 1]
            { 
                If (Match = oPath.Count() - 1)
                {  
                    Acc.accSelect(0x00000002, child)
                    this.MouseMove(1, 1, 0) 
                    Sleep 30 
                    ControlSend, , {Enter}, % "
ahk_id " this.TreeView
                    Break
                }
                ++Match
            } 
        } 
        this.MouseMem(1, 0)
    } 
    MouseMem(Set = 0, Speed = 0) {
        Static x, y
        S_CoordModeMouse := A_CoordModeMouse
        CoordMode, Mouse, Screen 
        If Set 
            this.MouseMove(x, y, Speed)
        Else  
        {
            MouseGetPos, x, y 
            this.X_Start := x, this.Y_Start := y
        }
        CoordMode, Mouse, %S_CoordModeMouse% 
    } 
    MouseMove(X, Y, s := 1) {  
        CoordMode, Mouse, Screen 
        MouseMove, X, Y, %s%
    }
    MsgBox(Text, Title = "", Options = "", Timeout = "") {
        MsgBox, % Options, % Title, % Text, % Timeout
    } 
}





    ; ___________________________ Acc.ahk Standard Library _________________________________________________
    
; http://www.autohotkey.com/board/topic/77303-acc-library-ahk-l-updated-09272012/
; https://dl.dropbox.com/u/47573473/Web%20Server/AHK_L/Acc.ahk
;------------------------------------------------------------------------------
; Acc.ahk Standard Library
; by Sean
; Updated by jethrow:
;     Modified ComObjEnwrap params from (9,pacc) --> (9,pacc,1)
;     Changed ComObjUnwrap to ComObjValue in order to avoid AddRef (thanks fincs)
;     Added Acc_GetRoleText & Acc_GetStateText
;     Added additional functions - commented below
;     Removed original Acc_Children function
; last updated 2/25/2010
;------------------------------------------------------------------------------

Acc_Init()
{
    Static    h 
    If Not    h
        h:=DllCall("
LoadLibrary","Str","oleacc","Ptr")
}
Acc_ObjectFromEvent(ByRef _idChild_, hWnd, idObject, idChild)
{
    Acc_Init()
    If    DllCall("
oleacc\AccessibleObjectFromEvent", "Ptr", hWnd, "UInt", idObject, "UInt", idChild, "Ptr*", pacc, "Ptr", VarSetCapacity(varChild,8+2*A_PtrSize,0)*0+&varChild)=0
    Return    ComObjEnwrap(9,pacc,1), _idChild_:=NumGet(varChild,8,"
UInt")
}

Acc_ObjectFromPoint(ByRef _idChild_ = "", x = "", y = "")
{
    Acc_Init()
    If    DllCall("
oleacc\AccessibleObjectFromPoint", "Int64", x==""||y==""?0*DllCall("GetCursorPos","Int64*",pt)+pt:x&0xFFFFFFFF|y<<32, "Ptr*", pacc, "Ptr", VarSetCapacity(varChild,8+2*A_PtrSize,0)*0+&varChild)=0
    Return    ComObjEnwrap(9,pacc,1), _idChild_:=NumGet(varChild,8,"
UInt")
}

Acc_ObjectFromWindow(hWnd, idObject = -4)
{
    Acc_Init()
    If    DllCall("
oleacc\AccessibleObjectFromWindow", "Ptr", hWnd, "UInt", idObject&=0xFFFFFFFF, "Ptr", -VarSetCapacity(IID,16)+NumPut(idObject==0xFFFFFFF0?0x46000000000000C0:0x719B3800AA000C81,NumPut(idObject==0xFFFFFFF0?0x0000000000020400:0x11CF3C3D618736E0,IID,"Int64"),"Int64"), "Ptr*", pacc)=0
    Return    ComObjEnwrap(9,pacc,1)
}

Acc_WindowFromObject(pacc)
{
    If    DllCall("
oleacc\WindowFromAccessibleObject", "Ptr", IsObject(pacc)?ComObjValue(pacc):pacc, "Ptr*", hWnd)=0
    Return    hWnd
}

Acc_GetRoleText(nRole)
{
    nSize := DllCall("
oleacc\GetRoleText", "Uint", nRole, "Ptr", 0, "Uint", 0)
    VarSetCapacity(sRole, (A_IsUnicode?2:1)*nSize)
    DllCall("
oleacc\GetRoleText", "Uint", nRole, "str", sRole, "Uint", nSize+1)
    Return    sRole
}

Acc_GetStateText(nState)
{
    nSize := DllCall("
oleacc\GetStateText", "Uint", nState, "Ptr", 0, "Uint", 0)
    VarSetCapacity(sState, (A_IsUnicode?2:1)*nSize)
    DllCall("
oleacc\GetStateText", "Uint", nState, "str", sState, "Uint", nSize+1)
    Return    sState
}

Acc_SetWinEventHook(eventMin, eventMax, pCallback)
{
    Return    DllCall("
SetWinEventHook", "Uint", eventMin, "Uint", eventMax, "Uint", 0, "Ptr", pCallback, "Uint", 0, "Uint", 0, "Uint", 0)
}

Acc_UnhookWinEvent(hHook)
{
    Return    DllCall("
UnhookWinEvent", "Ptr", hHook)
}


/*
#SingleInstance Force
#NoEnv
#Persistent
Acc_Init()
pCallback := RegisterCallback("
WinEventProc")
Acc_SetWinEventHook(1, 2222, pCallback)
ComObjError(false)
Return
Escape:: ExitApp
WinEventProc(hHook, event, hWnd, idObject, idChild, eventThread, eventTime)
{
    Critical
    Acc := Acc_ObjectFromEvent(_idChild_, hWnd, idObject, idChild)
    ; Code Here:
    ToolTip %  event "
`n" SubStr(Acc.accName(idChild), 1, 200) 

}
*/


; Written by jethrow
Acc_Role(Acc, ChildId=0) {
    try return ComObjType(Acc,"Name")="IAccessible"?Acc_GetRoleText(Acc.accRole(ChildId)):"invalid object"
}
Acc_State(Acc, ChildId=0) {
    try return ComObjType(Acc,"Name")="IAccessible"?Acc_GetStateText(Acc.accState(ChildId)):"invalid object"
}
Acc_Location(Acc, ChildId=0, byref Position="") { ; adapted from Sean's code
    try Acc.accLocation(ComObj(0x4003,&x:=0), ComObj(0x4003,&y:=0), ComObj(0x4003,&w:=0), ComObj(0x4003,&h:=0), ChildId)
    catch
        return
    Position := "x" NumGet(x,0,"int") " y" NumGet(y,0,"int") " w" NumGet(w,0,"int") " h" NumGet(h,0,"int")
    return    {x:NumGet(x,0,"int"), y:NumGet(y,0,"int"), w:NumGet(w,0,"int"), h:NumGet(h,0,"int")}
}
Acc_Parent(Acc) { 
    try parent:=Acc.accParent
    return parent?Acc_Query(parent):
}
Acc_Child(Acc, ChildId=0) {
    try child:=Acc.accChild(ChildId)
    return child?Acc_Query(child):
}
Acc_Query(Acc) { ; thanks Lexikos - www.autohotkey.com/forum/viewtopic.php?t=81731&p=509530#509530
    try return ComObj(9, ComObjQuery(Acc,"{618736e0-3c3d-11cf-810c-00aa00389b71}"), 1)
}
Acc_Error(p="") {
    static setting:=0
    return p=""?setting:setting:=p
}
Acc_Children(Acc) {
    if ComObjType(Acc,"Name") != "IAccessible"
        ErrorLevel := "Invalid IAccessible Object"
    else {
        Acc_Init(), cChildren:=Acc.accChildCount, Children:=[]
        if DllCall("oleacc\AccessibleChildren", "Ptr",ComObjValue(Acc), "Int",0, "Int",cChildren, "Ptr",VarSetCapacity(varChildren,cChildren*(8+2*A_PtrSize),0)*0+&varChildren, "Int*",cChildren)=0 {
            Loop %cChildren%
                i:=(A_Index-1)*(A_PtrSize*2+8)+8, child:=NumGet(varChildren,i), Children.Insert(NumGet(varChildren,i-8)=9?Acc_Query(child):child), NumGet(varChildren,i-8)=9?ObjRelease(child):
            return Children.MaxIndex()?Children:
        } else
            ErrorLevel := "AccessibleChildren DllCall Failed"
    }
    if Acc_Error()
        throw Exception(ErrorLevel,-1)
}
Acc_ChildrenByRole(Acc, Role) {
    if ComObjType(Acc,"Name")!="IAccessible"
        ErrorLevel := "Invalid IAccessible Object"
    else {
        Acc_Init(), cChildren:=Acc.accChildCount, Children:=[]
        if DllCall("oleacc\AccessibleChildren", "Ptr",ComObjValue(Acc), "Int",0, "Int",cChildren, "Ptr",VarSetCapacity(varChildren,cChildren*(8+2*A_PtrSize),0)*0+&varChildren, "Int*",cChildren)=0 {
            Loop %cChildren% {
                i:=(A_Index-1)*(A_PtrSize*2+8)+8, child:=NumGet(varChildren,i)
                if NumGet(varChildren,i-8)=9
                    AccChild:=Acc_Query(child), ObjRelease(child), Acc_Role(AccChild)=Role?Children.Insert(AccChild):
                else
                    Acc_Role(Acc, child)=Role?Children.Insert(child):
            }
            return Children.MaxIndex()?Children:, ErrorLevel:=0
        } else
            ErrorLevel := "AccessibleChildren DllCall Failed"
    }
    if Acc_Error()
        throw Exception(ErrorLevel,-1)
}
Acc_Get(Cmd, ChildPath="", ChildID=0, WinTitle="", WinText="", ExcludeTitle="", ExcludeText="") {
    static properties := {Action:"DefaultAction", DoAction:"DoDefaultAction", Keyboard:"KeyboardShortcut"}
    AccObj :=   IsObject(WinTitle)? WinTitle
            :   Acc_ObjectFromWindow( WinExist(WinTitle, WinText, ExcludeTitle, ExcludeText), 0 )
    if ComObjType(AccObj, "Name") != "IAccessible"
        ErrorLevel := "Could not access an IAccessible Object"
    else {
        StringReplace, ChildPath, ChildPath, _, %A_Space%, All
        AccError:=Acc_Error(), Acc_Error(true)
        Loop Parse, ChildPath, ., %A_Space%
            try {
                if A_LoopField is digit
                    Children:=Acc_Children(AccObj), m2:=A_LoopField ; mimic "m2" output in else-statement
                else
                    RegExMatch(A_LoopField, "(\D*)(\d*)", m), Children:=Acc_ChildrenByRole(AccObj, m1), m2:=(m2?m2:1)
                if Not Children.HasKey(m2)
                    throw
                AccObj := Children[m2]
            } catch {
                ErrorLevel:="Cannot access ChildPath Item #" A_Index " -> " A_LoopField, Acc_Error(AccError)
                if Acc_Error()
                    throw Exception("Cannot access ChildPath Item", -1, "Item #" A_Index " -> " A_LoopField)
                return
            }
        Acc_Error(AccError)
        StringReplace, Cmd, Cmd, %A_Space%, , All
        properties.HasKey(Cmd)? Cmd:=properties[Cmd]:
        try {
            if (Cmd = "Location")
                AccObj.accLocation(ComObj(0x4003,&x:=0), ComObj(0x4003,&y:=0), ComObj(0x4003,&w:=0), ComObj(0x4003,&h:=0), ChildId)
              , ret_val := "x" NumGet(x,0,"int") " y" NumGet(y,0,"int") " w" NumGet(w,0,"int") " h" NumGet(h,0,"int")
            else if (Cmd = "Object")
                ret_val := AccObj
            else if Cmd in Role,State
                ret_val := Acc_%Cmd%(AccObj, ChildID+0)
            else if Cmd in ChildCount,Selection,Focus
                ret_val := AccObj["acc" Cmd]
            else
                ret_val := AccObj["acc" Cmd](ChildID+0)
        } catch {
            ErrorLevel := """" Cmd """ Cmd Not Implemented"
            if Acc_Error()
                throw Exception("Cmd Not Implemented", -1, Cmd)
            return
        }
        return ret_val, ErrorLevel:=0
    }
    if Acc_Error()
        throw Exception(ErrorLevel,-1)

[свернуть]
sergio1982 вне форума   Ответить с цитированием Вверх
2 пользователя(ей) сказали cпасибо:
AlexBolton (17.01.2022), skromvit (17.01.2022)
Старый 17.01.2022, 10:59   #42
skromvit
Местный
 
Аватар для skromvit
 
Регистрация: 22.12.2008
Сообщений: 256
Сказал(а) спасибо: 55
Поблагодарили 231 раз(а) в 164 сообщениях
Вес репутации: 258
skromvit - весьма и весьма положительная личностьskromvit - весьма и весьма положительная личностьskromvit - весьма и весьма положительная личность
По умолчанию

Пример AHK-cкрипта для тех, кому требуется часто и быстро поменять стиль размеров и выносок в режиме чертежа.
В примере:
Ctrl+Shift+Alt+R хоткеи для вызова окна Параметры размеров.
!1 - Alt+1 хоткеи для настроек №1
!2 - Alt+2 хоткеи для настроек №2 - особенность, включается настройка "Применить ко всем текущим размерам".
!3 - Alt+3 хоткеи для настроек №3 - особенность, включается Курсив, использую для выносок.

Скрытый текст


PHP код:
#singleInstance Force
#IfWinActive, БАЗИС-Мебельщик ;Название окна программы

!1:: ;Вызываем параметры размеров Alt+1
Send 
^+!{sc13} ; Ctrl+Shift+Alt+R хоткеи Параметры размеров
winwait
ahk_class TFormParRazm
qS 
;Задаем размер стрелок
qT 
2,;Задаем высоту надписи
Sleep 200
Control
Uncheck,, TCheckBox2 ;Снимаем чек с курсива
Sleep 20 
;Подобрать паузу
Control
Uncheck,, TCheckBox3 ;Снимаем чек для замены всем размерам
Sleep 20 
;Подобрать паузу
Control
Check,, Edit1
Sleep 20 
;Подобрать паузу
Control
EditPaste, %qS%, Edit1 ;Меняем размер стрелок
Send 
{Enter}
Sleep 10 ;Подобрать паузу
Control
Check,, Edit2
Sleep 20 
;Подобрать паузу
Control
EditPaste, %qT%, Edit2 ;Меняем высоту надписи
Sleep 10 
;Подобрать паузу
Send 
{Tab 3}{Enter}
Return

!
2:: ;Вызываем параметры размеров Alt+2
Send 
^+!{sc13} ; Ctrl+Shift+Alt+R хоткеи Параметры размеров
winwait
ahk_class TFormParRazm
qS 
;Задаем размер стрелок
qT 
;Задаем высоту надписи
Sleep 200
Control
Uncheck,, TCheckBox2 ;Снимаем чек с курсива
Sleep 20 
;Подобрать паузу
Control
Check,, TCheckBox3 ;Ставим чек для замены всем размерам
Sleep 20 
;Подобрать паузу
Control
Check,, Edit1
Sleep 20 
;Подобрать паузу
Control
EditPaste, %qS%, Edit1 ;Меняем размер стрелок
Send 
{Enter}
Sleep 10 ;Подобрать паузу
Control
Check,, Edit2
Sleep 20 
;Подобрать паузу
Control
EditPaste, %qT%, Edit2 ;Меняем высоту надписи
Sleep 10 
;Подобрать паузу
Send 
{Tab 3}{Enter}
Return

!
3:: ;Вызываем параметры размеров Alt+3
Send 
^+!{sc13} ; Ctrl+Shift+Alt+R хоткеи Параметры размеров
winwait
ahk_class TFormParRazm
qS 
;Задаем размер стрелок
qT 
;Задаем высоту надписи
Sleep 200
Control
Check,, TCheckBox2 ;Снимаем чек с курсива
Sleep 20 
;Подобрать паузу
Control
Check,, Edit1
Sleep 20 
;Подобрать паузу
Control
EditPaste, %qS%, Edit1 ;Меняем размер стрелок
Send 
{Enter}
Sleep 10 ;Подобрать паузу
Control
Check,, Edit2
Sleep 20 
;Подобрать паузу
Control
EditPaste, %qT%, Edit2 ;Меняем высоту надписи
Sleep 10 
;Подобрать паузу
Send 
{Tab 3}{Enter}
Return 
[свернуть]
skromvit вне форума   Ответить с цитированием Вверх
3 пользователя(ей) сказали cпасибо:
AlexBolton (17.01.2022), PravCom (26.05.2022), zzerg (17.01.2022)
Старый 17.01.2022, 11:12   #43
sergio1982
Местный
 
Регистрация: 01.09.2019
Сообщений: 424
Сказал(а) спасибо: 52
Поблагодарили 480 раз(а) в 147 сообщениях
Вес репутации: 195
sergio1982 - луч света в тёмном царствеsergio1982 - луч света в тёмном царствеsergio1982 - луч света в тёмном царствеsergio1982 - луч света в тёмном царствеsergio1982 - луч света в тёмном царстве
По умолчанию

Запуск меню по F1.
Проверено в 8н.
Пути конечно нужно прописать свои.



Ускорил работу, если 90 папок, находит за 1 секунду (на видео папка "ящик" 93я по счёту).
Добавил меню, пример с хоткеями оставил в комментарии.
Для работы в других папках "Скрипты" надо заменить на "Фрагменты", "Фурнитура" (см. массив Compliance).
Кнопка "Назад" не работает, если была смена дерева, например с "Фрагменты" на "Фурнитура".


Файл.

Последний раз редактировалось sergio1982; 17.01.2022 в 12:05.
sergio1982 вне форума   Ответить с цитированием Вверх
3 пользователя(ей) сказали cпасибо:
abbaco (18.01.2022), AlexBolton (17.01.2022), skromvit (17.01.2022)
Старый 17.01.2022, 12:36   #44
Enigmaman
Новичок
 
Регистрация: 07.01.2020
Сообщений: 9
Сказал(а) спасибо: 1
Поблагодарили 1 раз в 1 сообщении
Вес репутации: 0
Enigmaman пока не определено
По умолчанию

Я вообще чайник в скриптах! Так что разведкой не пользуюсь!
Enigmaman вне форума   Ответить с цитированием Вверх
Старый 17.01.2022, 13:22   #45
skromvit
Местный
 
Аватар для skromvit
 
Регистрация: 22.12.2008
Сообщений: 256
Сказал(а) спасибо: 55
Поблагодарили 231 раз(а) в 164 сообщениях
Вес репутации: 258
skromvit - весьма и весьма положительная личностьskromvit - весьма и весьма положительная личностьskromvit - весьма и весьма положительная личность
По умолчанию

Для тех, кто пользуется видами и слоями в чертежах.

Скрипт быстрого перехода по хоткеям по видам.
Пример на 3 вида (Вид1, Вид2, Вид3).
Зажимаем тильду ~ и 1, 2 или 3.

Скрытый текст


PHP код:
#singleInstance force
#ifWinActive БАЗИС-Мебельщик

;<!--Переключение Видов--
sc29 1:: ; Зажимаем ~ + 1
Control
Choose1TSpTBXComboBox7
return

sc29 2:: ; Зажимаем ~ + 2
Control
Choose2TSpTBXComboBox7
return

sc29 3:: ; Зажимаем ~ + 3
Control
Choose3TSpTBXComboBox7
return
;--
Переключение Видов--!> 
[свернуть]


Скрипт быстрого перехода по хоткеям по слоям.
Пример на 3 слоя (Слой1, Слой2, Слой3).
Зажимаем Tab и 1, 2 или 3.

Скрытый текст


PHP код:
#singleInstance force
#ifWinActive БАЗИС-Мебельщик

;<!--Переключение Слоев--
scF 1:: ; Зажимаем Tab 1
Control
Choose1TSpTBXComboBox6
return

scF 2:: ; Зажимаем Tab 2
Control
Choose2TSpTBXComboBox6
return

scF 3:: ; Зажимаем Tab 3
Control
Choose3TSpTBXComboBox6
return
;--
Переключение Слоев--!> 
[свернуть]
skromvit вне форума   Ответить с цитированием Вверх
Старый 17.01.2022, 19:44   #46
sergio1982
Местный
 
Регистрация: 01.09.2019
Сообщений: 424
Сказал(а) спасибо: 52
Поблагодарили 480 раз(а) в 147 сообщениях
Вес репутации: 195
sergio1982 - луч света в тёмном царствеsergio1982 - луч света в тёмном царствеsergio1982 - луч света в тёмном царствеsergio1982 - луч света в тёмном царствеsergio1982 - луч света в тёмном царстве
По умолчанию Навигация по файлам

Добавил пример для нескольких типов папок.
Кнопка "Назад" везде работает.
Открывать должно что угодно менее чем за секунду.

Запуск меню по F1.
Проверено в 8н.
Пути конечно нужно прописать свои.





Файл.
sergio1982 вне форума   Ответить с цитированием Вверх
3 пользователя(ей) сказали cпасибо:
rostder (19.01.2022), skromvit (17.01.2022), toucaner (17.01.2022)
Старый 17.01.2022, 22:16   #47
sergio1982
Местный
 
Регистрация: 01.09.2019
Сообщений: 424
Сказал(а) спасибо: 52
Поблагодарили 480 раз(а) в 147 сообщениях
Вес репутации: 195
sergio1982 - луч света в тёмном царствеsergio1982 - луч света в тёмном царствеsergio1982 - луч света в тёмном царствеsergio1982 - луч света в тёмном царствеsergio1982 - луч света в тёмном царстве
По умолчанию

Цитата:
Сообщение от skromvit Посмотреть сообщение
TSpTBXComboBox6
А вы давно это используете?
Просто порядковый номер контрола (у вас это 6 или 7) у меня другой, и от запуска к запуску могут меняться.
sergio1982 вне форума   Ответить с цитированием Вверх
Старый 17.01.2022, 23:22   #48
skromvit
Местный
 
Аватар для skromvit
 
Регистрация: 22.12.2008
Сообщений: 256
Сказал(а) спасибо: 55
Поблагодарили 231 раз(а) в 164 сообщениях
Вес репутации: 258
skromvit - весьма и весьма положительная личностьskromvit - весьма и весьма положительная личностьskromvit - весьма и весьма положительная личность
По умолчанию

Цитата:
Сообщение от sergio1982 Посмотреть сообщение
А вы давно это используете?
Просто порядковый номер контрола (у вас это 6 или 7) у меня другой, и от запуска к запуску могут меняться.
Как-то раньше не замечал.
Сейчас протестировал и вот какая штука вырисовывается.
Если запустить БМ (у меня 2021.9.2, на работе 11) и сначала открыть модель, а потом чертеж - то адреса 6 и 7. А если открыть БМ и сначала запустить чертеж - то адреса меняются на 4 и 5. НО, если потом открыть модель, ТО в чертежах все становится на свои места!
Похоже есть какие-то приоритеты раздачи номеров при запуске. Что первым открылось, тому и номерки поменьше.

UPD^
А вот какая штука вырисовывается, при дальнейших исследованиях:
Код HTML:
<!--Слои в чертежах, если открыть до модели:-->
ClassNN:  TSpTBXComboBox4  HWND:  0x80312

<!--Виды в чертежах, если открыть до модели:-->
ClassNN:  TSpTBXComboBox5  HWND:  0x902d6

<!--Слои в чертежах, если открыть после модели:-->
ClassNN:  TSpTBXComboBox6  HWND:  0x80312

<!--Виды в чертежах, если открыть после модели:-->
ClassNN:  TSpTBXComboBox7  HWND:  0x902d6
То есть, номера Control'ов меняются, а HWND - остаются прежними.

HWND из Wiki


Чтобы указать контрол через его HWND (window handle, идентификатор окна), оставьте параметр Control пустым и задайте ahk_id %ControlHwnd% как значение параметра WinTitle - это работает также и для скрытых контролов, даже если обнаружение скрытых окон (команда DetectHiddenWindows) не включено. HWND, как правило, узнаётся через команды ControlGet Hwnd, MouseGetPos или DllCall.
[свернуть]

Осталось только разобраться и протестить.

UPD2^
Использование HWND ни к чему не привело, так как с каждым запуском оно другое. Остаются лишь постоянными 6 и 7, или 4 и 5 - в зависимости от того что вперед было запущено.

Последний раз редактировалось skromvit; 18.01.2022 в 00:00. Причина: Дополнение
skromvit вне форума   Ответить с цитированием Вверх
Старый 18.01.2022, 00:09   #49
sergio1982
Местный
 
Регистрация: 01.09.2019
Сообщений: 424
Сказал(а) спасибо: 52
Поблагодарили 480 раз(а) в 147 сообщениях
Вес репутации: 195
sergio1982 - луч света в тёмном царствеsergio1982 - луч света в тёмном царствеsergio1982 - луч света в тёмном царствеsergio1982 - луч света в тёмном царствеsergio1982 - луч света в тёмном царстве
По умолчанию

Цитата:
Сообщение от skromvit Посмотреть сообщение
То есть, номера Control'ов меняются, а HWND - остаются прежними.
Просто меняется родительская иерархия.
Цитата:
Сообщение от skromvit Посмотреть сообщение
Остаются лишь постоянными 6 и 7, или 4 и 5
Это плохое решение, и вы будете периодически сталкиваться с неработоспособностью, например при изменении рабочего стола.
Например, если надо найти нужный TSpTBXComboBox, то можно в начале найти его родителя - TSpTBXToolbar с текстом "Слои", и в нём искать TSpTBXComboBox. Причём если его искать относительно TSpTBXToolbar, а не всего окна, то в нём индекс будет всегда одинаков.
sergio1982 вне форума   Ответить с цитированием Вверх
Старый 18.01.2022, 02:06   #50
sergio1982
Местный
 
Регистрация: 01.09.2019
Сообщений: 424
Сказал(а) спасибо: 52
Поблагодарили 480 раз(а) в 147 сообщениях
Вес репутации: 195
sergio1982 - луч света в тёмном царствеsergio1982 - луч света в тёмном царствеsergio1982 - луч света в тёмном царствеsergio1982 - луч света в тёмном царствеsergio1982 - луч света в тёмном царстве
По умолчанию

Вот рабочий пример. Переключает слои циклично.
Тут указан неизменный TSpTBXComboBox2.

На время теста лучше закомментировать это
Код:
	If Childs[Saveid] && WinExist("ahk_id " Childs[Saveid]) && DllCall("IsWindowVisible", "Ptr", Childs[Saveid])
		Return Childs[Saveid]
так как оно возвращает ранее найденный хэндл.
Станет работать медленнее, но при каждом нажатии будет искать именно TSpTBXComboBox2.

Но в режиме чертения, этот родительский контрол перестраивается, и ComboBox становится 3.


Скрытый текст

PHP код:
#SingleInstance Force
#Persistent
#NoEnv
#UseHook
SetBatchLines -1
ListLines Off 
#KeyHistory 0

#If WinActive("ahk_class TFormMain ahk_exe Bazis_.exe")    
^+Up:: Next_Layer(0)
^+
Down:: Next_Layer(1)
#If

Next_Layer(Next) {
    
hwnd := Control_Child("Next_Layer""TSpTBXToolbar""Слои""TSpTBXComboBox2"
    
SendMessage0x14700, , ahk_id %hwnd%   ; CB_GETCURSEL 
    SelPos 
:= ErrorLevel
    SelPos 
:= SelPos 0xffffffff || SelPos SelPos 1
    SendMessage
0x14600, , ahk_id %hwnd%   ; CB_GETCOUNT 
    COUNT 
:= ErrorLevel 
    
If Next
        NewPos 
:= SelPos COUNT || !SelPos SelPos 1
    
Else 
        
NewPos := SelPos <= COUNT SelPos 1
    Control
Choose, %NewPos%, , ahk_id %hwnd%
}

Control_Child(SaveidparentclassparenttextclassNN) {
    Static 
Childs := {} 
    If 
Childs[Saveid] && WinExist("ahk_id " Childs[Saveid]) && DllCall("IsWindowVisible""Ptr"Childs[Saveid])
        Return 
Childs[Saveid]
    If !
HWND := Control_Find(parentclassparenttext)
        Return 
0
    ControlGet
ChildHWND, , %classNN%, % "ahk_id " HWND
    
If !Child
        
Return 0
    
Return Childs[Saveid] := Child
}

Control_Find(class, textWin 0) {
    
Win := "ahk_id" (Win ?  Win WinExist("A"))
    
Loop
    
{
        
ControlGetHWNDHWND, , %class%%A_Index%, %Win%  
        If !
HWND
            
Return 
        
If !DllCall("IsWindowVisible""Ptr"HWND)
            Continue
        
ControlGetTextGetText, , % "ahk_id " HWND 
        
If (GetText != text)
            Continue
        Return 
HWND
    
}
    Return 


[свернуть]

Последний раз редактировалось sergio1982; 18.01.2022 в 03:11.
sergio1982 вне форума   Ответить с цитированием Вверх
Ответ

Нижняя навигация
Вернуться   Форум профессиональных мебельщиков PROMEBELclub > Программы для мебельщиков > Программы для конструирования и дизайна мебели > Система БАЗИС > Базис-мебельщик. Скрипты


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Базис-7,"Народный Базис"и Windows-8 sergeyzak18 "НАРОДНЫЙ" базис 23 16.01.2014 00:37


Текущее время: 19:24. Часовой пояс GMT +3.


Powered by vBulletin® Version 3.8.12 by vBS
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
© 2007-2023 PROMEBEL

џндекс.Њетрика