Registriert seit: 21. Sep 2005
297 Beiträge
Delphi 2006 Professional
|
Fortschrittsanzeige während Browser Seite neu lädt
27. Nov 2006, 08:18
'loha Folks,
der nachfolgend abgebildete Teil einer Prozedur, ruft eine Funktion auf (DI.SetAssignedTAGs), welche je nach dem ein bis zwei Minuten etwas macht und mir eine Antwort zurückliefert, ob die Funktion denn auch das gmacht hat was sie sollte. Wenn ja ist gut, wenn nicht, gibt wird eine Fehlermeldung ausgegeben.
Delphi-Quellcode:
if DataSet.FieldByName('Busy').Value = False then
begin
DataSet.Edit;
DataSet.FieldByName('Busy').Value := True;
DataSet.FieldByName('BusyStartTime').Value := Now;
DataSet.Post;
case DI.SetAssignedTAGs(IntToStr(DataSet.FieldByName('Address').Value), (Sender as TIWImageFile).Tag) of // <- dauert eine Weile
True: begin
DataSet.RecNo := (Sender as TIWImageFile).Tag;
WebApplication.Showmessage
(
'Meldung: Aktion abgeschlossen' +
#13#10 +
#13#10 +
'Aktion: Schlüssel programmieren' +
#13#10 +
'Gerätetyp: ' + DataSet.FieldByName('DeviceType').AsString +
#13#10 +
'Adresse: ' + DataSet.FieldByName('Address').AsString +
#13#10 +
#13#10 +
'Information: ' + IntToStr(UserSession.ADODataSet_Key.RecordCount) + ' Schlüssel programmiert'
);
end;
False: begin
DataSet.RecNo := (Sender as TIWImageFile).Tag;
WebApplication.Showmessage
(
'Meldung: Fehler' +
#13#10 +
#13#10 +
'Aktion: Schlüssel programmieren' +
#13#10 +
'Gerätetyp: ' + DataSet.FieldByName('DeviceType').AsString +
#13#10 +
'Adresse: ' + DataSet.FieldByName('Address').AsString +
#13#10 +
#13#10 +
'Information: -'
);
end;
end;
DataSet.Edit;
DataSet.FieldByName('Busy').Value := False;
DataSet.Post;
end;
Da die Applikation über ein Webinterface bedient wird und die Funktion etwas länger dauert, wird während der Wartezeit im Browser die Seite "neu geladen". Eigentlich würde ich aber gerne eine Fortschrittsanzeige einblenden. Nun fehlt mir ehrlich gesagt das Wissen, wie so etwas zu realisieren wäre.
Hier noch die SetAssignedTAGs Funktion:
Delphi-Quellcode:
function TDI.SetAssignedTAGs(Address: String; RecNo: Integer): Boolean;
var
Code, Code1, Code2, Code3, Code4: String;
Keys: TADODataSet;
i, iKeys: integer;
begin
Keys := UserSession.ADODataSet_Key;
Keys.Open;
Keys.First;
if InitAccessTable(Address) = False then
begin
Result := False;
Exit;
end;
for iKeys := 0 to Keys.RecordCount - 1 do
begin
Code := Keys.FieldByName('Code').Value;
// build First part of key
Code1 := Copy(Code, ((0 * 2) + 1), 2);
Code2 := Copy(Code, ((1 * 2) + 1), 2);
Code3 := Copy(Code, ((2 * 2) + 1), 2);
Code4 := Copy(Code, ((3 * 2) + 1), 2);
for i := 0 to NumberOfResends do
begin
// send first part of key
CANBus.SendMessage
(Address, '8', '2', '0', Code1, Code2, Code3, Code4, '55');
if CANCommunication.TryToGetAnswer('2') = True then
begin
Result := True;
Break;
end
else
begin
Result := False;
if i = NumberOfResends then Exit;
end;
end;
// build Second part of key
Code1 := Copy(Code, ((4 * 2) + 1), 2);
Code2 := Copy(Code, ((5 * 2) + 1), 2);
Code3 := Copy(Code, ((6 * 2) + 1), 2);
Code4 := Copy(Code, ((7 * 2) + 1), 2);
for i := 0 to NumberOfResends do
begin
// send second part of key
CANBus.SendMessage
(Address, '8', '2', '1', Code1, Code2, Code3, Code4, '55');
if CANCommunication.TryToGetAnswer('2') = True then
begin
Result := True;
Break;
end
else
begin
Result := False;
if i = NumberOfResends then Exit;
end;
end;
Keys.Next;
end;
end;
Bin sehr empfänglich für ein bisschen Beihilfe.
Grüsse
hirnstroem
inde deus abest
|