Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Упростить код. Возможно??? 
:(
    Опции темы
ivan219
  Дата 16.9.2006, 23:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1121
Регистрация: 19.11.2005
Где: Планета земля

Репутация: 2
Всего: 12



Код

procedure KeyToPress(Sender:TObject);
begin

 if (Sender=Form1.LCFC)or
    (Sender=Form1.LCFL)or
    (Sender=Form1.LCFF) then LCF;  

 if (Sender=Form1.FNC)or
    (Sender=Form1.FNLR)or
    (Sender=Form1.FNFc) then FN;   

 if (Sender=Form1.FVC)or
    (Sender=Form1.FVLR)or
    (Sender=Form1.FVFc) then FV;        

 if (Sender=Form1.FPC1)or
    (Sender=Form1.FPL1)or
    (Sender=Form1.FPFc1)or
    (Sender=Form1.FPC2)or
    (Sender=Form1.FPL2)or
    (Sender=Form1.FPFc2) then FP(Sender);   

 if (Sender=Form1.LW1)or
    (Sender=Form1.LDk1)or
    (Sender=Form1.LDp1)or
    (Sender=Form1.LJ1)or
    (Sender=Form1.LL1) then LCil1;  

 if (Sender=Form1.L2W)or
    (Sender=Form1.L2Dn)or
    (Sender=Form1.L2Dv)or
    (Sender=Form1.L2J) then LCil2(Sender);  

 if (Sender=Form1.L4J)or
    (Sender=Form1.L4D)or
    (Sender=Form1.L4L) then L4lin;            

 if (Sender=Form1.LTorW)or
    (Sender=Form1.LTorM)or
    (Sender=Form1.LTorDn)or
    (Sender=Form1.LTorDv)or
    (Sender=Form1.LTorH)or
    (Sender=Form1.LTorL) then LTor;          

 if (Sender=Form1.TrL)or
    (Sender=Form1.TrT)or
    (Sender=Form1.TrU1)or
    (Sender=Form1.TrU2)or
    (Sender=Form1.TrI2) then Tr;     

 if (Sender=Form1.OmV)or
    (Sender=Form1.OmI)or
    (Sender=Form1.OmRn)or
    (Sender=Form1.OmW) then Om;                  

 if (Sender=Form1.RRR1)or
    (Sender=Form1.RRR2)or
    (Sender=Form1.RRR12) then RR;            

 if (Sender=Form1.RDUv)or
    (Sender=Form1.RDU)or
    (Sender=Form1.RDI)or
    (Sender=Form1.RDR) then RRD;      

 if (Sender=Form1.CDIn)or
    (Sender=Form1.CDUn)or
    (Sender=Form1.CDUv)or
    (Sender=Form1.CDF)or
    (Sender=Form1.CDC) then CD;                  

 if (Sender=Form1.RabcRab)or
    (Sender=Form1.RabcRbc)or
    (Sender=Form1.RabcRca)or
    (Sender=Form1.RabcRa)or
    (Sender=Form1.RabcRb)or
    (Sender=Form1.RabcRc) then Rabc(Sender); 

 if (Sender=Form1.R1R2EUIR1)or
    (Sender=Form1.R1R2EUIR2)or
    (Sender=Form1.R1R2EUIE)or
    (Sender=Form1.R1R2EUIU)or
    (Sender=Form1.R1R2EUII)or
    (Sender=Form1.R1R2EUIRn) then R1R2EUI(Sender);

 if (Sender=Form1.RLCFLL)or
    (Sender=Form1.RLCFLR)or
    (Sender=Form1.RLCFLF)or
    (Sender=Form1.RLCFLRxl)or
    (Sender=Form1.RLCFLRRxl) then RLCFL;           

 if (Sender=Form1.RLCFCC)or
    (Sender=Form1.RLCFCF)or
    (Sender=Form1.RLCFCRxc)then RLCFC;                

 if Sender=Form1.E1 then ColorRE;                     

 if Sender=Form1.ColorLEdit1 then ColorLE;           

 if (Sender=Form1.RshRa)or
    (Sender=Form1.RshIa)or
    (Sender=Form1.RshUa)then Rsh1;                   

 if (Sender=Form1.RshE)or
    (Sender=Form1.RshU) then Rsh3;            

 if (Sender=Form1.RoRu)or
    (Sender=Form1.RoIu)or
    (Sender=Form1.RoUu)or
    (Sender=Form1.RoE)or
    (Sender=Form1.RoR) then Ro;                     

 if (Sender=Form1.TS26C)or
    (Sender=Form1.TS26F)or
    (Sender=Form1.TS26L) then GB1(Sender);       

 if (Sender=Form1.TS26EditF)or
    (Sender=Form1.TS26EditT)or
    (Sender=Form1.TS26EditJ)or
    (Sender=Form1.TS26EditJ4) then GB2(Sender);   

 if (Sender=Form1.TS26W)or
    (Sender=Form1.TS26Dk)or
    (Sender=Form1.TS26Dp)or
    (Sender=Form1.TS26J)or
    (Sender=Form1.TS26Ll) then GB3(Sender);     

 if Sender=Form1.SMDEdit1 then Find;   

end;


Возможно зедлать этот код более компактным а то уменя этих if ещё целая куча.

Может как то оптимизировать???
PM MAIL ICQ   Вверх
skyboy
Дата 17.9.2006, 00:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 4
Всего: 260



ivan219, что такое FPC1, FPL1, FPC2 и иже с ними? в чём вообще суть представленного кода? переработка архитектуры допустима?
PM MAIL   Вверх
Alexeis
Дата 17.9.2006, 00:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 109
Всего: 459



ivan219, можно всем указаным объектам в поле Tag заносить свой номер
так для Form1.LCFC, Form1.LCFL, Form1.LCFF - будет один и тот же номер, например 1
И сделать масив элементы которого процедурного типа например procs, так элемент под индексом 1 будет процедра GB1 (procs[1] :=  GB1;)
теперь весь этот длинный код можно будет упростить до одной строчки:
Код

procs[sender.tag](sender);


Это сообщение отредактировал(а) alexeis1 - 17.9.2006, 00:26


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
skyboy
Дата 17.9.2006, 00:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 4
Всего: 260



там процедуры разные. одни принимают параметры, другие нет.

Добавлено @ 00:31 
т.е. как минимум одно ветвление придётся делать и разные массивы. или приведение типов. а раз разная логика у вызываемых обработчиков, то на кой их сводить вместе?
PM MAIL   Вверх
Alexeis
Дата 17.9.2006, 01:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 109
Всего: 459



skyboy, на сколько разные? Я видел там всего два вида, без параметров и с передачей объекта.

Цитата(skyboy @  17.9.2006,  00:29 Найти цитируемый пост)
то на кой их сводить вместе? 

Цитата(ivan219 @  16.9.2006,  23:59 Найти цитируемый пост)
Возможно зедлать этот код более компактным а то уменя этих if ещё целая куча.

Может как то оптимизировать??? 




--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
ivan219
  Дата 17.9.2006, 07:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1121
Регистрация: 19.11.2005
Где: Планета земля

Репутация: 2
Всего: 12



Цитата

ivan219, что такое FPC1, FPL1, FPC2 и иже с ними? в чём вообще суть представленного кода? переработка архитектуры допустима?


Это контролы тип TLabeledEdit и эта процедура вызывается из
Код

Procedure TForm1.EditChange(Sender: TObject);
begin
 KeyToPress(Sender);
end;


Я её вынес отдельно так как Unit1 стал более громозким, там уменя ещё и Button, ComboBox, RadioButton и.т.д. и чтоб не создавать на каждый отдельный обработчик я зделал так как было выше.

alexeis1 

С тегами я думал и пришол к этому коду
Код

case TLabeledEdit(Sender).Tag of
        1:......;
        .
        .
end;

Он по проще но всё равно как то громоздко получается.

Код

procs[sender.tag](sender);


Можеш поподробнее smile 

Это сообщение отредактировал(а) ivan219 - 17.9.2006, 07:19
PM MAIL ICQ   Вверх
Alexeis
Дата 17.9.2006, 12:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 109
Всего: 459



Цитата(ivan219 @  17.9.2006,  07:09 Найти цитируемый пост)
Можеш поподробнее

Описывается процедурный тип
Код

type 
  Tpr = procedure (self : TObject );

если используются обычные процеуры.
или 
Код

type 
  Tpr = procedure (self : TObject) of Object;

если используются методы классов.
Далее объявляется массив
Код

var
  procs : array[1..5] of Tpr;

в коде инициализируем его
Код

procs[1] := LCF;
procs[2] := FN;
procs[3] := FV;
procs[4] := FP;
......

индекс должен соответствовать тэгам каждой группы
теперь вызов нужной функции будет производится
procs[<номер нужного тэга>](общие параметры)

Если имеются две группы функций с одинаковымим параметрами. Каждой группе можно поставить в соответствие свой массив
Нвпример если их две то получим
процедурные типы будут соотв.
Код

type 
  Tpr1 = procedure of Object;
  Tpr2 = procedure (self : TObject) of Object;


Код

var
  procs1 : array[1..5] of Tpr1;
  procs2 : array[6..9] of Tpr2;


А запуск соответственно
Код

Case sender.tag of
1..5 : procs1[sender.tag]();
6..9 : procs2[sender.tag](sender);
end;


Это сообщение отредактировал(а) alexeis1 - 17.9.2006, 18:14


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
volvo877
Дата 17.9.2006, 13:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2073
Регистрация: 15.11.2004

Репутация: 14
Всего: 116



alexeis1,
Код
type 
  Tpr = procedure (self: TObject);
 smile 
PM MAIL   Вверх
ivan219
Дата 17.9.2006, 13:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1121
Регистрация: 19.11.2005
Где: Планета земля

Репутация: 2
Всего: 12



Попробую.
PM MAIL ICQ   Вверх
Alexeis
Дата 17.9.2006, 18:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 109
Всего: 459



volvo877, спасибо, что поправил smile .
[offtop]Это результат перехода с делфи на С++, начинаю комбинировать обе конструкции smile [/offtop]


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
ivan219
  Дата 24.9.2006, 15:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1121
Регистрация: 19.11.2005
Где: Планета земля

Репутация: 2
Всего: 12



Код

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Button: TButton;
    Button1: TButton;
    Button2: TButton;
    procedure Click(Sender: TObject);
    procedure LabelCaption;
  private
    { Private declarations }
  public
    { Public declarations }
  end;

type
 Tpr = procedure (self : TObject);


var
  procs : array[1..3] of Tpr;
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Click(Sender: TObject);
begin
 procs[1] :=LabelCaption;
 procs[2] :=LabelCatison;
 procs[3] :=LabelCatison;
end;

procedure TForm1.LabelCaption;
begin
 case Sender.tag or
      1: Caption:='1';
      2: Caption:='2';
      3: Caption:='3';
 end;
end;
end.


Что то я неразобрался как этим пользоватся smile 

alexeis1  smile 

Это сообщение отредактировал(а) ivan219 - 24.9.2006, 15:25
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1750 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.