![]() |
| ||
|
|
Новости |
Поиск |
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.
evvcom (2007-09-06 12:51:00) [1]
> GUID вынес из процедуру к глобальным переменным:
ООП фтопку!!! Делай как Толик!!!!! :-)
С.Толик (2007-09-05 13:36:00) [2]Да однозначно!
Slym (2007-09-05 13:23:00) [3]26! - мелочь :) ты сюда посмотри http://www.delphimaster.ru/cgi-bin/forum.pl?id=1188795881&n=3скока соптимизировать можно :)
С.Толик (2007-09-05 13:13:00) [4]Всё ок!
З.Ы. Итого: Оптимизировали 26 строккода и научили мыслить в нужном направлении!
Спасибо за Оптимизацию и Учение!
Slym (2007-09-05 13:08:00) [5]кто такой Cash0 : OleVariant; и где его заполняют?
Slym (2007-09-05 13:07:00) [6]
type
TUserCallBack=procedure(const Service,User:variant);
procedure ForEachUser(Proc:TUserCallBack);
var
Service,UserList:variant;
i:integer;
begin
CoInitialize(nil);
try
Service:=CoTrafInspAdmin.CreateRemote('192.168.0.60') as IDispatch;
try
Service.APILogon('123');
UserList:=Service.APIGetBillProp(APIObjectTypeUser,'');
if not VarIsArray(UserList) then raise Exception.Create('No UserList');
for i:= VarArrayLowBound(UserList, 1) to VarArrayHighBound(UserList, 1) do
Proc(Service,UserList[i]);
finally
Service:=null;
end
finally
CoUninitialize;;
end
end;
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);
begin
with Form1 do
Memo1.Lines.Add(User[1]);
end;
begin
Memo1.Clear;
ForEachUser(@Proc);
end;
С.Толик (2007-09-05 12:58:00) [7]
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;
GroupBox3: TGroupBox;
IP: TEdit;
Label2: TLabel;
Label3: TLabel;
Password: TEdit;
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;
GUID : String;
implementation
{$R *.dfm}
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.60') as IDispatch;
try
Service.APILogon('123');
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
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
with Form1 do
begin
UserState:=Service.APIGetUserState(User[1]);
Memo1.Lines.Add( GUID);
end;
end;
begin
Memo1.Clear;
ForEachUser(@Proc);
end;
end.
Slym (2007-09-05 12:56:00) [8]С.Толик (05.09.07 12:51) [28]
GUID вынес из процедуру к глобальным переменным
На}{ера?
конечный код показывай
С.Толик (2007-09-05 12:51:00) [9]все решил!
GUID вынес из процедуру к глобальным переменным:
var
Cash0 : OleVariant;
GUID : String;
Все норм терь!
Slym (2007-09-05 12:50:00) [10]GUID:= User[1];
Slym (2007-09-05 12:48:00) [11]ну хоть чтото выводится? и ошибки нет?
С.Толик (2007-09-05 12:46:00) [12]Должно выводится:
При клике на батон1 в мемо1 выводится сие - Name : String;
При клике на батон2 в мемо1 выводится сие - GUID : String;
А сейчас:
UserState:=Service.APIGetUserState(User[1]);
Memo1.Lines.Add( UserState[0]);
GUID - Не выводится!
Slym (2007-09-05 12:40:00) [13]кстати этот оборот/способ называется callback...
Радио батоны не реагирують теперь
они же не молчат... на какой строке и что не пашет?
С.Толик (2007-09-05 12:35:00) [14]Cash0 : OleVariant; а енто не то разве?
Slym (2007-09-05 12:31:00) [15]procedure TForm1.RadioButton2Click(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;
Slym (2007-09-05 12:31:00) [16]акарал . не туда...
Slym (2007-09-05 12:29:00) [17]попробуй пропесадЪ полный путь до следующихпеременных:
Service.APISetUserState(User[1], Cash0+StrToFloat( Summ.text), -1, 'Script', 'Добавлено:'+( Summ.text)+' Мб');
С.Толик (2007-09-05 12:27:00) [18]Радио батоны не реагирують теперь!
begin
Memo1.Clear;
ForEachUser(@Proc);
end;
Slym (2007-09-05 12:22:00) [19]тады понятно
var
Service:CoTrafInspAdmin;
или
Service:=CoTrafInspAdmin.CreateRemote('192.168.0.60') as IDispatch;
Slym (2007-09-05 12:21:00) [20]у меня нет CoTrafInspAdmin и проверить не могу :)
Proc(Service,User); замени на Proc(Service as IDispatch,User);
или замени декларацию
type
TUserCallBack=procedure(Service:CoTrafInspAdmin;User:variant);
и соответственно
procedure Proc(Service:CoTrafInspAdmin;User:variant);