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