Главная страница
    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.47 MB
Время: 0.012 c
4-1141569418
4ho
2006-03-05 17:36
2006.05.28
Передача параметров потоку.


1-1145436571
apl
2006-04-19 12:49
2006.05.28
Добавление компонентов! Подскажите!


6-1138011581
Peter
2006-01-23 13:19
2006.05.28
Как запретить доступ к аське?


3-1144153515
RomanH
2006-04-04 16:25
2006.05.28
Обновление данных


2-1147596208
Алена
2006-05-14 12:43
2006.05.28
TRichEdit





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский