Autor Beitrag
ProDelUse
Hält's aus hier
Beiträge: 4



BeitragVerfasst: Sa 11.10.03 14:02 
Hi leutz,
bin grad an nem Prog, was mehrere Befehle auf unterschiedlichen Routern mithilfe der Telnet - IndyKomponente ausführt und den Rückgabewert dann in ein Textfile speichert...

So und nun hab ich folgendes Problem:

Ich brauch einen Messagedlg oder irgendeine messagebox, die alle prozesse anhält eine Pause von ca. 1 Sekunde oder länger macht und das Prog dann weiterlaufen lässt!

Also praktisch:

messagedlg('IrgendeinText',mtInformation,[mbOK],0); -> das dann nach einer Sekunde automatich schließt... , oder so!

Es muss nicht zwangsweise eine message sein, es kann auch irgendeine funktion bzw. procedure sein, die einfach das ganze Programm anhält und irgendwann fortsetzt!

Kennt sich da jemand aus?

Danke schon mal im Vorraus!

Ciaou,

ProDelUse

P.S.: Mit sleep(1000) etc. hab ich's schon probiert! funzt net! :cry:
MrSaint
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1033
Erhaltene Danke: 1

WinXP Pro SP2
Delphi 6 Prof.
BeitragVerfasst: So 12.10.03 12:29 
wenn das alles in einer proedurew abläuft, müsste sleep eigentlich funzen.... wenn du threads nimmst, kannst du die ja pausieren und nach 1 s wieder resumen!

gab mal n bissl code *lächz* :nut:


MrSaint

_________________
"people knew how to write small, efficient programs [...], a skill that has subsequently been lost"
Andrew S. Tanenbaum - Modern Operating Systems
ProDelUse Threadstarter
Hält's aus hier
Beiträge: 4



BeitragVerfasst: So 12.10.03 18:01 
Andere Frage: Gibt es einen Befehl (außer sleep()) mit dem man das komplette Programm anhalten kann und nach einer gewissen Zeit fortsetzen kann?

Mein Code sieht z.Z. so aus:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
procedure TForm1.Button2Click(Sender: TObject);
var r,zahler:Integer;
begin
getdir(0,s);

Form3.Table1.Open;

for r:=0 to Form3.Table1.RecordCount-1 do
begin

//Wenn diese showmessage nicht wäre, würde das nicht funzen!
  showmessage(inttostr(r+1)+'.Connection zu: '+DBEdit1.Text);
//mit sleep(1000-oder höher) geht's auch nicht!

  Form1.telnet.Disconnect

  starten(); //Connected mit dem Router und sendet Befehle...

  Memo1.Lines.Clear; //Wenn alles vorbei ist, dann den Rest...
  Form1.telnet.CheckForGracefulDisconnect();
  Form1.telnet.CheckForDisconnect();
  Form3.Table1.Next; 
end;

Form3.Table1.Close;
end;

Funktioniert auch alles soweit ganz gut... Nur wenn ich das showmessage weglasse, dann tut er so, als würd er nur einmal durch die Schleife gehen!

Naja, der Restliche Code sieht so aus:
ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
procedure connect(IP,username,pass:String);
var a:Integer;
begin
Form1.Telnet.Host := IP;
Form1.Telnet.Connect;

For a:= 1 TO Length(username) DO
 BEGIN
  Form1.Telnet.SendCh(username[a]);
  sleep(50);
 end;

