Entwickler-Ecke

Windows API - Selbstschließende Message....


ProDelUse - Sa 11.10.03 14:02
Titel: Selbstschließende Message....
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 - 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


ProDelUse - 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:

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:

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 - So 12.10.03 19:34

Zitat:

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

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


maxk - So 12.10.03 19:50

Wenn ich dich recht verstehe:

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


MrSaint - So 12.10.03 20:35


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

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