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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 25.09.2014, 07:58   #1
AnTe
Форумчанин
 
Регистрация: 25.09.2008
Сообщений: 209
По умолчанию Delphi7 -> Embarcadero и TBitBtn

Как выяснилось, в embarcadero после D7 изменена структура классов в стандартных объектов

в частности, проблема коснулась класса TBitBtn:

было TCustomButton->TButton->TBitBtn, теперь TBitBtn напрямую наследуется от TCustomButton

В одном из проектов у меня процедуры на вход принимает кнопки произвольного типа, и «Sender as TButton» и тому подобное по всему коду размазано. Получается, ошибки выпадают только в рантайме, к тому же иногда точно не известно, какого типа придёт Sender в процедуру, Button или TButton, приходится вбивать кучу ветвлений, в общем, местами в ступоре, что делать. Приводить к TCustomButton нельзя - нет нужных полей.

Структуру классов от версии к версии поменять – жесть какая-то. Кто-нибудь сталкивался с этими проблемами? Быть может, где-то написаны какие-нибудь интересные пути решения, ну или просто хотелось бы знать, каких ещё проблем такого рода ожидать.
AnTe вне форума Ответить с цитированием
Старый 25.09.2014, 08:57   #2
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

Чем проще сделан GUI, тем меньше проблем - привычка, выработанная годами.
Как вариант - заменить в прожэкте все TBitBtn на TButton. Если это возможно, конечно.
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 25.09.2014, 13:53   #3
AnTe
Форумчанин
 
Регистрация: 25.09.2008
Сообщений: 209
По умолчанию

Проще низзя - программа пишется для удобства юзеров прежде всего! Да собс-но всё работало, даже при спонтанно-кривой реализации MVC

Цитата:
Как вариант - заменить в прожэкте все TBitBtn на TButton
тогда уж наоборот, кнопы с иконками куда смотрибельней

вообще, по-моему, глупость в принципе делать кнопку с иконкой как отдельный объект, свойство "Glyph" должно быть у любой кнопки! В упор не понимаю, зачем TButton был выделен как отдельный класс, во всех книгах и примерах упоминают именно его, и главное - на панели инструментов он просто в глаза бросается.

В результате - на десятках форм прожекта расположены кнопы TButton и TBitBtn вперемешку. Вполне естесственно, что были написаны "обобщающие" функции, которые разместились в десятках процедур, и вот тут на тебе такая засада: вместо того, чтобы приравнять TButton и TBitBtn - их разделили в разные ветки иерархии классов!

идиотизм какой-то, другого слова не подберу
AnTe вне форума Ответить с цитированием
Старый 25.09.2014, 14:14   #4
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

Цитата:
идиотизм какой-то, другого слова не подберу
Напиши жалобу в спортлото Embarcadero!
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 25.09.2014, 14:15   #5
FaTaL
Участник клуба
 
Аватар для FaTaL
 
Регистрация: 09.11.2007
Сообщений: 1,761
По умолчанию

Цитата:
Сообщение от AnTe Посмотреть сообщение
идиотизм какой-то, другого слова не подберу
Полностью согласен. В C# Button имеет и картинку и текст.
FaTaL вне форума Ответить с цитированием
Старый 25.09.2014, 14:50   #6
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

Потому что BitBtn уже совсем другая кнопка а не кнопка с прибабахом. Потому от CustomButton и унаследовано.

Переписывайте свой код под новый класс.
Человек_Борща вне форума Ответить с цитированием
Старый 25.09.2014, 15:09   #7
AnTe
Форумчанин
 
Регистрация: 25.09.2008
Сообщений: 209
По умолчанию

Цитата:
Сообщение от Человек_Борща Посмотреть сообщение
Потому что BitBtn уже совсем другая кнопка а не кнопка с прибабахом. Потому от CustomButton и унаследовано.
Я в тонкости организации VCL не влазил, не подскажете, что такого особенного в кнопке "без иконки" TButton, раз её выделили аж в отдельный класс?

Я всегда воспринимал TBitBtn как вполне логичное развитие TButton - добавление иконки и (возможно) иного функционала, и я сетовал лишь на то, что для кнопки с иконкой придумано новое имя, а не расширен функционал TButton.

А тут на тебе. Оказалось, что TButton - весь такой особенный и теперь родительским классом не будет!

Цитата:
Сообщение от Человек_Борща Посмотреть сообщение
Переписывайте свой код под новый класс.
под который из двух?

У меня похоже единственный выход - поставить какой-нибудь эксперт, который автоматом заменит TButton на всех формах ВО ВСЕХ ПРОЕКТАХ на TBitBtn, потом поиск по текстам всех модулей (общих для многих проектов) и везде заменить упоминание TButton на TBitBtn

и забыть про TButton, как про страшный сон

Правда, он ещё долго будет продолжать преследовать разработчика на главной панели инструментов - "Standart", неведомо зачем

Последний раз редактировалось AnTe; 25.09.2014 в 15:13.
AnTe вне форума Ответить с цитированием
Старый 25.09.2014, 15:24   #8
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

Цитата:
У меня похоже единственный выход - поставить какой-нибудь эксперт, который автоматом заменит TButton на всех формах ВО ВСЕХ ПРОЕКТАХ на TBitBtn, потом поиск по текстам всех модулей (общих для многих проектов) и везде заменить упоминание TButton на TBitBtn
Лет 100500 назад я такую прогу писал - поиск и замена инфы в текстовых файлах. Могу откопать из архива и подарить (с исходниками), но с юникодом она не дружит.
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 25.09.2014, 15:59   #9
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Цитата:
Лет 100500 назад я такую прогу писал - поиск и замена инфы в текстовых файлах. Могу откопать из архива и подарить (с исходниками), но с юникодом она не дружит.
Зачем кому-то нужен ваш велосипед? И Дельфи (даже 7), и почти любой редактор типа Notepad++, умеет искать и заменять текст в проекте, папке и т.п.

Цитата:
поставить какой-нибудь эксперт, который автоматом заменит TButton на всех формах ВО ВСЕХ ПРОЕКТАХ на TBitBtn, потом поиск по текстам всех модулей (общих для многих проектов) и везде заменить упоминание TButton на TBitBtn
Зачем эксперт? dfm это тоже текстовые файлы.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 25.09.2014, 16:26   #10
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

Цитата:
И Дельфи (даже 7), и почти любой редактор типа Notepad++, умеет искать и заменять текст в проекте, папке и т.п.
Уверен про delphi 7?

Про notepad++ не спорю, есть там такая примочка. Просто на момент написания, как ты говоришь, велосипеда, у меня не было интернета, чтоб что-то найти и скачать.

Цитата:
Зачем кому-то нужен ваш велосипед?
Вот обязательно нужно чужой труд обосрать, да? Я никому и не навязывал.
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
TSpeedButton TBitBtn PNG Alpha прозрачность. alextrof94 Общие вопросы Delphi 1 29.04.2013 18:58
Изменение символа компонента TBitBtn anka_masurowa Компоненты Delphi 8 12.04.2012 08:35
unable to rename 'C:\ProgramFiles\Borland\Delphi7\Bi n\Delphi32.$$$' to 'C:\Program Files\Borland\Delphi7\ KazBoy Помощь студентам 1 12.04.2011 18:07
TStringGrid и TBitBtn.OnClick megachuhancer Общие вопросы Delphi 0 16.06.2010 08:25