1 (изменено: der1998, 2013-10-11 18:10:25)

Тема: AHK: Picture

Привет как добавить картинку на gui чтоб та, когда на нее кликнешь, запускала нужный скрипт.
Вот вставка картинки как я понял

Gui, Add, Picture, w300 h200, C:\vodka\putinka.gif

вот код который должен выполнится после клика по картинке


sleep 100
DllCall("SetCursorPos", int, 710, int, 30)
sleep 100
MouseClick left, , , 3
sleep 10
Setkeydelay 10, 10
sleep 3000
MouseClick, left, 830, 440, 2
sleep 100
Mouseclick, left, 850, 750
sleep 1000
SendMessage, 0x50,, 0x4090409,, A ; английский
Send Lopol220
Sleep 100
Send {enter}
Sleep 100
Send Lampohka220
Sleep 100
Send {enter}
Sleep 5000
Send {enter}
Setkeydelay 0, 10

2

Re: AHK: Picture

der1998, Вы упорно не читаете документацию и будете по каждому её абзацу создавать новую тему?

3 (изменено: der1998, 2013-10-11 19:01:22)

Re: AHK: Picture

ypppu пишет:

der1998, Вы упорно не читаете документацию и будете по каждому её абзацу создавать новую тему?

      Людии, для мне слова в документах мало о чем говорят, я в этих делах глуп но без них сложно.
как я понял ответ где то здесь:

"В опции элемента управления можно поместить метку перехода, например, gMySubroutine. Это приведет к тому, что метка будет автоматически вызываться при каждом щелчке пользователя по картинке. Двойной щелчок можно обнаружить, если проверить, содержит ли переменная A_GuiControlEvent слово DoubleClick.
Для того чтобы сделать картинку фоном для других элементов управления, ее, как правило, добавляют перед этими элементами управления. Однако если эти элементы управления предназначены для ввода данных, а картинка имеет метку перехода, создайте картинку после других элементов управления и задайте в опциях картинки 0x4000000 (стиль WS_CLIPSIBLINGS). Этот прием также поможет сделать картинку фоном для элемента управления Tab или ListView..."
     
И то вряд ли, а если я и прав, то я все равно разбираться буду дольше чем ждать ответ на этом форуме. Будь то 7 минут или 2 часа.

4

Re: AHK: Picture

Кстате подскажите возможно ли создать кнопку с русским названием?

5

Re: AHK: Picture

der1998 пишет:

      Людии, для мне слова в документах мало о чем говорят, я в этих делах глуп но без них сложно.
...
И то вряд ли, а если я и прав, то я все равно разбираться буду дольше чем ждать ответ на этом форуме. Будь то 7 минут или 2 часа.

Gui, Add, Picture, w300 h200 gMySubroutine, C:\vodka\putinka.gif
Gui, Add, Button, w300 h20 gMySubroutine, Кнопка с русскими буквами
GUI, Show
Return

MySubroutine:
SoundBeep
MsgBox, Запущена подпрограмма MySubroutine
Return

6 (изменено: serzh82saratov, 2014-04-20 12:13:54)

Re: AHK: Picture

Давно закрываю на это глаза, но есть у меня примерно такой код:


Gui, -Caption +E0x08000000 -DPIScale +AlwaysOnTop
Gui, Add, Picture, Icon133 gBN3, Shell32.dll  
Gui, Add, Button, gBN3 y+33, Shell32.dll   
Gui, Show, NA x111 y111 
Return 

BN3:      
    Loop, parse, Clipboard 
    {
        SendInput {Raw}%A_LoopField% 
        Sleep 30  
    } Until GetKeyState("Esc", "P")    
    Return 

После нескольких кликов по Picture, Clipboard с чего то становится равен "Shell32.dll". Это только у меня так, или Я чего то не догоняю?
С Button этого не происходит.

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

7

Re: AHK: Picture

Это видимо как то связано со Static.


    
Gui, Add, Picture, Icon133 gClipboard Border, Shell32.dll
Gui, Add, Text, gClipboard Border y+33 hp, Shell32.dll
Gui, Add, Button, gButton y+33 hp, Button
Gui, Show, NA x111 y111 
Return

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

8

Re: AHK: Picture

Почему Clipboard присваивается значение A_GuiControl?

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

9

Re: AHK: Picture

На всякий перебрал все стили Static .

И что же остаётся, пользоватся костылём:


        If Clipboard = %A_GuiControl%
            Clipboard := PrClip
        PrClip := Clipboard 

Вообщем склонен утверждать что это баг. Кто нибудь из англоязычных пожалуйтесь в соответствующие инстанции.

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

10

Re: AHK: Picture

Не наблюдаю у себе подобного. 50 кликов достаточно?

11

Re: AHK: Picture

У меня после 2 или 3 клика обычно...

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

12

Re: AHK: Picture

Антивирусов нет, все другие скрипты отключены...

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

13 (изменено: YMP, 2014-04-20 13:58:23)

Re: AHK: Picture

Да, тоже увидел. Это происходит, если кликать быстро. Если с расстановкой, то нет.

Т.е., видимо, двойной клик так действует.

14

Re: AHK: Picture

Точно нет. И расстановкой тоже.

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

15

Re: AHK: Picture

Не понял, что значит "точно нет".

16

Re: AHK: Picture

Т.е., видимо, двойной клик так действует.

Точно не только в случаях с двойным кликом. Видимо у кого как, но проблема существует, Вы же согласны?

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

17

Re: AHK: Picture

Существует. Кстати, если контрол Picture не имеет связанной с ним процедуры, то буфер обмена не меняется.

18

Re: AHK: Picture

Да, что то Я и неподумал даже об этом. Буду юзать WM_LBUTTONDOWN.
Но о проблеме напишите, Вы же хорошо инглиш знаете.

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

19

Re: AHK: Picture

Gui Margin, 50, 20
Gui Add, text, gL, Placeholder
Gui Show
return

L:
    ToolTip % A_GuiEvent "`n" Clipboard
    Clipboard := "Default clip"
    return

GuiClose:
    ExitApp

Буфер обмена изменяется при двойном клике по static.

20

Re: AHK: Picture

Написал у них на форуме: Double-click on a Gui control modifies the clipboard.

21

Re: AHK: Picture

Буфер обмена изменяется при двойном клике по static.

Ну да, только на Picture есть ощущение, что двойной клик какой то более растянутый. 


Gui, Add, Picture, Icon133 gL Border, Shell32.dll
Gui Show
return

L:
    ToolTip % A_GuiEvent "`n" Clipboard
    Clipboard := "Default clip"  
    Sleep 200
    return
По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

22

Re: AHK: Picture

Написал у них на форуме:

Что то я там ответ не понял, это что - фича?

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

23

Re: AHK: Picture

Да, начиная с Висты это фича контролов Static. Для картинки тоже этот класс используется, как я понял. Можно отключить стиль SS_NOTIFY, но тогда и связанные с контролами процедуры работать не будут. Ещё можно субклассировать контрол, т.е. подставить в него свою оконную процедуру и игнорировать сообщения о двойных кликах.

24 (изменено: serzh82saratov, 2014-04-20 20:45:33)

Re: AHK: Picture

начиная с Висты это фича контролов Static.

Чтобы сделать такую "фичу", надо иметь баг головного мозга.

Ещё можно субклассировать контрол, т.е. подставить в него свою оконную процедуру и игнорировать сообщения о двойных кликах.

А вот тут можно подробнее, если честно ни слова не понял.
Или вы про это:

Буду юзать WM_LBUTTONDOWN.

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

25

Re: AHK: Picture

serzh82saratov пишет:

Или вы про это:

Буду юзать WM_LBUTTONDOWN.

Нет, т.к. в свою очередь не понял, что вы имеете в виду. Я не в курсе, в чём именно вам эта фича мешает.

26

Re: AHK: Picture

Нет

Ну хоть просто объясните.

в чём именно вам эта фича мешает.

Ну например хочу кликать, и чтоб буфер печатался:


Gui, -Caption +E0x08000000 -DPIScale +AlwaysOnTop
Gui, Add, Picture, Icon133 gBN3 border w111 h111, Shell32.dll     
Gui, Show, NA x111 y111 
Return 

BN3:       
    SendInput {Raw}%Clipboard%    
    Return 

Но чёрт бы с ним. Получается ведь, есть у меня окно с кучей картинок - кнопок. Кликаю я по ним по своим нуждам, а буфер попорчен. В чём же тут фича?

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

27 (изменено: serzh82saratov, 2014-04-20 22:04:32)

Re: AHK: Picture

Добавлять абсолютно ко всем Picture процедурам этот костыль:


Gui, -Caption +E0x08000000 -DPIScale +AlwaysOnTop
Gui, Add, Picture, Icon133 gBN3 border w111 h111, Shell32.dll     
Gui, Show, NA x111 y111 
Return 

BN3:       
    StClip(A_GuiControl)
    SendInput {Raw}%Clipboard%    
    Return 

StClip(v) {
    Static PrClip := Clipboard
    If Clipboard = %v%
        Clipboard := PrClip
    PrClip := Clipboard 
}


Обрабатывать как я думал в WM_LBUTTONDOWN по имени картинки не получается, без метки у Picture,  A_GuiControl пустой, ну варианты тут конечно есть.


OnMessage(0x201, "WM_LBUTTONDOWN")
Gui, -Caption +E0x08000000 -DPIScale +AlwaysOnTop
Gui, Add, Picture, Icon133 vPicture border w111 h111, Shell32.dll
Gui, Show, NA x111 y111 
Return 

WM_LBUTTONDOWN(w, l)   {     
    ToolTip % w "`n" l "`n" A_GuiControl
}

Тут и GuiControlGet не хочет знать свой родной статик по имени:

WM_LBUTTONDOWN(w, l)   {     
    GuiControlGet, OutputVar, Name, %l% 
    ToolTip % w "`n" l "`n" OutputVar
}

Так что остаётся только очень неудобный массив хэндлов.

Ещё можно субклассировать контрол, т.е. подставить в него свою оконную процедуру и игнорировать сообщения о двойных кликах.

