Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #16  
Старый 14.04.2013, 12:25
Аватар для Bargest
Bargest Bargest вне форума
Профессионал
 
Регистрация: 19.10.2010
Адрес: Москва
Сообщения: 2,390
Версия Delphi: XE3/VS12/FASM
Репутация: 14665
По умолчанию

Наверно имелось в виду, везде Edit4 есть результат Ctrl+C - Ctrl+V и невнимательности, и команды на самом деле разные.
Другое дело, что можно собирать по шагам в большую строку из кучи Edit'ов. Однако скорее всего в ближайшем будущем может понадобиться задержка между командами, т.к. всякого рода оборудование, отличное от компов, задержки очень любит.
__________________
jmp $ ; Happy End!
The Cake Is A Lie.
Ответить с цитированием
  #17  
Старый 14.04.2013, 13:01
darchken darchken вне форума
Прохожий
 
Регистрация: 31.03.2013
Сообщения: 29
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

2Bargest
Да, вы правы, невнимательность и копипаст. Там разные команды, т.е.:
com1:=edit1.Text;
com2:=edit2.Text;
com3:=edit3.Text;
com4:=edit4.Text;
com5:=edit5.Text;

2Alegun
Виноват, ввел в заблуждение не правильно задав вопрос. На самом деле сделдано сейчас именно таким образом:

Код:
com1:=edit1.Text;
com2:=edit2.Text;
com3:=edit3.Text;
com4:=edit4.Text;
com5:=edit5.Text;

for i:=1 to length(com1) do idtelnet1.sendch(com1[i]);
for i:=1 to length(com2) do idtelnet1.sendch(com2[i]);
for i:=1 to length(com3) do idtelnet1.sendch(com3[i]);
for i:=1 to length(com4) do idtelnet1.sendch(com4[i]);
for i:=1 to length(com5) do idtelnet1.sendch(com5[i]);


и хотел все это сократить так:
Код:
for j:=1 to 5 do begin
  for i:=1 to length(com[j]) do idtelnet1.sendch(com[j,i]);

И команд на самом деле, в зависимости от условии, от 1 до 17, не сказать что прям текст такой большой получается, но все же хотелось как то красиво сделать.
Ответить с цитированием
  #18  
Старый 14.04.2013, 13:06
Аватар для Bargest
Bargest Bargest вне форума
Профессионал
 
Регистрация: 19.10.2010
Адрес: Москва
Сообщения: 2,390
Версия Delphi: XE3/VS12/FASM
Репутация: 14665
По умолчанию

Код:
var com:array[0..16] of AnsiStirng;
...
for j:=1 to N do begin
  for i:=1 to length(com[j]) do idtelnet1.sendch(com[j][i]);
Массив можно не делать, можно как предложил Alegun с FindComponent. Но если понадобятся задержки, и как следствие - отдельный поток для передачи, то пользователь может успеть случайно изменить введенное в Edit5 после того, как началась отправка и прошел, к примеру, Edit2. Тогда переданная инфа будет неверна. Я бы не стал так делать, учитывая поведение современных пользователей и закон Мерфи.
__________________
jmp $ ; Happy End!
The Cake Is A Lie.

Последний раз редактировалось Bargest, 14.04.2013 в 13:11.
Ответить с цитированием
  #19  
Старый 14.04.2013, 13:46
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Цитата:
Сообщение от Bargest
...Но если понадобятся задержки, и как следствие - отдельный поток для передачи, то пользователь может успеть случайно изменить введенное в Edit5 после того, как началась отправка и прошел, к примеру, Edit2. Тогда переданная инфа будет неверна. Я бы не стал так делать, учитывая поведение современных пользователей и закон Мерфи.
Код:
for i := 1 to 5 do
(FindComponent('Edit'+IntToStr(i)) as TEdit).Enabled:= false;
...
..
.
for i := 1 to 5 do
(FindComponent('Edit'+IntToStr(i)) as TEdit).Enabled:= true;



По теме:
А если сделать так (оформить в отдельную процедуру)
Код:
procedure TForm1.psl(ds: array of AnsiString);
 var
 i,j: integer;
 begin
for i := Low(ds) to High(ds) do
if ds[i]<>'' then for j := 1 to Length(ds[i]) do idtelnet1.sendch(ds[i][j]);
 end;
и вызывать в коде
Код:
var 
com: array [0..16] of AnsiStirng;
begin
com[1]:= 'command1';
com[2]:= 'command15';
com[4]:= 'command9';
com[5]:= 'command4';
com[7]:= 'command3';

psl(com);

end;
то тогда можно заполнять коммандами любые ячейки массива, не важно где и сколько, пустые будут пропускаться.

Последний раз редактировалось Alegun, 14.04.2013 в 14:14.
Ответить с цитированием
  #20  
Старый 21.04.2013, 15:22
darchken darchken вне форума
Прохожий
 
Регистрация: 31.03.2013
Сообщения: 29
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Всем привет!

Так вот, прогу свою закончил. Данная программулина предназначена для оборудования Алкатель ISAM 7301. Все работает. Но ... не стал применять финты которые вы рекомендовали, их просто не получится там применить, наверное, я так думаю, на половину, в общем код(предупреждаю код безобразен):
Код:
unit dslam;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Menus, IdBaseComponent, IdComponent, IdTCPConnection,
  IdTCPClient, IdTelnet;

type
  TForm1 = class(TForm)
    ComboBox1: TComboBox;
    Edit1: TEdit;
    Edit2: TEdit;
    ComboBox2: TComboBox;
    Edit3: TEdit;
    Edit4: TEdit;
    CheckBox1: TCheckBox;
    CheckBox2: TCheckBox;
    Button1: TButton;
    Memo1: TMemo;
    Edit6: TEdit;
    Label1: TLabel;
    Label2: TLabel;
    Label4: TLabel;
    Label5: TLabel;
    Label6: TLabel;
    Button2: TButton;
    Button3: TButton;
    IdTelnet1: TIdTelnet;
    Label7: TLabel;
    CheckBox3: TCheckBox;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure ComboBox1Change(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Edit1KeyPress(Sender: TObject; var Key: Char);
    procedure Edit2KeyPress(Sender: TObject; var Key: Char);
    procedure Edit3KeyPress(Sender: TObject; var Key: Char);
    procedure Edit4KeyPress(Sender: TObject; var Key: Char);
    procedure Edit6KeyPress(Sender: TObject; var Key: Char);
    procedure ComboBox1KeyPress(Sender: TObject; var Key: Char);
    procedure ComboBox2KeyPress(Sender: TObject; var Key: Char);
//    procedure N4Click(Sender: TObject);
//    procedure IdTelnet1Connect(Sender: TObject);
    procedure IdTelnet1DataAvailable(Sender: TIdTelnet;
      const Buffer: String);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure Button4Click(Sender: TObject);
//    procedure IdTelnet1Connected(Sender: TObject);
//    procedure N6Click(Sender: TObject);
//    procedure ComboBox1Change(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  serv, login, pass: string;
  i: byte;

implementation

{$R *.dfm}

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: char);
  begin
    case Key of 
      '0'..'9': key:=key;     
      '.', ',': key:='.';     
      #8: key:=key;           
    else key:=#0;           
  end;
end;

procedure TForm1.Edit2KeyPress(Sender: TObject; var Key: Char);
  begin
    case Key of
      '0'..'9': key:=key;
      '.', ',': key:='.';
      #8: key:=key;
    else key:=#0;
  end;
end;

procedure TForm1.Edit3KeyPress(Sender: TObject; var Key: Char);
  begin
    case Key of
      '0'..'9': key:=key;
      '.', ',': key:='.';
      #8: key:=key;
    else key:=#0;
  end;
end;

procedure TForm1.Edit4KeyPress(Sender: TObject; var Key: Char);
  begin
    case Key of
      '0'..'9': key:=key;
      '.', ',': key:='.';
      #8: key:=key;
    else key:=#0;
  end;
end;


procedure TForm1.Edit6KeyPress(Sender: TObject; var Key: Char);
  begin
    case Key of
      '0'..'9': key:=key;
      '.', ',': key:='.';
      #8: key:=key;
    else key:=#0;
  end;
end;

procedure TForm1.ComboBox1KeyPress(Sender: TObject; var Key: Char);
  begin
    case Key of
      '0'..'9': key:=key;
      '.', ',': key:='.';
      #8: key:=key;
    else key:=#0;
  end;
end;

procedure TForm1.ComboBox2KeyPress(Sender: TObject; var Key: Char);
  begin
    case Key of
      '0'..'9': key:=key;
      '.', ',': key:='.';
      #8: key:=key;
    else key:=#0;
  end;
end;

procedure TForm1.IdTelnet1DataAvailable(Sender: TIdTelnet; const Buffer: String);
const
  CR=#13;
  LF=#10;
var
  Start, Stop: integer;
  begin
    memo1.Lines.Add('');
    start:=1;
    stop:=Pos(CR, Buffer);
    if stop = 0 then
      stop:=length(buffer)+1;
    while start<=length(buffer) do
      begin
        memo1.Lines.Strings[memo1.Lines.Count - 1]:=
        memo1.Lines.Strings[memo1.Lines.count - 1] +
        copy(buffer, start, stop - start);
        if buffer[stop] = CR then begin
            memo1.Lines.Add('');
        end;
        start:=stop+1;
        if start > length(buffer) then break;
        if buffer[start] = LF then start:=start+1;
        stop:=start;
        while (buffer[stop] <> CR) and (stop <=length(buffer)) do
        stop:=stop+1;
      end;
  end;


procedure TForm1.Button2Click(Sender: TObject);
  begin
    memo1.Lines.Clear;
//    if idtelnet1.Connected then begin
//      idtelnet1.Disconnect;
//      memo1.Lines.Add('Соединение разорвано!');
//    end;
    combobox1.ItemIndex:=-1;
    combobox2.ItemIndex:=-1;
    Edit1.Text:=('0');
    Edit2.Text:=('0');
    Edit3.Text:=('0');
    Edit4.Text:=('0');
    Edit6.Text:=('0');
    checkbox1.Checked:=false;
    checkbox2.Checked:=false;
  end;

procedure TForm1.ComboBox1Change(Sender: TObject);
var
  cmd:string;
  begin
    memo1.Clear;
if idtelnet1.Connected then begin cmd:='logout' + #13; for i:=1 to length(cmd) do idtelnet1.SendCh(cmd[i]); end;
if combobox1.ItemIndex = 0 then begin memo1.Lines.Add('telnet 10.244.00.02'); serv:='10.244.00.02'; end; //if
... здесь было много-много оборудования
if combobox1.ItemIndex = 163 then begin memo1.Lines.Add('telnet 10.244.00.03 '); serv:='10.244.0.03'; end;
    idtelnet1.Host:=serv;
  end;

procedure TForm1.Button3Click(Sender: TObject);
  var
    cmd0, cmd,login,pass: string;
    vpi: byte;
  begin
    vpi:=strtoint(edit6.Text);
    login:='superlogin';
    pass:='superpassword';
    IF vpi > 0 then begin
      if not idtelnet1.Connected then begin
        idtelnet1.Connect;
        for i:=1 to length(login) do idtelnet1.SendCh(login[i]);
        idtelnet1.SendCh(#13);
        for i:=1 to length(pass) do idtelnet1.SendCh(pass[i]);
        idtelnet1.SendCh(#13);
        memo1.Lines.Add('Ñîåäèíåíèå óñòàíîâëåíî ñ îáîðóäîâàíèåì: ' + combobox1.Text + ', IP-àäðåñ: ' + serv);
      end;  //if not
      cmd0:='info configure xdsl line 1/1/' + Edit1.Text + '/' + Edit2.Text + ' | match exact:service' + #13;
      for i:=1 to length(cmd0) do idtelnet1.SendCh(cmd0[i]);
      cmd:='info configure bridge port 1/1/' + Edit1.Text + '/' + Edit2.Text + ':0:' + Edit6.Text + ' | match exact:vlan-id' + #13;
      for i:=1 to length(cmd) do idtelnet1.SendCh(cmd[i]);
    end; //if vpi
  end;


procedure TForm1.Button4Click(Sender: TObject);
var
  com19: string;
  begin
    com19:='logout' + #13;
    for i:=1 to length(com19) do idtelnet1.SendCh(com19[i]);
  end;


procedure TForm1.Button1Click(Sender: TObject);
var
  slot, port, vpi{, i, j}: byte;
  ovlan, nvlan, prof: integer;
  cmd, cmd0, com1, com2, com3, com4, com5, com6, com7, com8, com9, com10, com11, com12, com13, com14, com15, com16, com17, login, pass: string;
  begin
    login:='superlogin';
    pass:='superpassword';
    slot:=StrToInt(Edit1.Text);
    port:=StrToInt(Edit2.Text);
    prof:=combobox2.ItemIndex+200;
    vpi:=strtoint(edit6.Text);
    ovlan:=StrToInt(Edit3.Text);
    nvlan:=StrToInt(Edit4.Text);
    if (slot {and port} > 0) and (port > 0) then begin
        if not idtelnet1.Connected then begin
          idtelnet1.Connect;
          for i:=1 to length(login) do idtelnet1.SendCh(login[i]);
          idtelnet1.SendCh(#13);
          for i:=1 to length(pass) do idtelnet1.SendCh(pass[i]);
          idtelnet1.SendCh(#13);
          memo1.Lines.Add('Ñîåäèíåíèå óñòàíîâëåíî ñ îáîðóäîâàíèåì: ' + combobox1.Text + ', IP-àäðåñ: ' + serv);
        end;  //if not
Ответить с цитированием
  #21  
Старый 21.04.2013, 15:23
darchken darchken вне форума
Прохожий
 
Регистрация: 31.03.2013
Сообщения: 29
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Код:
     if (ovlan {and nvlan and vpi} > 0) and (nvlan > 0) and (vpi > 0) then begin
        if not idtelnet1.Connected then begin
          idtelnet1.Connect;
          for i:=1 to length(login) do idtelnet1.SendCh(login[i]);
          idtelnet1.SendCh(#13);
          for i:=1 to length(pass) do idtelnet1.SendCh(pass[i]);
          idtelnet1.SendCh(#13);
        end;  //if not
        if checkbox3.Checked then begin
          com1:='configure vlan id '+ edit4.Text + ' name ' + edit4.Text + ' mode residential-bridge' + #13 + 'exit all' + #13;
          for i:=1 to length(com1) do idtelnet1.SendCh(com1[i]);
          com2:='configure vlan shub id '+ edit4.Text + ' mode residential-bridge' + #13 + 'exit all' + #13;
          for i:=1 to length(com2) do idtelnet1.SendCh(com2[i]);
          com3:='configure vlan shub id '+ edit4.Text + ' egress-port lt:1/1/[4...19]' + #13;
          for i:=1 to length(com3) do idtelnet1.SendCh(com3[i]);
          com4:='configure vlan shub id '+ edit4.Text + ' egress-port lt:1/1/[1...8]' + #13;
          for i:=1 to length(com4) do idtelnet1.SendCh(com4[i]);
          com5:='configure vlan shub id '+ edit4.Text +  ' egress-port lt:1/1/[12...19]' + #13;
          for i:=1 to length(com5) do idtelnet1.SendCh(com5[i]);
          com6:='configure vlan shub id '+ edit4.Text + ' egress-port network:0' + #13;
          for i:=1 to length(com6) do idtelnet1.SendCh(com6[i]);
          com7:='configure vlan shub id '+ edit4.Text + ' egress-port network:1' + #13;
          for i:=1 to length(com7) do idtelnet1.SendCh(com7[i]);
          com8:='configure vlan shub id '+ edit4.Text + ' egress-port network:2' + #13;
          for i:=1 to length(com8) do idtelnet1.SendCh(com8[i]);
          com9:='configure vlan shub id '+ edit4.Text + ' egress-port network:3' + #13 + 'exit all' + #13;
          for i:=1 to length(com9) do idtelnet1.SendCh(com9[i]);
        end;// if checkbox3
        com10:='configure bridge port 1/1/' + Edit1.Text + '/' + Edit2.text +':0:' + Edit6.text + ' no pvid' + #13 + 'exit all' + #13;
          for i:=1 to length(com10) do idtelnet1.SendCh(com10[i]);
        com11:='configure bridge port 1/1/' + Edit1.Text + '/' + Edit2.text +':0:' + Edit6.text + ' no vlan-id ' + Edit3.text + #13 + 'exit all' + #13;
          for i:=1 to length(com11) do idtelnet1.SendCh(com11[i]);
        com12:='configure bridge port 1/1/' + Edit1.Text + '/' + Edit2.text + ':0:' + Edit6.text + ' vlan-id ' + Edit4.text + #13 + 'exit all' + #13;
          for i:=1 to length(com12) do idtelnet1.SendCh(com12[i]);
        com13:='configure bridge port 1/1/' + Edit1.Text + '/' + Edit2.text +':0:' + Edit6.text + ' pvid ' + Edit4.text + #13 + 'exit all' + #13;
          for i:=1 to length(com13) do idtelnet1.SendCh(com13[i]);
        if prof<>199 then begin
        cmd0:='info configure bridge port 1/1/' + Edit1.Text + '/' + Edit2.Text + ':0:' + Edit6.Text + ' flat' + #13;
          for i:=1 to length(cmd0) do idtelnet1.SendCh(cmd0[i]);
        com14:='configure xdsl line 1/1/'+ Edit1.Text +'/'+ Edit2.Text +' service-profile ' + IntToStr(prof) + #13 + 'exit all' + #13;
          for i:=1 to length(com14) do idtelnet1.SendCh(com14[i]);
        end; //if prof<>
        if checkbox1.Checked then
        begin
          com15:='configure atm pvc 1/1/' + Edit1.Text +'/'+ Edit2.Text +':0:'+ Edit6.Text +' admin-down' + #13 + 'exit all' + #13;
          for i:=1 to length(com15) do idtelnet1.SendCh(com15[i]);
        end;
        if checkbox2.Checked then
        begin
          com15:='configure xdsl line 1/1/' + Edit1.Text +'/'+ Edit2.Text +' admin-up' + #13 + 'exit all' + #13;
          com16:='configure atm pvc 1/1/' + Edit1.Text +'/'+ Edit2.Text+ ':0:'+ Edit6.Text +' no admin-down' + #13 + 'exit all' + #13;
          for i:=1 to length(com15) do idtelnet1.SendCh(com15[i]);
          for i:=1 to length(com16) do idtelnet1.SendCh(com16[i]);
        end;
        com17:='logout' + #13;
        //for j:=1 to 20 do
        for i:=1 to length(com17) do idtelnet1.SendCh(com17[i]);
        memo1.Lines.Add('******************************************************************************************************');
        memo1.Lines.Add(combobox1.Text + '-àëêàòåëü, ñëîò-' + Edit1.Text + ' ïîðò-' + Edit2.Text + ' âëàí-' + Edit4.Text );
        memo1.Lines.Add('******************************************************************************************************');
      end //fi ovlan
      else //if ovlan
      if prof >= 200 then begin
      cmd0:='info configure xdsl line 1/1/' + Edit1.Text + '/' + Edit2.Text + ' | match exact:service' + #13;
      for i:=1 to length(cmd0) do idtelnet1.SendCh(cmd0[i]);
      cmd:='info configure bridge port 1/1/' + Edit1.Text + '/' + Edit2.Text + ':0:' + Edit6.Text + ' | match exact:vlan-id' + #13;
      for i:=1 to length(cmd) do idtelnet1.SendCh(cmd[i]);
        com1:='configure xdsl line 1/1/'+ Edit1.Text +'/'+ Edit2.Text +' service-profile ' + IntToStr(prof) + #13 + 'exit all'  + #13;
        for i:=1 to length(com1) do idtelnet1.SendCh(com1[i]);
        if checkbox1.Checked then begin
            com2:='configure atm pvc 1/1/' + Edit1.Text +'/'+ Edit2.Text+ ':0:'+ Edit6.Text +' admin-down' + #13 + 'exit all'  + #13;
            for i:=1 to length(com2) do idtelnet1.SendCh(com2[i]);
        end; //if checkbox1
        if checkbox2.Checked then begin
            com2:='configure xdsl line 1/1/' + Edit1.Text +'/'+ Edit2.Text +' admin-up' + #13 + 'exit all'  + #13;
            com3:='configure atm pvc 1/1/' + Edit1.Text +'/'+ Edit2.Text+ ':0:'+ Edit6.Text +' no admin-down' + #13 + 'exit all'  + #13;
            for i:=1 to length(com2) do idtelnet1.SendCh(com2[i]);
            for i:=1 to length(com3) do idtelnet1.SendCh(com3[i]);
        end; //if checkbox2
      end  //if prof
      else //if prof
        begin
        if checkbox1.Checked then begin
            com2:='configure atm pvc 1/1/' + Edit1.Text +'/'+ Edit2.Text+ ':0:'+ Edit6.Text +' admin-down' + #13 + 'exit all'  + #13;
            for i:=1 to length(com2) do idtelnet1.SendCh(com2[i]);
        end; //if checkbox1
        if checkbox2.Checked then begin
            com2:='configure xdsl line 1/1/' + Edit1.Text +'/'+ Edit2.Text +' admin-up' + #13 + 'exit all'  + #13;
            com3:='configure atm pvc 1/1/' + Edit1.Text +'/'+ Edit2.Text+ ':0:'+ Edit6.Text +' no admin-down' + #13 + 'exit all'  + #13;
            for i:=1 to length(com2) do idtelnet1.SendCh(com2[i]);
            for i:=1 to length(com3) do idtelnet1.SendCh(com3[i]);
        end; //if checkbox2
        end;
      com17:='logout' + #13;
      for i:=1 to length(com17) do idtelnet1.SendCh(com17[i]);
    end
    else showmessage('Íå äîñòàòî÷íî äàííûõ!!');
  end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
if idtelnet1.Connected then idtelnet1.Disconnect;
end;
end.
И еще могли бы посмотреть что можно было бы улучшить в коде, какие нибудь финты. Рекомендованные не применил по причине того что некоторые команды должен выполнять при определенных условии, поэтому оставил так как есть.
Ответить с цитированием
  #22  
Старый 21.04.2013, 18:40
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Цитата:
Сообщение от darchken
...что можно было бы улучшить в коде, какие нибудь финты...
Можно убрать из кода порнографию в виде повторяющиеся процедур прессовки едитов и комбобоксов, оставив одну лишь Edit1KeyPress и задав в инспекторе её всем остальным.
Ответить с цитированием
  #23  
Старый 21.04.2013, 19:35
darchken darchken вне форума
Прохожий
 
Регистрация: 31.03.2013
Сообщения: 29
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

)))))))))