Form1.Telnet.SendCh(#13);

For a:= 1 TO Length(pass) DO
 BEGIN
  Form1.Telnet.SendCh(pass[a]);
  sleep(50);
 end;

Form1.Telnet.SendCh(#13);

  sleep(50);
end;

procedure send_befehl(befehl:String);
var a:Integer;
begin

For a:=0 TO Length(befehl) DO
 BEGIN
  Form1.Telnet.SendCh(befehl[a]);
  sleep(50);
 end;

Form1.Telnet.SendCh(#13);
end;

procedure starten();
begin
 connect(Form1.DBEdit1.text,Form1.DBEdit2.Text,Form1.DBEdit3.Text);
 Form1.Label7.Caption:='Sitzung gestartet...';
 list.LoadFromFile(s+'\Data\'+Form1.DBEdit4.text+'.cmd');
 p:=0;
 
  repeat
   wert:=list.Strings[p];
   //showmessage(wert);
   send_befehl(wert);
   namen:=Form1.DBEdit5.text;
   inc(p);
  until p>list.Count-1;

 sleep(wait);
end;

Ciaou,

AV

P.S.: Das Hauptproblem liegt immer noch darin das komplette Prog anzuhalten und nach einer Sek. fortzusetzen - ohne showmessage();!

Moderiert von user profile iconTino: Code- durch Delphi-Tags ersetzt.
MSCH
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1448
Erhaltene Danke: 3

W7 64
XE2, SQL, DevExpress, DevArt, Oracle, SQLServer
BeitragVerfasst: So 12.10.03 19:34 
Zitat:
ausblenden Quelltext
1:
2:
3:
4:
5:
Form3.Table1.Open; 
for r:=0 to Form3.Table1.RecordCount-1 do 
begin 
  Form3.Table1.Next;
end;


Wenn du schon mit Tables in einer For-Schleife arbeitest, dann nimm doch
statt .next lieber Table.RecNo:= R oder
ausblenden Delphi-Quelltext
1:
2:
3:
4:
while not Table.eof do begin
...
  Table.Next;
end;


Gibts in deiner Telnet-Komponente eine Methode die aufgerufen wird, wenn Connect/disconnect? I.d.R. sind sind solche Kompos ansynchron, d.h. Sie reagieren u.U. nicht wie normale Kompos. Was ist das für eine Kompo?

grez
msch

_________________
ist das politisch, wenn ich linksdrehenden Joghurt haben möchte?
maxk
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1696
Erhaltene Danke: 1

Win XP, Debian Lenny
Delphi 6 Personal
BeitragVerfasst: So 12.10.03 19:50 
Wenn ich dich recht verstehe:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
      procedure TForm1.Button1Click(Sender: TObject);
      var AButton:TButton;
          i:integer;
      begin
       // Erzeugen des Messagefensters
       with CreateMessageDialog('Vorgang läuft...',mtWarning,[mbAbort]) do try
        Self.Enabled:=False; // Hauptfenster disablen
        for i:=0 to ComponentCount-1 do begin // Komponenten suchen
         if (Components[i] is TButton) then AButton:=(Components[i] as TButton);
        end;
        AButton.Enabled:=False;
        Show; // Fenster anzeigen
        Sleep(1000);
       finally
        Self.Enabled:=True; // Hauptfenster wieder enablen
        Self.SetFocus;      // und Fokus zuweisen
        Free;               // Messagefenster löschen
       end;
      end;

Nicht getestet

_________________
Ein Computer wird das tun, was Du programmierst - nicht das, was Du willst.
MrSaint
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1033
Erhaltene Danke: 1

WinXP Pro SP2
Delphi 6 Prof.
BeitragVerfasst: So 12.10.03 20:35 
ausblenden Quelltext
1:
2:
3:
  Form1.telnet.Disconnect 

  starten(); //Connected mit dem Router und sendet Befehle...


schon mal überlegt, dass der noch gar nich disconnected is und dann schon wieder connecten will? wird möglich durch threads und wenn das die Indy-Kompos sind, arbeiten die (galub ich zumindest) mit Threads!

also versuch doch mal n
ausblenden Quelltext
1:
repeat until not Form1.telnet.connected;					

zwischen die beiden Befehle reinzuhauen (bei den Indy Kompos). is nich die beste Lösung, aber um erstmal rauszufinden, ob das der Fehler is, müsste das genügen!


MrSaint

_________________
"people knew how to write small, efficient programs [...], a skill that has subsequently been lost"
Andrew S. Tanenbaum - Modern Operating Systems