Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как можно оптимизировать этот код? Повтор процедур! [D7, XP]


Страницы:   1 2

С.Толик ©   (2007-09-04 20:33:00) 


unit Unit1;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, StdCtrls, Buttons, TrafInsp_TLB, ActiveX, ExtCtrls;

type
 TForm1 = class(TForm)
   GroupBox1: TGroupBox;
   Memo1: TMemo;
   RadioGroup1: TRadioGroup;
   RadioButton1: TRadioButton;
   RadioButton2: TRadioButton;
   GroupBox2: TGroupBox;
   Summ: TEdit;
   Label1: TLabel;
   BitBtn1: TBitBtn;
   procedure BitBtn1Click(Sender: TObject);
   procedure FormCreate(Sender: TObject);
   procedure RadioButton2Click(Sender: TObject);
 private
   { Private declarations }
 public
   { Public declarations }
 end;

var
 Form1     : TForm1;
 FService  : ITrafInspAdmin;
 UList     : OleVariant;
 User      : OleVariant;
 UAttr     : OleVariant;
 UState    : OleVariant;
 Cash0     : OleVariant;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
var
 A : Cardinal;
 GUID : String;
 Name : String;
begin
 Memo1.Clear;
 CoInitialize(nil);
 FService:=CoTrafInspAdmin.CreateRemote('192.168.0.1');
 Try
   FService.APILogon('1234567');
 Except
 End;
 UList:=FService.APIGetBillProp(APIObjectTypeUser,'');
 if not VarIsArray(UList) then ; //Error

 For A:= VarArrayLowBound(UList, 1) to VarArrayHighBound(UList, 1) do
   Begin
     User:= UList[A];
     GUID:= User[1];
     UAttr := FService.APIGetAttr(3, GUID, User_IPAddr);
     UState:= FService.APIGetUserState(GUID);
     Name:= UState[0];
     Memo1.Lines.Add(Name);
   End;
 FService:=Nil;
 CoUninitialize;
end;

procedure TForm1.BitBtn1Click(Sender: TObject);
var
 A : Cardinal;
 GUID : String;
 Name : String;
begin
 CoInitialize(nil);
 FService:=CoTrafInspAdmin.CreateRemote('192.168.0.1');
 Try
   FService.APILogon('1234567');
 Except
 End;
 UList:=FService.APIGetBillProp(APIObjectTypeUser,'');
 if not VarIsArray(UList) then ; //Error

 For A:= VarArrayLowBound(UList, 1) to VarArrayHighBound(UList, 1) do
   Begin
     User:= UList[A];
     GUID:= User[1];
     UAttr := FService.APIGetAttr(3, GUID, User_IPAddr);
     UState:= FService.APIGetUserState(GUID);
     Name:= UState[0];
     FService.APISetUserState(GUID, Cash0+StrToFloat(Summ.text), -1, 'Script', 'Добавлено:'+(Summ.text)+' Мб');
   End;
 FService:=Nil;
 CoUninitialize;
end;

procedure TForm1.RadioButton2Click(Sender: TObject);
var
 A : Cardinal;
 GUID : String;
 Name : String;
begin
 Memo1.Clear;
 CoInitialize(nil);
 FService:=CoTrafInspAdmin.CreateRemote('192.168.0.1');
 Try
   FService.APILogon('1234567');
 Except
 End;
 UList:=FService.APIGetBillProp(APIObjectTypeUser,'');
 if not VarIsArray(UList) then ; //Error

 For A:= VarArrayLowBound(UList, 1) to VarArrayHighBound(UList, 1) do
   Begin
     User:= UList[A];
     GUID:= User[1];
     UAttr := FService.APIGetAttr(3, GUID, User_IPAddr);
     UState:= FService.APIGetUserState(GUID);
     Name:= UState[0];
     Memo1.Lines.Add(GUID);
   End;
 FService:=Nil;
 CoUninitialize;
end;

end.


С.Толик   (2007-09-05 12:20:00) [21]


ry
  Service:=CoTrafInspAdmin.CreateRemote('192.168.0.60');
  try
    Service.APILogon('123'); // Вот тут баги я думаю что апосля надо Exceptдописать
    UserList:=Service.APIGetBillProp(APIObjectTypeUser,'');
    if not VarIsArray(UserList) then ; //Error
    for i:= VarArrayLowBound(UserList, 1) to VarArrayHighBound(UserList, 1) do
    begin


Slym   (2007-09-05 12:19:00) [22]

на какой строке кода? :)


С.Толик   (2007-09-05 12:17:00) [23]

Class EOleError


Slym   (2007-09-05 12:15:00) [24]

С.Толик   (05.09.07 12:14) [12]
а еще и показывает в каком месте :)


С.Толик   (2007-09-05 12:14:00) [25]

Пишет сие: Variant does not reference an automation object!


Slym   (2007-09-05 12:12:00) [26]

привол в том что procedure Proc(const Service,User:variant); не of objectи в ней не доступны self переменные :)


Slym   (2007-09-05 12:10:00) [27]

procedure TForm1.FormCreate(Sender: TObject);
procedure Proc(const Service,User:variant);
  var UserState:variant;
begin
  with Form1 do
  begin
  UserState:=Service.APIGetUserState(User[1]);
  Memo1.Lines.Add(UserState[0]);
  end;
end;
begin
Memo1.Clear;
ForEachUser(@Proc);
end;

procedure TForm1.BitBtn1Click(Sender: TObject);
procedure Proc(const Service,User:variant);
begin
  with Form1 do
  Service.APISetUserState(User[1], Cash0+StrToFloat(Summ.text), -1, 'Script', 'Добавлено:'+(Summ.text)+' Мб');
end;
begin
ForEachUser(@Proc);
end;

procedure TForm1.RadioButton2Click(Sender: TObject);
procedure Proc(const Service,User:variant);
  var UserState:variant;
begin
  UserState:=Service.APIGetUserState(User[1]);
  Form1.Memo1.Lines.Add(UserState[0]);
end;
begin
Memo1.Clear;
ForEachUser(@Proc);
end;


С.Толик   (2007-09-05 12:07:00) [28]


> Slym ©   (05.09.07 11:51) [8]
>
> допешы :)
> Form1.Memo1.Lines.Add(UserState[0]);


Куды именно в твоем опт коде?


Slym   (2007-09-05 11:51:00) [29]

допешы :)
Form1.Memo1.Lines.Add(UserState[0]);


Slym   (2007-09-05 11:44:00) [30]

С.Толик   (05.09.07 9:35) [4]
прям так и говорит... "я не работаю" ?


Virgo_Style   (2007-09-05 11:02:00) [31]

С.Толик   (05.09.07 10:53) [5]

Есть. Например, вынести повторяющееся в отдельную процедуру, и вызывать ее. Хотя [3] лучше, imho.


С.Толик   (2007-09-05 10:53:00) [32]

Ребяты! А есть ешо варианты?


С.Толик   (2007-09-05 09:35:00) [33]


> Slym ©   (05.09.07 05:08) [2]


Извините Пожалуйста! Но ваша оптимизация не работает!


evvcom   (2007-09-05 08:39:00) [34]

procedure TForm1.UniversalHandler(Sender: TObject);
...
 if Sender = Self then <действия специфичные для твоего обработчика FormCreate>
 if Sender = BitBtn1 then <уже думаю понятно?>
 if Sender = RadioButton2 then ...
...
end;


Slym   (2007-09-05 05:08:00) [35]

type
 TUserCallBack=procedure(const Service,User:variant);

procedure ForEachUser(Proc:TUserCallBack);
var
 Service:variant;
 UserList,User,UserAttr,UserState:variant;
 i:integer;
 GUID : String;
 Name : String;
begin
 CoInitialize(nil);
 try
   Service:=CoTrafInspAdmin.CreateRemote('192.168.0.1');
   try
     Service.APILogon('1234567');
     UserList:=Service.APIGetBillProp(APIObjectTypeUser,'');
     if not VarIsArray(UserList) then ; //Error
     for i:= VarArrayLowBound(UserList, 1) to VarArrayHighBound(UserList, 1) do
     begin
       User:= UserList[i];
       GUID:= User[1];
       UserAttr := Service.APIGetAttr(3, GUID, User_IPAddr);
       UserState:= Service.APIGetUserState(GUID);
       Name:= UserState[0];
       Proc(Service,User);
     end;
   finally
     Service:=null;
   end
 finally
   CoUninitialize;;
 end
end;

procedure TForm1.FormCreate(Sender: TObject);
 procedure Proc(const Service,User:variant);
   var UserState:variant;
 begin
   UserState:=Service.APIGetUserState(User[1]);
   Memo1.Lines.Add(UserState[0]);
 end;
begin
 Memo1.Clear;
 ForEachUser(@Proc);
end;

procedure TForm1.BitBtn1Click(Sender: TObject);
 procedure Proc(const Service,User:variant);
 begin
   Service.APISetUserState(User[1], Cash0+StrToFloat(Summ.text), -1, 'Script', 'Добавлено:'+(Summ.text)+' Мб');
 end;
begin
 ForEachUser(@Proc);
end;

procedure TForm1.RadioButton2Click(Sender: TObject);
 procedure Proc(const Service,User:variant);
   var UserState:variant;
 begin
   UserState:=Service.APIGetUserState(User[1]);
   Memo1.Lines.Add(UserState[0]);
 end;
begin
Memo1.Clear;
ForEachUser(@Proc);
end;


DrPass   (2007-09-04 23:22:00) [36]


> Как можно оптимизировать этот код?

Тебе по размеру или по быстродействию?


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо