Hallo,
ich hatte vorhin gefragt wie ich eine TList fülle und jetzt habe ich schon wieder ein Problem das dann auch einzusetzen.
Ich müsste alle 30 Sekunden diese Liste aktualisieren, nun dachte ich mir nehme ich mal ein Timer, aber das ist nicht so einfach wie ich dachte.
Ich habe es erst so versucht:
Delphi-Quellcode:
procedure TSQL.reloadaccs(o: Tobject);
var ex: boolean;
q:
string;
I:Integer;
Account : TAccounts;
begin
SQL.ListAccounts:= TList.Create;
if assigned(
SQL.FResult)
then begin
if SQL.FMysql.Status<>MYSQL_STATUS_READY
then
WriteLog('
Ein Ergebnis wurde unvollständig gelesen!', true);
FreeAndNil(
SQL.FResult);
end;
q:='
select * from user;';
SQL.FResult :=
SQL.FMysql.query(q, true, ex);
if ex
then
begin
SQL.ListAccounts.Clear;
SQL.FResult.First;
for I := 0
to SQL.FResult.RowsCount - 1
do
begin
Account:= TAccounts.Create;
Account.ID := strtoint(
SQL.Fresult.FieldValuebyname('
id'));
SQL.ListAccounts.Add(Account);
SQL.FResult.Next;
end;
end;
end;
...
SQL.Timer:= TTimer.Create(
nil);
SQL.Timer.Interval:=30000;
SQL.Timer.OnTimer :=
SQL.reloadaccs;
SQL.Timer.Enabled:=true;
die Funktion reloadaccs wird aber garnicht ausgeührt, danach habe ich in der
DP folgendes gefunden:
Delphi-Quellcode:
Type
ToTimerHandler = class(Tobject)
constructor create (nMs: integer);
private
FoT: Ttimer;
procedure timerCall(o: Tobject);
end;
Procedure ToTimerHandler.timerCall(o: Tobject);
Begin
FoT.Enabled := True;
writeln;
writeln;
write ('Test......');
qDone := False;
End;
...
begin
ToTimerHandler.create(30000);
end.
Da wird der Code aber nur ausgeführt wenn ich das so habe:
Delphi-Quellcode:
...
begin
ToTimerHandler.create(30000);
while true do
begin
Application.Processmessage;
end;
end.
Dadurch wird aber der Rest des Programms nicht mehr weiter ausgefüht.
Wie könnte ich jetzt einfach einen Timer benutzen, der den Rest des Programms nicht blockiert?