Что нового

Фиксированный элемент в GuiCtrlCreateCombo после сортировки.

La2Angel

Новичок
Сообщения
156
Репутация
1
В общем как сделать фиксированный элемент в Combo после сортировки ?

Код:
$Combo = GUICtrlCreateCombo('Все',380,50,200,20,BitOR($CBS_DROPDOWNLIST,$WS_VSCROLL,$CBS_SORT))
GuiCtrlSetData($Combo,'Привет')
GuiCtrlSetData($Combo,'Как')
GuiCtrlSetData($Combo,'Пока')
GuiCtrlSetData($Combo,'Ангел')


Опция сортировки нужна.
После сортировки естественно выглядит так:
Код:
Ангел
Все
Как
Пока
Привет
А нужно так:
Код:
Все - должна быть всегда первая, а остальное сортировать.
Ангел
Как
Пока
Привет
 

InnI

AutoIT Гуру
Сообщения
4,982
Репутация
1,460
Можно назвать пункт с учётом сортировки: добавить пробел, табуляцию, подчёркивание, спецсимволы.
" Все", @TAB & "Все", "_Все_", "< Все >"
 
Автор
L

La2Angel

Новичок
Сообщения
156
Репутация
1
Чего-то я не понял или вы меня не поняли. Там работает стандартный стиль - $CBS_SORT, т.е. не функцией сортирую, а по уже заложенным.
 

InnI

AutoIT Гуру
Сообщения
4,982
Репутация
1,460
Я об этом и пишу. Спецсимволы в таблице находятся раньше цифр и букв. Поэтому при сортировке этот пункт будет первым. К тому же спецсимволы визуально выделяют пункт, намекая, что этот пункт не такой, как другие.
 

Zaramot

I ♥ AutoIt
Сообщения
1,160
Репутация
660
Пример:
Код:
#include <GuiComboBoxEx.au3>

$Form1 = GUICreate('')
$Combo = GUICtrlCreateCombo('111111', 50, 50, 200)
GUICtrlSetData(-1, '22222222|3333333')
GUISetState()

ControlCommand($Form1, '', $Combo, 'SetCurrentSelection', 2) ;<---------

Do
Until GUIGetMsg() = -3
 
Автор
L

La2Angel

Новичок
Сообщения
156
Репутация
1
Не, не то, сортировки ноль, да и это лишь всего указывает что выделить нужно, а мне нужно что бы к примеру "Все" Находилась выше всех, но остальные отсортированы.
Мб не так выразился, но мне нужно не выбирать его постоянно, а что бы "Все" просто находилась выше всех, в любом случае.
 

Zaramot

I ♥ AutoIt
Сообщения
1,160
Репутация
660
OffTopic:
Значит я тебя не правельно понел.
 
Автор
L

La2Angel

Новичок
Сообщения
156
Репутация
1
Решения так и нету ?


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

Всем спасибо, решил проблему иначе:
Сначала загнал лист в массив, после отсортировал массив и вывел его в Combo (А в Combo изначально первой выставил "Все").

Код:
$file = FileOpen($FileBd2)
For $i = 1 To _FileCountLines($FileBd2)
	ReDim $MasAutor[$i]
	$MasAutor[$i-1] = FileReadLine($file,$i)
Next
_ArraySort($MasAutor)

For $i = 1 To UBound($MasAutor)
	GUICtrlSetData($Combo,$MasAutor[$i-1])
Next
FileClose($file)



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

Если кто-то знает пути легче, помогите, я еще плоховато знаю AutoIt :smile:
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,673
Репутация
2,487
La2Angel [?]
Если кто-то знает пути легче

Код:
#include <GUIConstantsEx.au3>
#include <ComboConstants.au3>
#include <WindowsConstants.au3>
#include <GUIComboBox.au3>

$hGUI = GUICreate('Test Script', 600, 400)

$Combo = GUICtrlCreateCombo('', 380, 50, 200, 20, BitOR($CBS_DROPDOWNLIST, $WS_VSCROLL, $CBS_SORT))
GUICtrlSetData($Combo, 'Все|Привет|Как|Пока|Ангел')

_GUICtrlComboBox_SetStringPos($Combo, 'Все', 0)

GUISetState(@SW_SHOW, $hGUI)

While 1
	$nMsg = GUIGetMsg()
	
	Switch $nMsg
		Case $GUI_EVENT_CLOSE
			Exit
	EndSwitch
WEnd

Func _GUICtrlComboBox_SetStringPos($hCombo, $sString, $iPos = 0)
	Local $iIndex = _GUICtrlComboBox_FindStringExact($hCombo, $sString)
	_GUICtrlComboBox_DeleteString($hCombo, $iIndex)
	_GUICtrlComboBox_InsertString($hCombo, $sString, $iPos)
	_GUICtrlComboBox_SelectString($hCombo, $sString)
EndFunc
 
Автор
L

La2Angel

Новичок
Сообщения
156
Репутация
1
Большое спасибо, сэкономил пару строчек (очень полезно когда большая программа, да и по правильности выражения своей мысли), а чего-то я таких не видел функций в справке...
 
Верх