Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2006.05.28;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.011 c
1-1145610805
Virtukon
2006-04-21 13:13
2006.05.28
TShellTreeView и свойство readonly


15-1146429696
Бугага
2006-05-01 00:41
2006.05.28
Баскетбольный ЦСКА сильнейший клуб в Европе!


2-1147146790
mctarik
2006-05-09 07:53
2006.05.28
Как выполнить AutoCheck всех пунктов MainMenu!


2-1147344647
apl
2006-05-11 14:50
2006.05.28
Про файлы


15-1146758477
Empleado
2006-05-04 20:01
2006.05.28
Еврейская музыка





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский