Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Компоненты Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.02.2007, 10:48   #11
SSM
Новичок
Джуниор
 
Регистрация: 15.02.2007
Сообщений: 2
По умолчанию

у меня такая же версия, все работает. попробуй удалить .dcu и перекомпилируй проект. иногда помогает.
SSM вне форума Ответить с цитированием
Старый 27.02.2007, 11:39   #12
pinhead
Пользователь
 
Аватар для pinhead
 
Регистрация: 08.12.2006
Сообщений: 36
По умолчанию

Не знаю, у меня Build 4.453 Всё работает!
А в чём проблема, ставь вместо пустых строк пробел (ведь это символ) .
Знание этого – Мудрость.
Умение этим пользоваться – Искусство.
pinhead вне форума Ответить с цитированием
Старый 27.02.2007, 14:05   #13
Plague
Забанен
Форумчанин Подтвердите свой е-майл
 
Аватар для Plague
 
Регистрация: 01.11.2006
Сообщений: 420
По умолчанию

У меня тоже Borland Delphi 7.0 Build 4.453.
Дома на одном компьютере работает нормально,
а на другом есть этот глюк.
Правда разные маздаи стоят на них...

Причем если создаешь приложение CLX
все работает нормально и там и там...
Если ничто другое не помогает, прочтите, наконец, инструкцию! Аксиома Кана

Последний раз редактировалось Plague; 27.02.2007 в 14:17.
Plague вне форума Ответить с цитированием
Старый 01.03.2007, 23:17   #14
And1
Пользователь
 
Регистрация: 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.
And1 вне форума Ответить с цитированием
Старый 02.03.2007, 06:33   #15
SuperVisor
Павел Сергеевич
Форумчанин
 
Регистрация: 05.11.2006
Сообщений: 665
По умолчанию

И еще раз:
Цитата:
Сообщение от Plague Посмотреть сообщение
У меня тоже Borland Delphi 7.0 Build 4.453.
Дома на одном компьютере работает нормально,
а на другом есть этот глюк.
Правда разные маздаи стоят на них...

Причем если создаешь приложение CLX
все работает нормально и там и там...
У меня тоже Borland Delphi 7.0 Enterprise Build 4.453 и все работет!!!! Вот выдержка из StdCtrls:
Код:
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;
Отсюда вывод: Либо сносим свою винду, либо переделываем свою прогу под CLX...
Познавая других, мы познаем себя.
С'est la vie...
SuperVisor вне форума Ответить с цитированием
Старый 02.03.2007, 07:40   #16
Plague
Забанен
Форумчанин Подтвердите свой е-майл
 
Аватар для Plague
 
Регистрация: 01.11.2006
Сообщений: 420
По умолчанию

XPManifest кидаешь на форму
или оформление делаешь стиль Windows
глюк изчезает.
только еще не понял в чем проблема.
Если ничто другое не помогает, прочтите, наконец, инструкцию! Аксиома Кана
Plague вне форума Ответить с цитированием
Старый 03.03.2007, 00:21   #17
And1
Пользователь
 
Регистрация: 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 или нет, т.е. стоит ли пытаться его искать в продаже?
And1 вне форума Ответить с цитированием
Старый 03.03.2007, 01:00   #18
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Чтой-то я не нашел у борланда на сайте (его собственным поиском, причем) никакого Delphi 7.1.
Был еще в 2004 году апдейт 7.1 к семерке, но на него страшно ругались люди...

Последний раз редактировалось mihali4; 03.03.2007 в 01:13.
mihali4 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
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