и вправду чот не подумал
Ответить с цитированием
  #24  
Старый 22.04.2013, 18:47
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Ещё можно сфинтить так
Код:
procedure TForm1.snd(ds: string);
var
i: integer;
begin
for i:=1 to length(ds) do idtelnet1.SendCh(ds[i]);
idtelnet1.SendCh(#13);
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  slot, port, vpi{, i, j}: byte;
  ovlan, nvlan, prof: integer;
  login, pass: string;
  begin
    login:= 'superlogin';
    pass:= 'superpassword';
    slot:= StrToInt(Edit1.Text);
    port:= StrToInt(Edit2.Text);
    prof:= ComboBox2.ItemIndex + 200;
    vpi:= StrToInt(Edit6.Text);
    ovlan:= StrToInt(Edit3.Text);
    nvlan:= StrToInt(Edit4.Text);

    if (slot {and port} > 0) and (port > 0) then
    begin
        if not idtelnet1.Connected then
        begin
          idtelnet1.Connect;
{login}   snd(login);
{pass}    snd(pass);
          memo1.Lines.Add('Соединение установлено с оборудованием: ' +
          combobox1.Text + ', IP-адрес: ' + serv);
        end;  //if not
 if (ovlan {and nvlan and vpi} > 0) and (nvlan > 0) and (vpi > 0) then
 begin
      if not idtelnet1.Connected then
       begin
        idtelnet1.Connect;
{login}   snd(login);
{pass}    snd(pass);
       end;  //if not

        if checkbox3.Checked then begin
{com1}    snd('configure vlan id '+ edit4.Text + ' name ' + edit4.Text + ' mode residential-bridge' + #13 + 'exit all');
{com2}    snd('configure vlan shub id '+ edit4.Text + ' mode residential-bridge' + #13 + 'exit all');
{com3}    snd('configure vlan shub id '+ edit4.Text + ' egress-port lt:1/1/[4...19]');
{com4}    snd('configure vlan shub id '+ edit4.Text + ' egress-port lt:1/1/[1...8]');
{com5}    snd('configure vlan shub id '+ edit4.Text + ' egress-port lt:1/1/[12...19]');
{com6}    snd('configure vlan shub id '+ edit4.Text + ' egress-port network:0');
{com7}    snd('configure vlan shub id '+ edit4.Text + ' egress-port network:1');
{com8}    snd('configure vlan shub id '+ edit4.Text + ' egress-port network:2');
{com9}    snd('configure vlan shub id '+ edit4.Text + ' egress-port network:3' + #13 + 'exit all');
        end;// if checkbox3

{com10}   snd('configure bridge port 1/1/' + Edit1.Text + '/' + Edit2.text +':0:' + Edit6.text + ' no pvid' + #13 + 'exit all');
{com11}   snd('configure bridge port 1/1/' + Edit1.Text + '/' + Edit2.text +':0:' + Edit6.text + ' no vlan-id ' + Edit3.text + #13 + 'exit all');
{com12}   snd('configure bridge port 1/1/' + Edit1.Text + '/' + Edit2.text + ':0:' + Edit6.text + ' vlan-id ' + Edit4.text + #13 + 'exit all');
{com13}   snd('configure bridge port 1/1/' + Edit1.Text + '/' + Edit2.text +':0:' + Edit6.text + ' pvid ' + Edit4.text + #13 + 'exit all');

        if prof<>199 then begin
{cmd0}    snd('info configure bridge port 1/1/' + Edit1.Text + '/' + Edit2.Text + ':0:' + Edit6.Text + ' flat');
{com14}   snd('configure xdsl line 1/1/'+ Edit1.Text +'/'+ Edit2.Text +' service-profile ' + IntToStr(prof) + #13 + 'exit all');
        end; //if prof<>

        if checkbox1.Checked then
{com15}   snd('configure atm pvc 1/1/' + Edit1.Text +'/'+ Edit2.Text +':0:'+ Edit6.Text +' admin-down' + #13 + 'exit all');

        if checkbox2.Checked then
        begin
{com15}   snd('configure xdsl line 1/1/' + Edit1.Text +'/'+ Edit2.Text +' admin-up' + #13 + 'exit all');
{com16}   snd('configure atm pvc 1/1/' + Edit1.Text +'/'+ Edit2.Text+ ':0:'+ Edit6.Text +' no admin-down' + #13 + 'exit all');
        end;
        //for j:=1 to 20 do
{com17}   snd('logout');

        memo1.Lines.Add('******************************************************************************************************');
        memo1.Lines.Add(combobox1.Text + '-алкатель, слот-' + Edit1.Text + ' порт-' + Edit2.Text + ' влан-' + Edit4.Text);
        memo1.Lines.Add('******************************************************************************************************');

      end //fi ovlan
      else //if ovlan
      if prof >= 200 then
       begin
{cmd0}    snd('info configure xdsl line 1/1/' + Edit1.Text + '/' + Edit2.Text + ' | match exact:service');
{cmd}     snd('info configure bridge port 1/1/' + Edit1.Text + '/' + Edit2.Text + ':0:' + Edit6.Text + ' | match exact:vlan-id');
{com1}    snd('configure xdsl line 1/1/'+ Edit1.Text +'/'+ Edit2.Text +' service-profile ' + IntToStr(prof) + #13 + 'exit all');

        if checkbox1.Checked then
{com2}    snd('configure atm pvc 1/1/' + Edit1.Text +'/'+ Edit2.Text+ ':0:'+ Edit6.Text +' admin-down' + #13 + 'exit all');

        if checkbox2.Checked then
         begin
{com2}    snd('configure xdsl line 1/1/' + Edit1.Text +'/'+ Edit2.Text +' admin-up' + #13 + 'exit all');
{com3}    snd('configure atm pvc 1/1/' + Edit1.Text +'/'+ Edit2.Text+ ':0:'+ Edit6.Text +' no admin-down' + #13 + 'exit all');
         end; //if checkbox2
      end else //if prof
        begin
        if checkbox1.Checked then
        begin
{com2}    snd('configure atm pvc 1/1/' + Edit1.Text +'/'+ Edit2.Text+ ':0:'+ Edit6.Text +' admin-down' + #13 + 'exit all');
        end; //if checkbox1
        if checkbox2.Checked then
        begin
{com2}    snd('configure xdsl line 1/1/' + Edit1.Text +'/'+ Edit2.Text +' admin-up' + #13 + 'exit all');
{com3}    snd('configure atm pvc 1/1/' + Edit1.Text +'/'+ Edit2.Text+ ':0:'+ Edit6.Text +' no admin-down' + #13 + 'exit all');
        end; //if checkbox2
        end;
{com17}  snd('logout');
    end
     else showmessage('Не достаточно данных!!');
  end;


end;
Ответить с цитированием
  #25  
Старый 25.04.2013, 07:17
darchken darchken вне форума
Прохожий
 
Регистрация: 31.03.2013
Сообщения: 29
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

ух ты, ваще красотище!
Спасибо, Alegun! Вот это я понимаю код и сразу понятно что откуда и куда.
Ответить с цитированием
  #26  
Старый 25.04.2013, 07:40
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Ещё привлекло внимание вот это место,
Код:
procedure TForm1.ComboBox1Change(Sender: TObject);
var
  cmd:string;
  begin
    memo1.Clear;
if idtelnet1.Connected then begin cmd:='logout' + #13; for i:=1 to length(cmd) do idtelnet1.SendCh(cmd[i]); end;
if combobox1.ItemIndex = 0 then begin memo1.Lines.Add('telnet 10.244.00.02'); serv:='10.244.00.02'; end; //if
... здесь было много-много оборудования
if combobox1.ItemIndex = 163 then begin memo1.Lines.Add('telnet 10.244.00.03 '); serv:='10.244.0.03'; end;
    idtelnet1.Host:=serv;
  end;
можно переделать, особенно
Цитата:
... здесь было много-много оборудования
прям просится здесь подсократить, если не трудно, можно полную версию процедуры показать, или здесь или в личку.
Ответить с цитированием
  #27  
Старый 29.04.2013, 12:04
darchken darchken вне форума
Прохожий
 
Регистрация: 31.03.2013
Сообщения: 29
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Код:
if combobox1.ItemIndex = 0 then begin memo1.Lines.Add('telnet 10.244.00.02'); serv:='10.244.00.02'; end; //if
... здесь было много-много оборудования
if combobox1.ItemIndex = 163 then begin memo1.Lines.Add('telnet 10.244.00.03 '); serv:='10.244.0.03'; end;
а там так все и повторяется от 0 до 163-го т.е. меняется только ип-адреса. здесьж присваиваем ип для переменной serv. Да и кстати в коде в этом метсе я убрал мемо и оставил просто:
Код:
if combobox1.ItemIndex = 163 then serv:='10.244.0.03';
Ответить с цитированием
  #28  
Старый 13.05.2013, 15:59
darchken darchken вне форума
Прохожий
 
Регистрация: 31.03.2013
Сообщения: 29
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Люди не сочтите за наглость, но могли бы помочь с другой программой для бэкапов настроек целогоо списка оборудования. Как я вижу данную прогу:

на форме только мемо и

procedure TForm1.FormCreate(Sender: TObject);
begin
//idtelnet1.Terminal:='VT100';
host:='huawei-941';
ip:='100.244.003.002';
cmd:='q' + #13 + 'en' + #13 + 'backup configuration ftp 10.244.57.205 ' + host + '-' + datetimetostr(date);
IdTelnet1.Host:=ip;
IdTelnet1.Connect;
snd('rroot');
snd('rootpass');
snd(cmd);
snd('y');
snd(logout);
end;

Но вот ньюанс, не знаю как реализовать чтобы он выполнил эту команду на целом списке оборудовании и выдерживал паузу после команды snd(cmd). Я тут подумал нельзя ли сделать процедуру внутри процедуры, т.е. одна будет перечислять ип адреса оборудования, а вторая, в которой будет первая процедура, будет уже выполнять вышеуказанную процедуру. Ну или как то так чот я уже сам запутался))).
Ответить с цитированием
  #29  
Старый 15.05.2013, 19:23
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,505
Версия Delphi: XE10
Репутация: выкл
По умолчанию

ЙОООЛКИ... Форум нуджается в теге "spoiler", такие портянки эпичные напостили.
__________________
— Как тебя понимать?
— Понимать меня не обязательно. Обязательно меня любить и кормить вовремя.


На Delphi, увы, больше не программирую.
Рекомендуемая литература по программированию
Ответить с цитированием
  #30  
Старый 15.05.2013, 20:22
darchken darchken вне форума
Прохожий
 
Регистрация: 31.03.2013
Сообщения: 29
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Кстати, почему то когда отправляет рута съедает первую букву поэтому сделал два раза р (rroot)
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 14:49.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter