Einzelnen Beitrag anzeigen

BAMatze

Registriert seit: 18. Aug 2008
Ort: Berlin
759 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: Speicherbalken

  Alt 11. Dez 2008, 09:23
Habe hier eine Möglichkeit gerade erstellt, die zwar nicht wirklich den genauen Speicherzustand wiederspiegelt, aber für den Benutzer ist das ja nicht wirklich interessant. Für mich ist es aber eine Möglichkeit, die Speicherzeit zu überbrücken. habe die Speicherprozesse in eine extra Form kopiert und setze vor dem Speichern eine Variable auf falsch. Wenn das Speichern vorbei ist, wird diese Variable auf wahr gesetzt. Nebenbei läuft ein Timer, der allerdings unabhängig von dem Speichervorgang den ProgressBar füllt. Das komplette Befüllen ist ihm aber erst erlaubt, wenn die Variable auf wahr (d.h. der Speichervorgang ist wirklich abgeschlossen) umgeschaltet ist. Hier mal den Quellcode meiner ebend beschriebenen Lösung:

Delphi-Quellcode:
unit Speichern;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, EFPI_Steuerungsunit1, StdCtrls, ExtCtrls, ComCtrls;

type
  TForm7 = class(TForm)
    Label1: TLabel;
    ProgressBar1: TProgressBar;
    Timer1: TTimer;
    procedure FormCreate(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form7: TForm7;
  Fortschrittsanzeige: boolean;

implementation

{$R *.dfm}

procedure TForm7.FormCreate(Sender: TObject);
begin
  randomize;
  Form1.Enabled := true;
  Fortschrittsanzeige := false; // Variable anhand derer festgestellt wird, ob der Speichervorgang beendet ist
  Excel.Worksheets[1].SaveAS('D:\Tischsteuerung\Steuerungsprogramm Version 1.103\Sensoren.xls'); { <---------- hier gibt es noch einen Fehler!!!}
  Form1.OleContainer1.DestroyObject; {Objekt muss aktualisiert werden sonst werden die Änderungen nach dem Schliesen des OleContainers nicht sichtbar}
  Form1.OleContainer1.CreateObjectFromFile('D:\Tischsteuerung\Steuerungsprogramm Version 1.103\Sensoren.xls', false); // neu laden
  Fortschrittsanzeige := true;
end;

procedure TForm7.Timer1Timer(Sender: TObject);
var iTemp: integer;
begin
  //Fortschrittsanzeige wird nicht voll befüllt, wenn Speichern nicht abgeschlossen ist
  if (Fortschrittsanzeige = False) and (ProgressBar1.Position < 90) then
    begin
      iTemp := random(5);
      ProgressBar1.Position := Progressbar1.Position + iTemp;
    end;
  //Fortschrittsanzeige kann vollständig befüllt werden, wenn Speichern abgeschlossen ist
  if (Fortschrittsanzeige = true) then
    begin
      iTemp := random(10);
      ProgressBar1.Position := Progressbar1.Position + iTemp;
    end;
  //wenn Progressbar vollständig befüllt ist, dann soll die Form wieder verlassen werden
  if (ProgressBar1.Position >= 100) then
    begin
      ProgressBar1.Position := 0;
      Form1.Enabled := false;
      close;
    end;
end;

end.
Eine kleine Schwachstelle hat es leider noch. Wenn ich den Speichervorgang
   Excel.Worksheets[1].SaveAS('D:\Tischsteuerung\Steuerungsprogramm Version 1.103\Sensoren.xls'); in der ursprünglichen Form starte funktioniert es wunderbar. In der neuen Form bekomme ich leider immer eine Fehlermeldung. Vieleicht kann mir jemand sagen, woran dies liegt.

Fehlermeldung: "Exception-Klasse EVariantInvalidOpError mit Meldung 'Ungültige Variantenoperation."

Vielen Dank
BAMatze
  Mit Zitat antworten Zitat