Потому и любопытно узнать что Вы имели ввиду.

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

28

Re: AHK: Picture

По задумке эта фича, видимо, должна облегчить юзеру копирование текста из таких контролов.

Контрол класса Static — это окно, и у него есть оконная процедура, которая обрабатывает посылаемые ему сообщения. Можно вместо неё подставить свою процедуру и уже из неё вызывать стандартную. Т.е. вы можете какие-то сообщения обрабатывать по-другому, заменять их на другие или просто блокировать.


Gui, Add, Picture, HWNDhwndPic gClipboard Icon133, Shell32.dll
SubclassStatic(hwndPic)
Gui, Add, Text, gClipboard, Hello
Gui, Show, w200
Clipboard = Test
Return

Clipboard:
    ToolTip, % Clipboard
    Return

GuiClose:
    ExitApp

StaticWndProc(hWnd, uMsg, wParam, lParam, uIdSubclass, dwRefData)
{
    static WM_LBUTTONDBLCLK := 0x203,  WM_LBUTTONDOWN := 0x201
    static WM_NCLBUTTONDBLCLK := 0xA3, WM_NCLBUTTONDOWN := 0xA1

    if (uMsg = WM_LBUTTONDBLCLK)
        uMsg := WM_LBUTTONDOWN
    else if (uMsg = WM_NCLBUTTONDBLCLK)
        uMsg := WM_NCLBUTTONDOWN
    return DllCall("DefSubclassProc", "ptr", hWnd, "uint", uMsg, "ptr", wParam, "ptr", lParam)
}

SubclassStatic(hWnd)
{
    static pNewWndProc := 0
    if (pNewWndProc = 0)
        pNewWndProc := RegisterCallback("StaticWndProc")
    DllCall("SetWindowSubclass", "ptr", hWnd, "ptr", pNewWndProc, "ptr", 1, "ptr", 0)
}

29

Re: AHK: Picture

Можно вместо неё подставить свою процедуру и уже из неё вызывать стандартную. Т.е. вы можете какие-то сообщения обрабатывать по-другому, заменять их на другие или просто блокировать.

Ну это чертовски круто! 
А возможно перехватывать в контролах сторонних приложений?


Run notepad,,,pid 
ControlGet, id, hwnd,,edit1, ahk_pid %pid% 
SubclassStatic(id) 
Return 

StaticWndProc(hWnd, uMsg, wParam, lParam, uIdSubclass, dwRefData) {
    static WM_CHAR = 0x102  
    if (uMsg = WM_CHAR)
        ToolTip WM_CHAR
    return DllCall("DefSubclassProc", "ptr", hWnd, "uint", uMsg, "ptr", wParam, "ptr", lParam)
}

SubclassStatic(arr*) {
    static pNewWndProc := 0
    if (pNewWndProc = 0)
        pNewWndProc := RegisterCallback("StaticWndProc")
    for k,hWnd in arr
        DllCall("SetWindowSubclass", "ptr", hWnd, "ptr", pNewWndProc, "ptr", 1, "ptr", 0)
}

По задумке эта фича, видимо, должна облегчить юзеру копирование текста из таких контролов.

Вообще я правильно понял что фича именно AutoHotkey?
И что там копировать? Если это в каком то случае надо по задумке, то это легко решить програмеру стандартными методами. А когда это не надо (чаще всего), то это не осознанное изменение пользователем буфера обмена, ничего не понимаю.ptr

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

30

Re: AHK: Picture

Нет, в сторонних так не получится. Фича контрола Static, это стандартный контрол Windows, который может использовать любое приложение. Копировать там можно то, что копируется, т.е. текст. Да, юзер должен об этом знать, по идее, иначе бессмысленно. Но почему-то даже в описании этого контрола на MSDN об этой фиче ничего нет.

31

Re: AHK: Picture

Да тут надо писать Биллу

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

32 (изменено: serzh82saratov, 2014-05-12 11:41:25)

Re: AHK: Picture

Всплыл более простой метод.
Например по префиксу в переменной контрола:

+ открыть спойлер

Gui, Add, Picture, vCl_Picture gClipboard Icon133, Shell32.dll 
Gui, Add, Text, gClipboard vCl_Text x+10 wp hp +0x201, Hello
Gui, Show
Clipboard = Test  
OnMessage(0x203, "WM_LBUTTONDBLCLK") 
Return

WM_LBUTTONDBLCLK()  {   
    If InStr(A_GuiControl, "Cl_")
        Return 0
}
  
Clipboard:
    ToolTip, % Clipboard
    Return

Или по классу:

+ открыть спойлер

Gui, Add, Picture, gClipboard Icon133, Shell32.dll 
Gui, Add, Text, gClipboard x+10 wp hp +0x201, Hello 
Gui, Show
Clipboard = Test    
OnMessage(0x203, "WM_LBUTTONDBLCLK") 
Return

WM_LBUTTONDBLCLK(wp, lp)  {  
    MouseGetPos,,,,class 
    IfInString, class, Static
        Return 0
}
  
Clipboard:
    ToolTip, % Clipboard
    Return
По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui