1

Тема: AHK : DropDownList

Приветствую, возник вопрос.
Как из элемента drowdownlist можно удалить/добавить новые столбцы |slot1|slo2| и.т.д?
Идея как например регулярным выражением, но возможно есть другой способ?

2

Re: AHK : DropDownList

Не совсем понятно, в чём вопрос. Как добавлять или заменять элементы в списке DDL описано в GuiControl, Tab/DropDownList/ComboBox/ListBox.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Skype dmitry_fiveg

3

Re: AHK : DropDownList

teadrinker
В общем понятно, как либо редактировать DDL можно лишь через guicontrol вписывая уже готовый вариант отображаемых элементов.
Если мне из |1|2|3|4| нужно убрать "3"
Через guicontrol переписываю все столбцы, а именно |1|2|4|

4

Re: AHK : DropDownList

Я так и не понял, в чём заключается вопрос.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Skype dmitry_fiveg

5

Re: AHK : DropDownList

teadrinker
Я хотел узнать, как можно удалять/добавлять элементы в DDL.

6

Re: AHK : DropDownList

Так вы не поняли статью в хэлпе?

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Skype dmitry_fiveg

7

Re: AHK : DropDownList

teadrinker
Я как раз в 3-м сообщении и написал как это реализовывается через guicontrol.

8

Re: AHK : DropDownList

То-есть, всё понятно теперь?

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Skype dmitry_fiveg

9

Re: AHK : DropDownList

teadrinker
В общих чертах, если ничего лучше предложить нет конечно.

10

Re: AHK : DropDownList

А чем этот вариант не устраивает?

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Skype dmitry_fiveg

11

Re: AHK : DropDownList

teadrinker
Да мне не нравится что мы каждый раз переписываем целую DDL, вместо нужного элемента. Но похоже без этого никак.

12

Re: AHK : DropDownList

Так это надо весь список переписывать.


Gui, Add, DropDownList, hwndhDDL, Colors||White|Red|Green|Blue
Gui, Show

Sleep 1000
ItemIndex = 1
SendMessage, 0x0144, ItemIndex - 1, , , ahk_id %hDDL%  ;  CB_DELETESTRING 
GuiControl, +Redraw, %hDDL%
Sleep 1000
ItemText = Colours list
SendMessage, 0x014A, ItemIndex - 1, &ItemText , , ahk_id %hDDL%  ;  CB_INSERTSTRING
GuiControl, Choose, %hDDL%, % ItemIndex
Return
По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru
OS: Win7x64, AutoHotkey_L v1.1.30.03 (Unicode 32-bit). AhkSpy, Hotkey, ClockGui

13 (изменено: serzh82saratov, 2019-02-26 18:24:53)

Re: AHK : DropDownList

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


Gui, Add, DropDownList, hwndhDDL, Colors||White|Red|Green|Blue
Gui, Show
SendMessage, 0x014F, 1, , , ahk_id %hDDL%   ;	CB_SHOWDROPDOWN
	
Sleep 1000 
ItemText = Colors
SendMessage, 0x158, 1, &ItemText, , ahk_id %hDDL%  ;  CB_FINDSTRINGEXACT
SendMessage, 0x0144, ErrorLevel, , , ahk_id %hDDL%  ;  CB_DELETESTRING
GuiControl, +Redraw, %hDDL%

hDDLList := ComboBoxGetList(hDDL)
WinSet, Redraw, , ahk_id %hDDLList% 

Sleep 1000
ItemIndex = 1
ItemText = Colours list
SendMessage, 0x014A, ItemIndex - 1, &ItemText , , ahk_id %hDDL%  ;  CB_INSERTSTRING
GuiControl, Choose, %hDDL%, % ItemIndex

Sleep 1000
ItemText = Black
ItemIndex = 3
SendMessage, 0x014A, ItemIndex - 1, &ItemText , , ahk_id %hDDL%  ;  CB_INSERTSTRING

ItemText = Orange
SendMessage, 0x143, 0, &ItemText , , ahk_id %hDDL%  ;  CB_ADDSTRING 

Sleep 1000
SendMessage, 0x014F, 0, , , ahk_id %hDDL%   ;	CB_SHOWDROPDOWN
SendMessage, 0x0146, 0, 0, , ahk_id %hDDL%  ;  CB_GETCOUNT 
GuiControl, Choose, %hDDL%, % ErrorLevel
Return

ComboBoxGetList(hCombo) {
	Static SizeOfCBI := 40 + (A_PtrSize * 3)
	VarSetCapacity(CBI, SizeOfCBI, 0) ; COMBOBOXINFO structure - msdn.microsoft.com/en-us/library/bb775798(v=vs.85).aspx
	NumPut(SizeOfCBI, CBI, 0, "UInt")
	DllCall("GetComboBoxInfo", "Ptr", hCombo, "Ptr", &CBI, "Int") ; msdn.microsoft.com/en-us/library/bb775939(v=vs.85).aspx
	Return NumGet(CBI, 40 + A_PtrSize*2, "UPtr")
}
По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru
OS: Win7x64, AutoHotkey_L v1.1.30.03 (Unicode 32-bit). AhkSpy, Hotkey, ClockGui

14

Re: AHK : DropDownList

serzh82saratov
Благодарю, отличный пример!

15

Re: AHK : DropDownList

serzh82saratov
А вот ещё 1 маленький вопрос.

Gui, Add, DropDownList, vasd gdsa hwndhDDL, Colors|AA|White|Red|Green|Blue

Если элемент в DDL выбран, то

msgbox % asd

показывает этот элемент, а как можно отобразить весь список DDL?

16 (изменено: kangar, 2019-02-27 20:32:55)

Re: AHK : DropDownList

serzh82saratov
Остался вопрос выше.

17

Re: AHK : DropDownList

С удалением удивили, пример то отличный.

ControlGet есть даже в русской справке на этом же ресурсе.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru
OS: Win7x64, AutoHotkey_L v1.1.30.03 (Unicode 32-bit). AhkSpy, Hotkey, ClockGui

18

Re: AHK : DropDownList

serzh82saratov
Спасибо ещё один раз

19

Re: AHK : DropDownList

serzh82saratov
Хоть я и получил ответы на мои вопросы, но всё же я не понял сути.
Откуда вы берёте/как пишете sendmessage запросы на манипуляции с ddl/combobox?

Во время написания кода всплыла ещё 1 проблема - как изменять элемент ddl. Конечно, можно считать № строки, удалить и добавить нужную - но ведь можно проще?
Я нашел тему с библиотекой, которая позволяет выполнять все эти действия и более - https://autohotkey.com/board/topic/3116 … functions/
Но библиотеку не скачать - ошибка страницы выдаёт.
Я нашел тему с "Коды оконных сообщений" со справки PostMessage / SendMessage, но там нет и близко таких кодов как 0x014A, 0x143 и 0x0146, что в свою очередь вы использовали при написании примеров ниже.

Подскажите, если не примером, то хоть справкой по этому вопросу.

20

Re: AHK : DropDownList

Тут используются константы, которые можно получить в удобном виде, например, отсюда. В Вашем случае, это список констант для ComboBox.

Программирование — не магия. Всё происходит именно так, как подсказывает логика и когда нужно один компонент заменить на другой, то всегда это происходит, как и в жизни => заменяемый нужно найти, удалить и добавить другой.

serzh82saratov просто пошёл на встречу Вашему любопытству, на самом же деле, Ваши догадки из третьего сообщения наименее заморочены и именно они и используются в подавляющем большинстве. То есть, создаётся новая строка для ДДЛ и через GuiControl заменяется.

21 (изменено: serzh82saratov, 2019-03-02 22:08:39)

Re: AHK : DropDownList

kangar пишет:

Конечно, можно считать № строки, удалить и добавить нужную - но ведь можно проще?

https://github.com/ahkscript/autohotkey … ons/CB.ahk
Там тоже, удаляется и создаётся строка.
Есть некое CB_SETITEMDATA, но я не нашёл примеров, и не уверен что это про то.

АП: считать № строки можно с помощью CB_FINDSTRINGEXACT, номер будет в ErrorLevel, это есть и в примере выше.

Gui, Add, DropDownList, hwndhDDL, Colors||White|Red|Green|Blue
Gui, Show
SendMessage, 0x014F, 1, , , ahk_id %hDDL%   ;	CB_SHOWDROPDOWN

ItemText = White
Loop
{
	Sleep 100
	SendMessage, 0x158, 1, &ItemText, , ahk_id %hDDL%  ;  CB_FINDSTRINGEXACT
	ItemIndex := ErrorLevel
	SendMessage, 0x0144, ItemIndex, , , ahk_id %hDDL%  ;  CB_DELETESTRING
	ItemText := A_TickCount
	SendMessage, 0x014A, ItemIndex, &ItemText , , ahk_id %hDDL%  ;  CB_INSERTSTRING 
}
По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru
OS: Win7x64, AutoHotkey_L v1.1.30.03 (Unicode 32-bit). AhkSpy, Hotkey, ClockGui