| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Общие вопросы > Как укоротить код? |
| Автор: Xenos 1.2.2005, 01:12 | ||
У меня есть такая кнопка
и еще 32 такие же кнопки от Б до Я. Так вот, как сделать так, что б написать этот код только раз, заменив 'а' на какой-нить char , а на onClick каждой кнопки просто присваивать char'у нужное значение? |
| Автор: Zero 1.2.2005, 03:06 | ||||
Вообщем брось на форму 2 едита, и кнопку, а на неё такой код:
Я пологаю у тебя Z - это массив состоящий из 33 элементов, тогда тебе надо с помощью функции ORD, определить номер i, затем переприсвоить
Не поймёш пиши. |
| Автор: Satana 1.2.2005, 08:25 |
| попробуй так: [cod=delphi] procedure chhar(str:char); var i:integer; begin for i:=1 to length(z) do if z[i]=str then (FindComponent(Format('Panel%d',[i])) as TPanel).caption:=AnsiUpperCase(str); [/cod] и затем в процедуре обработчике будешь вызывть эту с параметром буквы |
| Автор: Bes 1.2.2005, 08:56 |
| Сделай кэпшен кнопок буквы и вставляй его вместо параметра. :-) |
| Автор: Snowy 1.2.2005, 09:45 | ||
Для каждой кнопки событие OnClick пропиши не автоматом, а ручками. Вместо Button1Click, Button2Click и т.д. пиши руками просто ButtonClick. Тогда на все кнопки будет вызываться одно событие и не нужно писать 33 одинаковых кода. |
| Автор: Xenos 1.2.2005, 11:29 | ||||||
| Zero Ты немного не понял z:string, и моя задача не перевод из одного регистра в другой, а прверка наличия в z определенной букввы, соответственно для каждой копки, тость для Button1.caption='А' проверяет наличие в z 'а' ,и так каждая кнопка, тоесть Button2.caption='Б' наличие 'б' и т.д. В Z буквы по умолчанию нижнего регистра, хотя можно сделать и верхнего, это безразницы что искать. Satana Thnx, так уже пробовал только вот как с этим справиться
не знаю. Эта ошибка вылазит в
Bes caption кнопок и так буквы, только как это к делу относится, это не укорачивание а удлиннение получится. Snowy Нет так не выйдет, я бы мог и просто в свойствах каждой на onclick прописать Button1.click, ну или на крайняк завести какую-нить левую кнопку и спихнуть все на неё, но проблема в том, что для каждой кнопки должно быть что то типа этого
Тоесть (с) для каждой кнопки должен быть разным. |
| Автор: Rennigth 1.2.2005, 11:44 | ||
у тебя Classes прописан в Uses? Добавлено @ 11:47 сорри, findcomponent это метод Tcomponent вроде, сделай функцию в классе формы |
| Автор: Snowy 1.2.2005, 12:08 |
| Тоже мне проблема. Задай каждой кнопке в каптион свою буковку и по буковке проверяй. Если не хочешь, чтобы буковку было видно, спрячь буковку в Hint и проверяй по хинту. Тогда c:=TButton(Sender).Hint |
| Автор: Rennigth 1.2.2005, 12:35 |
| да можно и в tag писать ord от буквы |
| Автор: Xenos 1.2.2005, 19:31 | ||||
| Блин, толи вы меня не понимаете, толи я вас (скорее конечно второе). На самом деле на каждой кнопке висит вот такой код :
я сначала его специально урезал и поместил в пост только основную его часть, чтоб никого не путать. Мне всеравно по чему искать по hint'у или по caption'у или по тагу. Мне не хочется всю эту хфигню 33 раза переписать. Я хотел вместо всего верхнего кода на каждую кнопку повесить что то типа этого:
Rennigth Если можно про функцию поподробнее, тоесть как именно это оформить? |
| Автор: Vit 1.2.2005, 19:51 | ||
(Sender as TButton).caption; - это тект той кнопки которая была нажата |
| Автор: Girder 1.2.2005, 20:12 | ||
| Нифига не понял в чем проблемма... Может енто...
|
| Автор: Snowy 2.2.2005, 09:31 | ||
| Все элементарно. Кладешь 33 кнопки. На каждой кнопке написана ее буква (только одна буква!). (буква на кнопе соответственно прописана в свойстве Caption). У аждой кнопки также есть событие OnClick. В него ручками нужно прописать ButtonClick, а не назначать по умолчанию, чтобы все кнопки при нажатии вызывали одно и то же событие, а не каждая кнопка свое. Далее. Жмем на любую из кнопок. Запускается следующий код:
Код смотрит какая буква нарисована на кнопке, и проверяет, а есть ли такая в строке. Вот и все. Код один, кнопок много. Код различает кнопки по надписи, которая на кнопке нарисована. |
| Автор: Satana 2.2.2005, 09:33 |
| Snowy Ну в принципе та же фигня что и я написал только красивее |
| Автор: Snowy 2.2.2005, 14:21 | ||
| Вот нарисовал твое "Поле Чудес". Можешь взять за основу. Переделать конечно придется, поскольку я все запихал в OnCreate и ничего не уничтожал. Но саму идею отсюда понять сможешь. Привожу только Unit1, т.к. dpr стандартный. На форму тоже клаcть ничего не нужно - оставь стандартную. Просто создай новый проект и замени весь код Unit1 на этот:
|
| Автор: Xenos 3.2.2005, 00:17 | ||
| Работает!!! Snowy работает Perfect
За "Поле Чудес" тоже спасибо, но у мня там все немного сложнее. |