Что нового

GUICtrlCreateCombo в ХР и Win 7 - разные результаты.

gora

Знающий
Сообщения
315
Репутация
19
Есть такая программа Universal Extractor написанная на AutoIt. Оф. сайт ее здесь http://www.legroom.net/software/uniextract. Там можно скачать и исходный код.
Проблема в следующем. В настройках программы можно изменить язык интерфейса. Имеется комбобокс с выпадающим списком доступных языковых файлов. На Windows XP этот список содержит все языковые файлы и они доступны для выбора, а в win 7 (х64) этот список выводится в "укороченном" виде. Превые несколько языков не видны в списке и добраться к ним можно только при помощи клавиш курсора, т.к. скролл бар в списке не предусмотрен.
Вопросы:
1 Почему один и тотже код ведет себя по разному на разных системах?
2 Как можно вылечить данный конкретный баг?

Спасибо.
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8 471
Репутация
2 401
gora [?]
Почему один и тотже код ведет себя по разному на разных системах?
Потому что автор не (внимательно?) читал документацию...
Under Windows XP/2003 Windows will adjust the size of the opened combo. On other Windows versions you can define this size with the "height" parameter if the default value is not BIG enough to contain at least one line.
Как можно вылечить данный конкретный баг?
Указать высоту элемента, например 30.


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

gora [?]
Там можно скачать и исходный код
Вообще то оно есть и у нас на форуме: Universal Extractor (мод.) - Универсальный распаковщик
 
Автор
G

gora

Знающий
Сообщения
315
Репутация
19
CreatoR [?]
Указать высоту элемента, например 30.
Там высота указывается (рассчитывается), но эффекта увеличение этого значения не дает.
Код:
global $langselect = GUICtrlCreateCombo("", $langselectpos, 55, 245 - $langselectpos - 4, 20 * CharCount($langlist, '|'), $CBS_DROPDOWNLIST)
Вообще то оно есть и у нас на форуме
Я знаю про эту ветку, но автор там неактивный. ;)
 
Автор
G

gora

Знающий
Сообщения
315
Репутация
19
Экспериментально проверено на win 7 x64:
- CharCount($langlist, '|') правильно определяет число языковых файлов (у меня их 33)
- При числе языковых файлов 29 и менее весь список отображается полностью.
- При увеличении числа языковых файлов до 30 и более список обрезается и содержит только 29 последних позиций, все первые обрезаются.
- Изменение числа 20 в строке 20 * CharCount($langlist, '|') как в меньшую сторону (5, 10) так и в большую (25, 30, 40) не приводит ни к каким изменениям в высоте списка и числе выводимых в нем позиций, оно всегда равно 29.
Может кто-то из специалистов сможет это прокомментировать и подсказать выход из этой ситуации?
Спасибо.
 
Автор
G

gora

Знающий
Сообщения
315
Репутация
19
Как я понял, по отсутствию сообщений в ветке, баг в AutoIt имеет место быть и ни кто не знает способов его исправить!? :(
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8 471
Репутация
2 401
Оно и в XP обрезается, что выдаёт этот пример:

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

_CreateComboGUI((@DesktopWidth / 2) - 300, -1)
_CreateComboGUI((@DesktopWidth / 2) + 80, $CBS_DROPDOWNLIST)

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

Func _CreateComboGUI($iLeft, $nStyle = -1)
	$hGUI = GUICreate("Style: " & $nStyle, 300, 200, $iLeft)
	GUICtrlCreateCombo("", 20, 40, 260, 30, $nStyle)
	
	For $i = 1 To 35
		GUICtrlSetData(-1, "Item" & $i)
	Next
	
	GUISetState(@SW_SHOW, $hGUI)
EndFunc


?

а всё из за того что указанный стиль перезаписывает стили по умолчанию. Нужно так:

Код:
GUICtrlCreateCombo("", 20, 40, 260, 30, BitOr($GUI_SS_DEFAULT_COMBO, $CBS_DROPDOWNLIST)))
 
Автор
G

gora

Знающий
Сообщения
315
Репутация
19
CreatoR сказал(а):
Оно и в XP обрезается
В ХР окно UE не обрезается, видны все 33 языка без скроллбара.
CreatoR сказал(а):
что выдаёт этот пример:
...
?
Этот пример показывает два окна:
- в левом окне есть вертикальный скроллбар и можно увидеть все 35 пунктов
- в правом скроллбара нет и видны только первые 30 пунктов. Правда видны они начиная в первого пункта, а в случае UE видны только последние пункты.

CreatoR сказал(а):
а всё из за того что указанный стиль перезаписывает стили по умолчанию. Нужно так:

Код:
GUICtrlCreateCombo("", 20, 40, 260, 30, BitOr($GUI_SS_DEFAULT_COMBO, $CBS_DROPDOWNLIST)))
Это решило проблему! Правда на ХР скроллбар не появляется (как и было раньше), но там видны все 33 языка сразу, а в win7 появляется скроллбар и все пункты теперь тоже стали доступны.
Большое спасибо, CreatoR. :smile:
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8 471
Репутация
2 401
gora [?]
на ХР скроллбар не появляется
Значит есть какие настройки в системе которые влияют на это, у меня всё видно.


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

gora [?]
ам видны все 33 языка сразу
А ну правильно, это из за «CharCount($langlist, '|')». А в Win7 видимо эти расчёты неправильные, и/или там другой стиль.
 
Автор
G

gora

Знающий
Сообщения
315
Репутация
19
Значит есть какие настройки в системе которые влияют на это, у меня всё видно
Возможно, утверждать ни чего не буду, но умышленно ни чего не менял. Система чистая, установлена на виртуалку.
А в Win7 видимо эти расчёты неправильные
Делал вывод рассчитываемого числа в окно для отладки - число выводится правильное.
и/или там другой стиль.
Возможно, я в AutoIt новичок.
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8 471
Репутация
2 401
gora [?]
Делал вывод рассчитываемого числа в окно для отладки - число выводится правильное.
Правильное в сравнений с теми что выводится на XP? ну для XP оно правильное, а для Win7 нет :smile: А отсюда следует сделать вывод - расчёт неправильный (не уникальный, т.е не учитывает все возможности рабочей среды).
 
Автор
G

gora

Знающий
Сообщения
315
Репутация
19
CreatoR сказал(а):
Правильное в сравнений с теми что выводится на XP? ну для XP оно правильное, а для Win7 нет :smile: А отсюда следует сделать вывод - расчёт неправильный (не уникальный, т.е не учитывает все возможности рабочей среды).
Это Вы что-то мудрено выразились. Правильное - значит соответствующее числу языковых файлов и одинаковое в ХР и Win7.
Это на Win7 x64, на ХР та же величина (думаю поверите на слово).

 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8 471
Репутация
2 401
gora [?]
Правильное - значит соответствующее числу языковых файлов и одинаковое в ХР и Win7
Это неправильное сравнение. Оно может и соответствует, но не подходит для обеих систем, а это не правильное программирование.
 
Автор
G

gora

Знающий
Сообщения
315
Репутация
19
CreatoR сказал(а):
Это неправильное сравнение. Оно может и соответствует, но не подходит для обеих систем, а это не правильное программирование.
Отсюда делаю вывод - программа, работающая на одной системе, может не работать (работать не правильно) на другой системе... Спасибо за разъяснение.
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8 471
Репутация
2 401
gora [?]
Отсюда делаю вывод - программа, работающая на одной системе, может не работать (работать не правильно) на другой системе
Вот именно, и всё зависит от того, учёл ли автор все переменные факторы.
 
Верх