![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как сие оптимизировать? ИМХО! [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]Мжно. Не то чтобы оптимизировать, а, скорее, облагородить.