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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 05.05.2014, 17:37   #1
Nikolas_555
Пользователь
 
Аватар для Nikolas_555
 
Регистрация: 16.11.2013
Сообщений: 47
Радость процедуры в процедуре

Привет, форумчане!
Итак, сразу к делу. попытаюсь изложить всё подробно, что б ни у кого не возникло вопросов. не поленитесь всё прочесть
У меня на форме расположены 81 штука компонентов SpeedButton, по 9 на каждую букву английского алфавита от A до I.
для наглядности, что б все поняли, покажу как они обозначены:

SpeedButtonA1, SpeedButtonA2, ... , SpeedButtonA8, SpeedButtonA9,
SpeedButtonB1, ... , SpeedButtonB9,
SpeedButtonC1, ... , SpeedButtonC9,
SpeedButtonD1, ... , SpeedButtonD9,
SpeedButtonE1, ... , SpeedButtonE9,
SpeedButtonF1, ... , SpeedButtonF9,
SpeedButtonG1, ... , SpeedButtonG9,
SpeedButtonH1, ... , SpeedButtonH9,
SpeedButtonI1, ... , SpeedButtonI9;


Кроме того, у меня на форме есть компонент ImageList.

К SpeedButtonA1 написал несколько процедур, что б при: клике на компонент, наведении курсора него, а так же отведении курсора от компонента, менялась его картинка, в опции Glyph.

Вот
Код:
procedure TForm5.SpeedButtonA1Click(Sender: TObject);
begin
ImageList1.GetBitMap(0,SpeedButtonA1.Glyph);
F := False;
end;

procedure TForm5.SpeedButtonA1MouseEnter(Sender: TObject);
begin
  if F=True then
    SpeedButtonA1.Glyph.LoadFromFile('C:\Users\Lenovo\Downloads\!!! ХО\Devil Hard XO\Pictures\1.bmp');
end;

procedure TForm5.SpeedButtonA1MouseLeave(Sender: TObject);
begin
  if F=True then
    SpeedButtonA1.Glyph.LoadFromFile('C:\Users\Lenovo\Downloads\!!! ХО\Devil Hard XO\Pictures\fon.bmp');
end;
Подытожим. Вопрос в том, как грамотно записать эту тройку процедур для каждого компонента SpeedButton? Как я понял, стоит сделать процедуру с этими тремя внутри, но помимо этого, каким-то образом изменяя название компонентов.
Подскажите, как это осуществить?
Nikolas_555 вне форума Ответить с цитированием
Старый 05.05.2014, 17:42   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Sender это объект вызвавший событие, через него вы можете получить кнопку с которой событие произошло.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 05.05.2014, 17:44   #3
northener
ПШП
Участник клуба
 
Регистрация: 15.07.2013
Сообщений: 1,872
По умолчанию

Код:
ImageList1.GetBitMap(0,TSpeedButton(Sender).Glyph);
northener вне форума Ответить с цитированием
Старый 05.05.2014, 21:43   #4
Nikolas_555
Пользователь
 
Аватар для Nikolas_555
 
Регистрация: 16.11.2013
Сообщений: 47
По умолчанию

почти получилось, спасибо..
только теперь возникла проблема. Хочу сделать так, что бы эта тройка процедур-событий(Click,Leave,Enter) распространялась на все SpeedButton'ы, кроме Back.
Код:
Procedure Hod_V_Malye_Kletki(Sender: TObject);
Begin
 if (Sender is TSpeedButton) and (Sender is not Back) then
  Begin
    TForm5.SpeedButtonA1Click(Sender);
    TForm5.SpeedButtonA1MouseEnter(Sender);
    TForm5.SpeedButtonA1MouseLeave(Sender);
  End;
End;
Delphi ругается на Back, пишет "Undeclared identifier Back at line", хотя у меня в программе он объявлен.
Код:
type
    Back: TSpeedButton;
Может я упустил какую-то мелочь? В чем проблема?

Последний раз редактировалось Nikolas_555; 05.05.2014 в 22:00.
Nikolas_555 вне форума Ответить с цитированием
Старый 05.05.2014, 21:59   #5
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Код:
and (Sender <> Back)
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 05.05.2014, 22:01   #6
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

BDA, Back это тип.
Код:
 if (Sender is TSpeedButton) and (not (Sender is Back)) then
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 05.05.2014, 22:04   #7
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Пепел Феникса, возможно Вы и правы. Меня смущает ":" в записи типа, поэтому я решил, что это все же переменная, а не тип.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 05.05.2014, 22:05   #8
Nikolas_555
Пользователь
 
Аватар для Nikolas_555
 
Регистрация: 16.11.2013
Сообщений: 47
По умолчанию

пробовал это:
Код:
and (Sender <> Back)
так же и это:
Код:
if (Sender is TSpeedButton) and (not (Sender is Back)) then

Увы, ничего не изменилось. Delphi выдаёт ту же самую ошибку

Последний раз редактировалось Nikolas_555; 05.05.2014 в 22:09.
Nikolas_555 вне форума Ответить с цитированием
Старый 05.05.2014, 22:07   #9
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Что такое Back?
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 05.05.2014, 22:12   #10
doktor255
Заблокирован
 
Регистрация: 31.03.2011
Сообщений: 976
По умолчанию

Мне тоже интересен этот вопрос. Back, это, как я понял, кнопка имеющая либо такой caption, либо такой Name. Соответственно их и нужно проверять. А в коде проверяется какая-то лабуда.
Цитата:
У меня на форме расположены 81 штука компонентов SpeedButton
Я Вам глубоко сочувствую. Изучите массивы, создайте массив SpeedButton, а в OnCreate формы в цикле от первого до последнего элемента массива инициализируйте их, присвойте Parent - Form1, и назначьте эти три обработчика. Такой финт уменьшит объём кода в несколько раз.

Последний раз редактировалось doktor255; 05.05.2014 в 22:16.
doktor255 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Процедуры и функции - Заданы три двумерных массива одинаковой размерности. Написать фукнции и процедуры их обработки sekirei Паскаль, Turbo Pascal, PascalABC.NET 8 21.11.2013 15:45
Использование имени процедуры в качестве параметра другой процедуры Alexey355 Помощь студентам 1 23.04.2011 13:59
Вызов процедуры в процедуре alexvav Общие вопросы Delphi 3 18.02.2011 13:07
Использование процедуры в другой процедуре (хм .. или метода?)...?? newprog12 Общие вопросы Delphi 4 11.01.2010 00:45
Вызывание процедуры в другой процедуре Dura4ok Общие вопросы Delphi 7 22.01.2008 19:45