Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Fortschrittsanzeige während Browser Seite neu lädt (https://www.delphipraxis.net/81422-fortschrittsanzeige-waehrend-browser-seite-neu-laedt.html)

hirnstroem 27. Nov 2006 07:18


Fortschrittsanzeige während Browser Seite neu lädt
 
'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


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:38 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