Главная страница
    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.014 c
2-1147110889
que
2006-05-08 21:54
2006.05.28
Memo


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


3-1144305507
diwww
2006-04-06 10:38
2006.05.28
Как отменить скролинг по результатам проверки в BeforeScroll?


15-1146570229
DVM
2006-05-02 15:43
2006.05.28
Программно передать координаты в Ozi Explorer. Как?


11-1127473310
nester
2005-09-23 15:01
2006.05.28
Как в TKOLListView при LvsDetail сделать каждый item многострочны





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