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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 26.12.2011, 20:03   #1
LatuSerge
 
Регистрация: 18.04.2011
Сообщений: 7
По умолчанию Оптимизация кода

Есть довольно некрасивый код, потому что вовсю используется копипаст. Очень хотелось бы узнать как можно было бы автоматизировать этот процесс. Что то типа к этому виду или другому удобному:
Пример:
For i:=1 to 28 do begin
(FindComponent('KeyLabel'+IntToStr( i)) as TLabel).Visible:=False;
end;

А вот сам кусочек кода для оптимизации:

procedure TForm2.ProgramLabel1MouseEnter(Send er: TObject);
begin
ProgramLabel1.Font.Style:=[fsBold];
end;

procedure TForm2.ProgramLabel1MouseLeave(Send er: TObject);
begin
ProgramLabel1.Font.Style:=[];
end;

procedure TForm2.ProgramLabel2MouseEnter(Send er: TObject);
begin
ProgramLabel2.Font.Style:=[fsBold];
end;

procedure TForm2.ProgramLabel2MouseLeave(Send er: TObject);
begin
ProgramLabel2.Font.Style:=[];
end;

procedure TForm2.ProgramLabel3MouseEnter(Send er: TObject);
begin
ProgramLabel3.Font.Style:=[fsBold];
end;

procedure TForm2.ProgramLabel3MouseLeave(Send er: TObject);
begin
ProgramLabel3.Font.Style:=[];
end;

procedure TForm2.ProgramLabel6MouseEnter(Send er: TObject);
begin
ProgramLabel6.Font.Style:=[fsBold];
end;

procedure TForm2.ProgramLabel6MouseLeave(Send er: TObject);
begin
ProgramLabel6.Font.Style:=[];
end;

procedure TForm2.ProgramLabel4MouseEnter(Send er: TObject);
begin
ProgramLabel4.Font.Style:=[fsBold];
end;

procedure TForm2.ProgramLabel4MouseLeave(Send er: TObject);
begin
ProgramLabel4.Font.Style:=[];
end;

procedure TForm2.ProgramLabel5MouseEnter(Send er: TObject);
begin
ProgramLabel5.Font.Style:=[fsBold];
end;

procedure TForm2.ProgramLabel5MouseLeave(Send er: TObject);
begin
ProgramLabel5.Font.Style:=[];
end;

procedure TForm2.ProgramLabel7MouseEnter(Send er: TObject);
begin
ProgramLabel7.Font.Style:=[fsBold];
end;

procedure TForm2.ProgramLabel7MouseLeave(Send er: TObject);
begin
ProgramLabel7.Font.Style:=[];
LatuSerge вне форума Ответить с цитированием
Старый 26.12.2011, 20:10   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

назначить всем лейблам один обработчик, а доступ к лейблу вызвавшему событие получать доступ через Sender.
пример
Код:
(Sender as TLabel).Font.Style:=[fsBold];
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 26.12.2011, 20:12   #3
LatuSerge
 
Регистрация: 18.04.2011
Сообщений: 7
По умолчанию

Спасибо) А можешь в примере описать твой способ? Просто я с таким еще не сталкивался, а узнать очень интересно))
LatuSerge вне форума Ответить с цитированием
Старый 26.12.2011, 20:17   #4
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

я привел пример кода.
а назначение одного обработчика это выбрать в инспекторе объектов этот обработчик(прописать только один из них)
или выделить все лейблы и выбрать обработчик к ним(всем сразу)
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 26.12.2011, 20:19   #5
LatuSerge
 
Регистрация: 18.04.2011
Сообщений: 7
По умолчанию

Ах..Точно))) Большое спасибо)))) Пошел оптимизировать код)))
LatuSerge вне форума Ответить с цитированием
Старый 26.12.2011, 20:34   #6
LatuSerge
 
Регистрация: 18.04.2011
Сообщений: 7
По умолчанию

А вот похожий код который не получается оптимизировать((


procedure TForm2.ProgramLabel1Click(Sender: TObject);
begin
NotebookPrograms1.PageIndex:=2;
end;

procedure TForm2.ProgramLabel2Click(Sender: TObject);
begin
NotebookPrograms1.PageIndex:=3;
end;

procedure TForm2.ProgramLabel3Click(Sender: TObject);
begin
NotebookPrograms1.PageIndex:=4;
end;

procedure TForm2.ProgramLabel4Click(Sender: TObject);
begin
NotebookPrograms1.PageIndex:=5;
end;

procedure TForm2.ProgramLabel5Click(Sender: TObject);
begin
NotebookPrograms1.PageIndex:=6;
end;

procedure TForm2.ProgramLabel6Click(Sender: TObject);
begin
NotebookPrograms1.PageIndex:=7;
end;

procedure TForm2.ProgramLabel7Click(Sender: TObject);
begin
NotebookPrograms1.PageIndex:=8;
end;

procedure TForm2.ProgramLabel8Click(Sender: TObject);
begin
NotebookPrograms1.PageIndex:=9;
end;

procedure TForm2.ProgramLabel9Click(Sender: TObject);
begin
NotebookPrograms1.PageIndex:=10;
end;
LatuSerge вне форума Ответить с цитированием
Старый 26.12.2011, 20:35   #7
LatuSerge
 
Регистрация: 18.04.2011
Сообщений: 7
По умолчанию

Просто сдесь каждый Label ведет на определенную страницу Notebook и я не знаю как можно было бы оптимизировать такой код
LatuSerge вне форума Ответить с цитированием
Старый 26.12.2011, 20:57   #8
veniside
Старожил
 
Регистрация: 03.01.2011
Сообщений: 2,508
По умолчанию

Код:
NotebookPrograms1.PageIndex := (Sender as TLabel).Tag;
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
veniside вне форума Ответить с цитированием
Старый 26.12.2011, 21:01   #9
LatuSerge
 
Регистрация: 18.04.2011
Сообщений: 7
По умолчанию

Большое Спасибо!!!!! Вообще шикарно)))) Пожалуй мне надо выучить Sender и Tag)))
LatuSerge вне форума Ответить с цитированием
Старый 26.12.2011, 22:48   #10
kettanaito
Веб-дизайнер
Форумчанин
 
Аватар для kettanaito
 
Регистрация: 11.08.2011
Сообщений: 305
По умолчанию

Или как вариант создай свою функцию/процедуру.
Код:
procedure TForm2.SetNoteBookIndex(Index:Integer);
begin
NotebookPrograms1.PageIndex:=Index;
end;

procedure TForm2.ProgramLabel9Click(Sender: TObject);
begin
SetNotebookIndex(10);
end;
На случай если в качестве Sender не всегда бывает TLabel.
kettanaito вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Оптимизация кода LuckyTheGreat C# (си шарп) 3 15.07.2011 00:46
Оптимизация кода Shouldercannon Общие вопросы Delphi 23 22.07.2010 22:45
Оптимизация кода. Alex Cones Общие вопросы Delphi 19 12.10.2009 20:51
Оптимизация кода nusik Общие вопросы Delphi 2 21.05.2009 17:55
Оптимизация кода [Smarik] Gamedev - cоздание игр: Unity, OpenGL, DirectX 9 20.08.2008 15:00