|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
27.02.2007, 10:48 | #11 |
Новичок
Джуниор
Регистрация: 15.02.2007
Сообщений: 2
|
у меня такая же версия, все работает. попробуй удалить .dcu и перекомпилируй проект. иногда помогает.
|
27.02.2007, 11:39 | #12 |
Пользователь
Регистрация: 08.12.2006
Сообщений: 36
|
Не знаю, у меня Build 4.453 Всё работает!
А в чём проблема, ставь вместо пустых строк пробел (ведь это символ) .
Знание этого – Мудрость.
Умение этим пользоваться – Искусство. |
27.02.2007, 14:05 | #13 |
Забанен
Форумчанин Подтвердите свой е-майл
Регистрация: 01.11.2006
Сообщений: 420
|
У меня тоже Borland Delphi 7.0 Build 4.453.
Дома на одном компьютере работает нормально, а на другом есть этот глюк. Правда разные маздаи стоят на них... Причем если создаешь приложение CLX все работает нормально и там и там...
Если ничто другое не помогает, прочтите, наконец, инструкцию! Аксиома Кана
Последний раз редактировалось Plague; 27.02.2007 в 14:17. |
01.03.2007, 23:17 | #14 |
Пользователь
Регистрация: 18.02.2007
Сообщений: 10
|
Глюк обнаружен
Удалось мне выявить место, где происходит глюк. Это происходит при любой попытке чтения пустой строки из свойства Items[index] комбобокса. Последняя просьба - кто-нибудь, у кого такого глюка нет в версии Delphi7.0 build 4.453, опубликуйте здесь код метода чтения из свойства Items[index] комбобокса из вашего Delphi. Он находится в модуле "StdCtrls". Вот код из моей версии Delphi:
function TCustomComboBoxStrings.Get(Index: Integer): string; var Len: Integer; begin Len := SendMessage(ComboBox.Handle, CB_GETLBTEXTLEN, Index, 0); if Len <> CB_ERR then begin SetLength(Result, Len); SendMessage(ComboBox.Handle, CB_GETLBTEXT, Index, Longint(PChar(Result))); end else SetLength(Result, 0); end; Насколько я понимаю, ошибка происходит потому, что константа CB_ERR равна "-1", и соответсвенно для чтения путой строки (т.е. с длиной, равной нулю), тоже выполняется SendMessage сообщения CB_GETLBTEXT, а это сообщение записывает в переменную Result строку с признаком конца строки в конце (т.е. с байтом $0). Таким образом, если читается пустая строка, в Result записывается только байт $0, но перед этим-то длина Result устанавливается в 0, так что получается что байт $0 записывается в адрес 00000000. ПО идее, для устранения ошибки нужно чтобы было "if ((Len <> CB_ERR) and (Len <> 0)) then" вместо "if Len <> CB_ERR then". ПОчему я прошу опубликовать код из безглючной версии Delphi? - да чтобы просто убедиться, что такая существует и что дело на 100% в этом - тогда мне только останется озабоиться поиском таковой версии Delphi. Можно ли, кстати, как-то внести исправления в Delphi самому? Последний раз редактировалось And1; 01.03.2007 в 23:21. |
02.03.2007, 06:33 | #15 | |
Павел Сергеевич
Форумчанин
Регистрация: 05.11.2006
Сообщений: 665
|
И еще раз:
Цитата:
Код:
Познавая других, мы познаем себя.
С'est la vie... |
|
02.03.2007, 07:40 | #16 |
Забанен
Форумчанин Подтвердите свой е-майл
Регистрация: 01.11.2006
Сообщений: 420
|
XPManifest кидаешь на форму
или оформление делаешь стиль Windows глюк изчезает. только еще не понял в чем проблема.
Если ничто другое не помогает, прочтите, наконец, инструкцию! Аксиома Кана
|
03.03.2007, 00:21 | #17 |
Пользователь
Регистрация: 18.02.2007
Сообщений: 10
|
Всё о том же
Отвечаю SuperVisor
Похоже тема про этот глюк никогда не закончится. Предложение снести свою винду на мой взгляд не имеет смысла, потому что я ставил Delphi7 c двух разных дисков на два разных компа, и результат был один и тот же. Я делаю прогу не для себя, так что она должна устойчиво работать на любом компе, а не только конкретно на моём. Насчёт CLX - я не силён в терминологоии, хотелось бы знать, что имеется в виду. Вообще, есть ли на этом форуме сильно профессиональные программисты, которые однозначно могли бы сказать, должен ли следующий код: SendMessage(ComboBox.Handle, CB_GETLBTEXT, Index, Longint(PChar(Result))); однозначно приводить к ошибке при чтении пустой строки в строку Result нулевой длинны, если учесть что при этом в Result записывается байт $0, или это не является ошибкой (у меня исключение генерируется именно при исполнении этой строки, и на мой взгляд это не может не быть ошибкой, ведь под строку Result не выделяется память, но байт $0 в PChar(Result) всё равно записывается). Отвечаю Plague Я поэксперементировал с XPManimest, и оказалось, что для устранения глюка достаточно взять не сам этот компонент, а всего одну строку из его модуля: "{$R WindowsXP.res}". Однако это не устраняет сам глюк, а просто вообще перестаёт выскакивать окно с сообщением о генерации исключения в ответ на отсылку сообщения "CB_GETLBTEXT", даже если в качестве LParam подсовывать совершенно левые адреса - я например попробовал задать такое "(Longint(PChar(Result))+100000 0), и ничего, тишина, никаких исключений. Это вобщем-то было бы приемлемо, но строка "{$R WindowsXP.res}" к сожалению приводит к возникновению проблем в моей проге совсем в другом месте, где их раньше небыло вовсе, так что мне это к сожалению не подходит. (Кстати, что значит "разные маздаи"? - я не знаком с программёрским слэнгом). Отвечаю pinhead Предложение заменять пустую строку на пробел в моём случае неприемлемо - слишком многое придётся изменять. Более подробно объяснять не буду, а то итак пишу слишком много, народ наверное напрягает всё это читать. Да и вообще, мне конечно хотелось бы разобраться в причинах этой проблемы и устранить её радикально, а не обходиться полумерами - так по-моему правильней и надёжнее. Люди, на сайте Borland вроде есть обновление Delphi7 до версии 7.1, но для осуществления обновления нужно вводить какой-то код, так что облом. Никто не знает, продаётся ли Delphi7.1 или нет, т.е. стоит ли пытаться его искать в продаже? |
03.03.2007, 01:00 | #18 |
*
Старожил
Регистрация: 22.11.2006
Сообщений: 9,201
|
Чтой-то я не нашел у борланда на сайте (его собственным поиском, причем) никакого Delphi 7.1.
Был еще в 2004 году апдейт 7.1 к семерке, но на него страшно ругались люди... Последний раз редактировалось mihali4; 03.03.2007 в 01:13. |
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
TComboBox (ввод чисел в верхнюю позицию) | Petrucci | Общие вопросы Delphi | 7 | 08.07.2008 14:26 |
TComboBox! | samlay | Общие вопросы Delphi | 8 | 03.07.2008 22:11 |
TCombobox | kalyan_ne_@ | Компоненты Delphi | 10 | 13.05.2008 09:44 |
..TComboBox.. | Ensoph | Компоненты Delphi | 5 | 29.06.2007 16:36 |