Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Nach bestimmter Zeit Menuitem wieder aktivieren.(Fertig) (https://www.delphipraxis.net/58382-nach-bestimmter-zeit-menuitem-wieder-aktivieren-fertig.html)

lucius 6. Dez 2005 11:35


Nach bestimmter Zeit Menuitem wieder aktivieren.(Fertig)
 
Hallo Leute,

Ich habe einen Timer in meiner Application der eine angegebene Zeit(Zeiteingabe.Text) vom User zurueck zaehlt.
Delphi-Quellcode:
procedure TDemoForm.Timer6Timer(Sender: TObject);
var
v : TDateTime;
begin
v := strtotime(Form2.Zeiteingabe.Text); //<-- Zeiteingabe in Minuten vom User.
if restzeit = v - 60 then
  begin
  DemoForm.Mainmenu1.Items[0].items[1].Enabled:= true; //<-- Item wieder aktivieren.
  end;

if Now >= FNextAction then
   begin
      DoAktion;
      CalcNextAction;
   end;
   UpdateProgressBar;
end;

procedure TDemoForm.DoAktion;
begin
mach irgendwas..
end;

procedure TDemoForm.CalcNextAction;
begin
   FStartTime := Now;
   FNextAction := FStartTime + StrToFloat(EdtTimeout.Text) * OneMinute;
end;

function TDemoForm.Restzeit: Double;
begin
   Result := Now-FNextAction;
end;

function TDemoForm.RestzeitMinuten: Double;
begin
   Result := Restzeit * 24.0 * 60.0;
end;

function TDemoForm.RestzeitSekunden: Double;
begin
   Result := Restzeit * 24.0 * 60.0 * 60.0;
end;

procedure TDemoForm.UpdateProgressBar;
begin
   ProgressBar1.Position := Trunc((now-FStartTime)/(FNextAction-Now)*ProgressBar1.Max);
   RestZeit.Caption := TimeToStr(Restzeit);
end;
Das Menuitem wird bei einem Button.click deaktiviert damit keinen Misbrauch von dem Code im den Button
gemacht werden kann.
Jetzt moechte ich aber das das Menuitem wieder nach spriech 1 Minute aktiviert wird.
Ich wollte das im Timercode realisieren, siehe obener Code, das klappt aber nicht so recht, kann mir jemand bitte weiterhelfen?
Vielen Dank im voraus.

MFG, Lucius.

marabu 6. Dez 2005 12:18

Re: Nach bestimmter Zeit Menuitem wieder aktivieren.
 
Hallo Lucius,

schmeiß den Timer weg. Wenn du eine download policy umsetzen möchtest, dann packe eine ActionList auf deine Form, pack deinen Code in eine Action und ordne diese Action deinem MenuItem zu. Nach dem Ausführen der Action wird mittels der private variable UnlockDownload ein timelock gesetzt. Die Action überprüft dann in der idle time ob das timelock noch existiert.

Delphi-Quellcode:
type
  TDemoForm = class(TForm)
    ActionList: TActionList;
    DownloadAction: TAction;
    MainMenu: TMainMenu;
    miDownload: TMenuItem;
    procedure DownloadActionExecute(Sender: TObject);
    procedure DownloadActionUpdate(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    UnlockDownload: TDateTime;
  end;

var
  DemoForm: TDemoForm;

implementation

{$R *.dfm}

uses
  DateUtils; // OneMinute lives here

procedure TDemoForm.DownloadActionExecute(Sender: TObject);
begin
  // put your code here ...
  UnlockDownload := Now + OneMinute * 5; // 5 minutes timelock
end;

procedure TDemoForm.DownloadActionUpdate(Sender: TObject);
begin
  with Sender as TAction do
    Enabled := Now > UnlockDownload;
end;

procedure TDemoForm.FormCreate(Sender: TObject);
begin
  UnlockDownload := Now;
end;
Grüße vom marabu

lucius 6. Dez 2005 12:39

Re: Nach bestimmter Zeit Menuitem wieder aktivieren.
 
Hi marabu, ansich ne klasse Loesung aber dabei muss ich meinen ganzen Code wieder anpassen und das ist schon einiges.

Gruss Lucius.

lucius 6. Dez 2005 14:02

Re: Nach bestimmter Zeit Menuitem wieder aktivieren.
 
So habs selber hingekriegt sowie ich das wollte aber marabu, deine Idee behalte ich im Hinterkopf.
Fuer die jenigen die es interessiert.
Delphi-Quellcode:
procedure THaupt.Timer6Timer(Sender: TObject);
var
v : TDateTime;
begin
v := StrToFloat(Form2.Zeiteingabe.Text) * OneMinute;
v := v - (OneMinute * 5); //Anzahl minuten bis Update MenuItem wieder aktiv wird//
if Restzeit.caption = timetostr(v) then
  begin
  Mainmenu1.Items[0].items[1].Enabled:= true;
  end;
MFG Lucius.


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:44 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz