Einzelnen Beitrag anzeigen

hirnstroem

Registriert seit: 21. Sep 2005
297 Beiträge
 
Delphi 2006 Professional
 
#1

Fortschrittsanzeige während Browser Seite neu lädt

  Alt 27. Nov 2006, 07: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
  Mit Zitat antworten Zitat