![]() |
Schleife zum Wiederholen eines Sources
Delphi-Quellcode:
[edit=MrSpock]Code Tags eingefügt und Leerzeilen gelöscht[/edit]
unit Unit1;
interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,Dialogs, ShellAPI,StdCtrls, ExtCtrls; type TForm1 = class(TForm) Button1: TButton; Button2: TButton; Label1: TLabel; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; implementation {$R *.DFM} procedure TForm1.Button1Click(Sender: TObject); var i : Integer; w : hWnd; e : Integer; begin // Externes Programm oeffnen while w<>0 do begin ShellExecute(0, PChar ('open'), 'C:\Programme\InternetExplorer\IEXPLORE.EXE','', '',SW_SHOWMIMIMIZED); for i := 0 to 10 do begin Label1.Caption := IntToStr(i); Label1.Repaint; // Pause (in msec) Sleep(500); end; // Externes Programm oeffnen w := FindWindow(NIL,'about:blank - Microsoft Internet Explorer'); if W<>0 then PostMessage(W, wm_close, 1, 1); end; procedure TForm1.Button2Click(Sender: TObject); begin Close; end; end. WIE KANN ICH DEM PROGRAMM SAGEN DAS ES VON VORNE ANFANGEN SOLL? :cat: [edit=MrSpock] Mfg, MrSpock[/edit] [edit=sakura]Überschrift auf Kleinbuchstaben geändert. Mfg, sakura[/edit] |
Re: SCHLEIFE ZUM WIEDERHOLEN EINES SOURCES
Timer!?
|
Re: SCHLEIFE ZUM WIEDERHOLEN EINES SOURCES
Hallo davidwittesz,
in der Regel benutzt man dazu eine Schleife:
Delphi-Quellcode:
aufhoeren muss natürlich irgendwann einmal auf True gesetzt werden, sonst hast du eine Endlosschleife.
repeat
{ hier den Code, der wiederholt werden soll } until aufhoeren; [edit=MrSpock]Willkommensgruß vergesseb :mrgreen:[/edit] Herzlich willkommen im Delphi-PRAXIS Forum. |
Re: SCHLEIFE ZUM WIEDERHOLEN EINES SOURCES
wie muss ich den repead befeht einbringen das der prozess vom ersten begin bis zum letzten end; immer und immer wieder wiederholt wird biss ich auf einen butten clicke ?
|
Re: SCHLEIFE ZUM WIEDERHOLEN EINES SOURCES
Hi,
theoretisch kann dein Source gar nicht funktionieren, weil ein end; fehlt, dass zur while-Schleife gehört. Chris |
Re: SCHLEIFE ZUM WIEDERHOLEN EINES SOURCES
Hallo davidwittesz,
wenn du so etwas machen möchtset, bieten sich Threads an. Du erstellst einen Thread, den du solange laufen lässt, bis ein bestimmtest Event (z.B. das Drücken eines Schalters passiert. Das wichtige ist ja hierbei, dass während dein "Thread läuft" noch ein anderer Thread (das Hauptprogramm) aufpassen musst, wann die Bedingung zum Abbruch erfüllt ist. |
Re: SCHLEIFE ZUM WIEDERHOLEN EINES SOURCES
wie sieht den so ein thread aus ? die while schleife ist hier nicht zu beachten die habe ich vergessen zu endfernen, das war der erste versuch das programm zu wiederholen.
danke das ihr alle so fleißig antwortet :D -------------------------------------------------------------------------- david :cat: |
Re: SCHLEIFE ZUM WIEDERHOLEN EINES SOURCES
Hallo davidwittesz,
die Online Hilfe erklärt das Prinzip recht gut. Du leitest eine neue Klasse von TThread ab. Das wichtigste ist die Execute Methode, die du überschreibst:
Delphi-Quellcode:
Das Hauptprogramm terminiert (Arnie lässt grüßen :mrgreen:) den Thread auf Knopfdruck:
TMyThread = class(TThread)
private { private-Deklarationen } protected procedure Execute; override; end; ... procedure TMyThread.Execute; begin while Not Terminated do { Deinen Code einfügen, der wiederholt werden soll } end;
Delphi-Quellcode:
procedure THauptForm.Button1Click(Sender: TObject);
begin MyThread.Terminate; end; |
Re: SCHLEIFE ZUM WIEDERHOLEN EINES SOURCES
er gibt mir bei
TMyThread= class(TThread) folgende Fehlermeldung: Expected ':' but '=' found. wenn ich das = durch einen : ersetze gibt er mir die Meldung: Expected an identifier but CLASS found und nu ??? ------------------------------------------------------------------------- jeder mag mich nur mein computer rebelliert!!!!!! whitey :cat: |
Re: SCHLEIFE ZUM WIEDERHOLEN EINES SOURCES
Du musst auch vor TMyThread= class(TThread) ein ';' setzten, also so:
Code:
TForm1 = class(TForm);
TMyThread = class(TThread) private { private-Deklarationen } protected procedure Execute; override; end; ... procedure TMyThread.Execute; begin while Not Terminated do { Deinen Code einfügen, der wiederholt werden soll } end; |
Re: SCHLEIFE ZUM WIEDERHOLEN EINES SOURCES
wenn jemand lust und zeit hatt könnte er mir ja mal den surce debuggen ich komme nicht weiter
Delphi-Quellcode:
danke whitey :cat:unit Unit1; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, ShellAPI,StdCtrls,ExtCtrls; type TForm1 = class(TForm); TMyThread= class(TThread) Button1: TButton; Button2: TButton; Label1: TLabel; Button3: TButton; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); private { Private declarations } protected procedure Execute; override; end; var Form1: TForm1; implementation {$R *.DFM} procedure TMyThread.Execute; begin while Not Terminated do procedure TForm1.Button1Click(Sender: TObject); var i : Integer; w : hWnd; begin // Externes Programm oeffnen ShellExecute(0, PChar('open'), 'C:\Programme\Internet Explorer\IEXPLORE.EXE','', '', SW_SHOWMINIMIZED); for i := 0 to 10 do begin Label1.Caption := IntToStr(i); Label1.Repaint; // Pause (in msec) Sleep(500); end; // Externes Programm schliessen w := FindWindow(NIL,'about:blank - Microsoft Internet Explorer'); if W<>0 then PostMessage(W, wm_close, 1, 1); end; procedure THauptForm.Button2Click(Sender: TObject); begin MyThread.Terminate; end; procedure TForm1.Button3Click(Sender: TObject); begin Close; end; end. [edit=Luckie]Es geht auch mit weniger Leerzeilen. :roll: Mfg, Luckie[/edit] |
Re: SCHLEIFE ZUM WIEDERHOLEN EINES SOURCES
Delphi-Quellcode:
Ohne Thread.
procedure TForm1.Button1Click(Sender: TObject);
var i : Integer; w : hWnd; e : Integer; begin // Externes Programm oeffnen while w<>0 do begin ShellExecute(0, 'open', 'C:\Programme\InternetExplorer\IEXPLORE.EXE', '','', SW_SHOWMIMIMIZED); for i := 0 to 10 do begin Label1.Caption := IntToStr(i); Label1.Repaint; // Pause (in msec) Sleep(500); end; // Externes Programm oeffnen w := FindWindow(NIL,'about:blank - Microsoft Internet Explorer'); if W<>0 then PostMessage(W, wm_close, 1, 1); end; end; |
Re: SCHLEIFE ZUM WIEDERHOLEN EINES SOURCES
[edit=Luckie]Unformatierten Code mit duzenden überflüssigen Leerzeilen entfernt. Mfg, Luckie[/edit]
|
Re: SCHLEIFE ZUM WIEDERHOLEN EINES SOURCES
Delphi-Quellcode:
---------------------------------------------------------------------------
unit Unit1;
interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, ShellAPI,StdCtrls,ExtCtrls; type TForm1 = class(TForm) Button1: TButton; Label1: TLabel; Button3: TButton; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); private { Private declarations } public { public declarations } end; var Form1: TForm1; implementation $R *.DFM} begin procedure TForm1.Button1Click(Sender: TObject); var i : Integer; w : hWnd; e : Integer; begin // Externes Programm oeffnen while w<>0 do begin ShellExecute(0, 'open', 'C:\Programme\InternetExplorer\IEXPLORE.EXE', '','', SW_SHOWMIMIMIZED); for i := 0 to 10 do begin Label1.Caption := IntToStr(i); Label1.Repaint; // Pause (in msec) Sleep(500); end; // Externes Programm oeffnen w := FindWindow(NIL,'about:blank - Microsoft Internet Explorer'); if W<>0 then PostMessage(W, wm_close, 1, 1); end; end; procedure TForm1.Button2Click(Sender: TObject); begin Close; end; end. jetzt geht gar nichts mehr , das programm startet nicht und es kommt auch keine fehler meldung. ------------------------------------------------------------------------ danke whitey :cat: [edit=Luckie] Mfg, Luckie[/edit] |
Re: SCHLEIFE ZUM WIEDERHOLEN EINES SOURCES
Delphi-Quellcode:
__________________________________________________ ______________________
procedure TMyThread.Execute;
begin while Not Terminated do [U]procedure TForm1.Button1Click(Sender: TObject);[/U] var i : Integer; w : hWnd; begin kann es sein das der unterstrichene butten da nicht hingehört und deshalb das programm nicht laufen will ? mfg whitey :cat: |
Re: SCHLEIFE ZUM WIEDERHOLEN EINES SOURCES
Das wäre möglich. Eine Prozedur-Deklaration hat da nichts verloren.
|
Re: SCHLEIFE ZUM WIEDERHOLEN EINES SOURCES
Hallo davidwittesz,
zum obigen Code, der auf Luckies Vorschlag basiert, solltest du w noch vorbesetzen. In der while Schleife fragst du ab, ob w <> 0 ist, aber w hat ja zu diesem Zeitpunkt noch keinen definierten Wert. Setze einfach vor der while Schleife w := 1; Willst du es mit Threads lösen, dann musst es soheißen:
Delphi-Quellcode:
procedure TMyThread.Execute;
var i : Integer; w : hWnd; begin while Not Terminated do begin // Externes Programm oeffnen ShellExecute(0, PChar('open'), 'C:\Programme\Internet Explorer\IEXPLORE.EXE','', '', SW_SHOWMINIMIZED); for i := 0 to 10 do begin Label1.Caption := IntToStr(i); Label1.Repaint; // Pause (in msec) Sleep(500); end; // Externes Programm schliessen w := FindWindow(NIL,'about:blank - Microsoft Internet Explorer'); if W<>0 then PostMessage(W, wm_close, 1, 1); end; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:29 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz