Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как сие оптимизировать? ИМХО! [D7, XP]


mctarik ©   (2006-05-10 12:13:00) 

Привет Мастера!

И опять у меня не скромный вопрос:

Возможно ли это оптимизировать, в смысле
не меняя функционал -> уменьшить данный код?

***
procedure TForm1.Asm_Click(Sender: TObject);
begin
 if Asm_.Checked then
  SynPasSyn.AsmAttri.Foreground := clMaroon
  else
  SynPasSyn.AsmAttri.Foreground := clNone;
end;

procedure TForm1.Char_Click(Sender: TObject);
begin
 if Char_.Checked then
  SynPasSyn.CharAttri.Foreground := clTeal
  else
  SynPasSyn.CharAttri.Foreground := clNone;
end;

procedure TForm1.Comment_Click(Sender: TObject);
begin
 if Comment_.Checked then
  SynPasSyn.CommentAttri.Foreground := clNavy
  else
  SynPasSyn.CommentAttri.Foreground := clNone;
end;

procedure TForm1.Directive_Click(Sender: TObject);
begin
 if Directive_.Checked then
  SynPasSyn.DirectiveAttri.Foreground := clGreen
  else
  SynPasSyn.DirectiveAttri.Foreground := clNone;
end;

procedure TForm1.Float_Click(Sender: TObject);
begin
 if Float_.Checked then
  SynPasSyn.FloatAttri.Foreground := clAqua
  else
  SynPasSyn.FloatAttri.Foreground := clNone;
end;

procedure TForm1.Hex_Click(Sender: TObject);
begin
 if Hex_.Checked then
  SynPasSyn.HexAttri.Foreground := clRed
  else
  SynPasSyn.HexAttri.Foreground := clNone;
end;

procedure TForm1.Identifier_Click(Sender: TObject);
begin
 if Identifier_.Checked then
  SynPasSyn.IdentifierAttri.Foreground := clPurple
  else
  SynPasSyn.IdentifierAttri.Foreground := clNone;
end;

procedure TForm1.Key_Click(Sender: TObject);
begin
 if Key_.Checked then
  SynPasSyn.KeyAttri.Foreground := clBlack
  else
  SynPasSyn.KeyAttri.Foreground := clNone;
end;

procedure TForm1.Number_Click(Sender: TObject);
begin
 if Number_.Checked then
  SynPasSyn.NumberAttri.Foreground := clGray
  else
  SynPasSyn.NumberAttri.Foreground := clNone;
end;

procedure TForm1.Space_Click(Sender: TObject);
begin
 if Space_.Checked then
  SynPasSyn.SpaceAttri.Foreground := clMoneyGreen
  else
  SynPasSyn.SpaceAttri.Foreground := clNone;
end;

procedure TForm1.String_Click(Sender: TObject);
begin
 if String_.Checked then
  SynPasSyn.StringAttri.Foreground := clBlue
  else
  SynPasSyn.StringAttri.Foreground := clNone;
end;

procedure TForm1.Symbol_Click(Sender: TObject);
begin
 if Symbol_.Checked then
  SynPasSyn.SymbolAttri.Foreground := clLime
  else
  SynPasSyn.SymbolAttri.Foreground := clNone;
end;
***

С Уважением mctarik!


mctarik   (2006-05-10 19:05:00) [1]


> Юрий Зотов ©   (10.05.06 12:58) [5]

Всё получилось, О сколько нам открытий чудных ...

Всем большое спасибо за ваше внимание и поддержку!

С Уважением mctarik!


Ega23   (2006-05-10 13:15:00) [2]

Я бы не стал в конкретных обработчиках назначать конкретные цвета. Потому как если понадобится изменить цвет - всё, амба.


Desdechado   (2006-05-10 13:13:00) [3]

Юрий Зотов ©   (10.05.06 12:58) [5]
это пока в обработчики отдельных чеков чего-нибудь дополнительно не попало


Юрий Зотов   (2006-05-10 12:58:00) [4]

> mctarik ©   (10.05.06 12:13)  

У чекбоксов проставить Tag от 1 до 12 в том же порядке, как Вы перечислили их обработчики. Далее так.

const
 Colors: array[1...12] of TColor = (clNavy, clAqua...clLime); // Тот же порядок

procedure SetColor(Attr: общий_тип; Sender: TObject);
begin
 with TCheckBox(Sender) do
 if Checked then
   Attr.Foreground := Colors[Tag]
 else  
   Attr.Foreground := clNone
end;

И теперь всем чекбоксам назначаем один общий обработчик:

procedure TForm1.CheckBoxClick(Sender: TObject);
begin
 with SynPasSyn do
 case TCheckBox(Sender).Tag of
     1: SetColor(AsmAttri, Sender);
     ...
     12: SetColor(SymbolAttri, Sender)
  end
end;

И все.


Альф   (2006-05-10 12:42:00) [5]

IMHO только так

procedure SetCheckedColor(Attri: TSynHighlighterAttributes; Color: TColor; Value: boolean);
begin
 if Value
 then Attri.Foreground := Color
 else Attri.Foreground := clNone;
end;

...
procedure TForm1.Asm_Click(Sender: TObject);
begin
 SetCheckedColor(SynPasSyn.AsmAttri, clMaroon, Asm_.Checked );
end;


но это не оптимизация - это [1]


Sergey13   (2006-05-10 12:29:00) [6]

Попробовать повесить всю эту катавасию на onUpdate ActionManager-а - по крайней мере все в одном месте будет.
Но я пожалуй присоединюсь к [2] Desdechado ©   (10.05.06 12:17)


Desdechado   (2006-05-10 12:17:00) [7]

а смысл?
несвязанные контролы имеют несвязанные реакции
то, что они похожи внешне, ни к чему не обязывает


Ega23   (2006-05-10 12:16:00) [8]

Мжно. Не то чтобы оптимизировать, а, скорее, облагородить.


Наверх

Титульная страница Поиск, карта сайта Написать письмо