Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.05.28;
Скачать: CL | DM;

Вниз

Как сие оптимизировать? ИМХО!   Найти похожие ветки 

 
mctarik ©   (2006-05-10 12:13) [0]

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

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

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

***
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!


 
Ega23 ©   (2006-05-10 12:16) [1]

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


 
Desdechado ©   (2006-05-10 12:17) [2]

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


 
Sergey13 ©   (2006-05-10 12:29) [3]

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


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

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]


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

> 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;

И все.


 
Desdechado ©   (2006-05-10 13:13) [6]

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


 
Ega23 ©   (2006-05-10 13:15) [7]

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


 
mctarik ©   (2006-05-10 19:05) [8]


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

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

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

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



Страницы: 1 вся ветка

Текущий архив: 2006.05.28;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.049 c
2-1147294991
Sergiony
2006-05-11 01:03
2006.05.28
новый тип


4-1141733580
Dmitrij_K
2006-03-07 15:13
2006.05.28
Не работает перехват win api функции


3-1144331501
RomanH
2006-04-06 17:51
2006.05.28
Одобрите выбор


2-1147592071
kilonet
2006-05-14 11:34
2006.05.28
функция TextOut


15-1146229579
Alex7
2006-04-28 17:06
2006.05.28
Windows XP-панель задач