Zitat von
Crazy-MF:
Ja stimmt. sorry.
also mein quelltext sieht ungefähr so aus:
Code:
procedure PortOut(Port : Word; Data : Byte); stdcall; external 'io.dll';
function PortIn(Port : Word): Byte; stdcall; external 'io.dll';
procedure TForm1.TrackBar1Change(Sender: TObject);
begin
If TrackBar1.Position = 0 then
begin
PortOut($378,$00);
end;
If TrackBar1.Position = 1 then
begin
PortOut($378,$01);
end;
If TrackBar1.Position = 2 then
begin
PortOut($378,$02);
end;
das sind jetzt nur die ersten 3 das geht so weiter bis 30.
Wie soll ich denn jetzt genau mit der Timerkomponente eine schleife programmieren, damit er nach jedem mal wenn er den wert geändert hat zeit x wartet und dann den nächsten sendet???
Hast wohl was gegen die Timer? Dann hier eine Lösung ohne Timer:
Also setze auf deine Form ein Edit (für die Verzögerungszeit), zwei Buttons (1. zum starten, 2. zum stoppen) und die TrackBar.
Dann noch folgender Code:
Delphi-Quellcode:
procedure Warten(ms: Cardinal);
var zeit: Cardinal;
begin
zeit:= GetTickCount;
while ((GetTickCount-zeit)<ms) do
Application.ProcessMessages;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
Schleife:= True;
Senden;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
Schleife:= False;
end;
procedure Senden;
var i: Integer;
delay: Cardinal;//Verzögerung in Millisekunden
begin
try
delay:= StrToInt(Form1.Edit1.Text);
except
delay:= 1000;
end;
i:=0;
while (Schleife and (i<=30)) do begin
i:= i+1;
PortOut($378,i);
Warten(delay);
end;
Schleife:= False;
end;
So, fertig.
Statt in der Prozedur senden die Variable
i hochzuzählen, kannst du auch die TrackBar.Position erhöhen und dann diese senden.
Die Variable
Schleife ist von Typ Boolean und global deklariert. Sie sollte im OnCreate-Ereignis der Form1 auf False gesetzt werden (ist aber nicht unbedingt nötig).
MfG
Binärbaum
//Edit: kleinen Fehler im Quelltext berichtigt