AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Pausenfunktion

Ein Thema von OrakelvonDelphi · begonnen am 10. Jan 2015 · letzter Beitrag vom 12. Jan 2015
Antwort Antwort
Seite 1 von 2  1 2      
OrakelvonDelphi

Registriert seit: 9. Jan 2015
15 Beiträge
 
#1

Pausenfunktion

  Alt 10. Jan 2015, 14:33
Ich habe folgendes Problem: Ich möchte innerhalb eines Programmes einen "Pause-Button" einfügen. Dazu gibt es ein kleines Bild, welches angeklickt werden kann. Wenn man dieses anklickt, so soll das Programm pausieren, das heißt, die Timer nicht weiterlaufen, etc... Klick man nun wiederholt darauf, soll alles normal weitergehen.
Ich habe mich zu möglichkeiten wie delay usw. belesen aber ich erreiche nicht den gewünshten Effekt.

Vielen Dank für alle Ideen oder Ansätze im Voraus!
  Mit Zitat antworten Zitat
Benutzerbild von Dalai
Dalai

Registriert seit: 9. Apr 2006
1.683 Beiträge
 
Delphi 5 Professional
 
#2

AW: Pausenfunktion

  Alt 10. Jan 2015, 14:43
Ich glaube, die wichtigste Frage ist, was da pausiert werden soll, denn davon hängt das Konzept ab, das dann in Code abgebildet wird. Timer umzuschalten (zu togglen), ist ja kein Problem:Timer.Enabled:= NOT Timer.Enabled;

MfG Dalai
  Mit Zitat antworten Zitat
Benutzerbild von Valle
Valle

Registriert seit: 26. Dez 2005
Ort: Karlsruhe
1.223 Beiträge
 
#3

AW: Pausenfunktion

  Alt 10. Jan 2015, 14:44
Dann musst du den Timer beim Klick halt ausschalten?
Valentin Voigt
BOFH excuse #423: „It's not RFC-822 compliant.“
Mein total langweiliger Blog
  Mit Zitat antworten Zitat
OrakelvonDelphi

Registriert seit: 9. Jan 2015
15 Beiträge
 
#4

AW: Pausenfunktion

  Alt 10. Jan 2015, 14:47
Danke für die schnelle Antwort! Daran habe ich auch schon gedacht aber dies müsste dann ja für alle Timer aufgelistet werden und einzeln geschrieben, Musikeinspielungen müssten gestoppt werden, etc...

Ich dachte mir, vielleicht kennt jemand eine Lösung, die einfach "alles" kurz anhält.
Sollte das natürlich nicht möglich sein, nutze ich dann die Methode, so wie ihr es geschrieben habt.
  Mit Zitat antworten Zitat
OrakelvonDelphi

Registriert seit: 9. Jan 2015
15 Beiträge
 
#5

AW: Pausenfunktion

  Alt 10. Jan 2015, 14:49
Ah, ok Sir Rufo, das ist gut zu wissen. Nach solch einem "Zauberbefehl" hatte ich gesucht. Dann weiß ich jetzt, dass ich diese Suche beenden kann und lieber das ganze manuell versuche. Danke.
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#6

AW: Pausenfunktion

  Alt 10. Jan 2015, 14:49
Danke für die schnelle Antwort! Daran habe ich auch schon gedacht aber dies müsste dann ja für alle Timer aufgelistet werden und einzeln geschrieben, Musikeinspielungen müssten gestoppt werden, etc...

Ich dachte mir, vielleicht kennt jemand eine Lösung, die einfach "alles" kurz anhält.
Sollte das natürlich nicht möglich sein, nutze ich dann die Methode, so wie ihr es geschrieben habt.
Diese Zauberbefehle muss man sich selber schreiben und das kann zusammenfassend als "Programmieren" beschrieben werden
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
OrakelvonDelphi

Registriert seit: 9. Jan 2015
15 Beiträge
 
#7

AW: Pausenfunktion

  Alt 10. Jan 2015, 15:10
Gut, danke. War wohl naiv, an solch einen "Zauberbefehl" zu denken...
Werde das jetzt selbst programmieren
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.190 Beiträge
 
Delphi 10 Seattle Enterprise
 
#8

AW: Pausenfunktion

  Alt 10. Jan 2015, 15:57
Die Timer hängen doch alle an einem Formular. Und alle Formulare hängen an Application . Du könntest doch einfach in einem Einzeiler sagen Für jedes Formular in der Anwendung: Für jeden Timer auf dem Formular: Timer.Enabled := not PauseIstAn;
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.599 Beiträge
 
Delphi 12 Athens
 
#9

AW: Pausenfunktion

  Alt 10. Jan 2015, 23:39
Ich dachte mir, vielleicht kennt jemand eine Lösung, die einfach "alles" kurz anhält.
Definiere "alles". Wirklich alles bedeutet z.B. auch die Reaktion auf Klicks, auch wenn du dich dafür nur auf dein eigenes Programm beziehst. Ein solcher "Zauberbefehl" wäre z.B. Sleep(MaxInt); oder while true do; oder auch repeat until false; . Damit hängst du nämlich dein Programm für eine recht lange Zeitspanne auf.

Du willst aber wohl nicht alles anhalten, sondern nur etwas bestimmtes. Was das genau ist, weißt aber nur du. Also musst du es auch selbst programmieren.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Perlsau
(Gast)

n/a Beiträge
 
#10

AW: Pausenfunktion

  Alt 11. Jan 2015, 04:45
Du willst aber wohl nicht alles anhalten, sondern nur etwas bestimmtes. Was das genau ist, weißt aber nur du. Also musst du es auch selbst programmieren.
Genau

@OrakelvonDelphi:
Nehmen wir mal an, du hast eine lange dauernde Methode, sagen wir mal für das Einlesen einer großen Liste von Dateien in irgendwelche Records oder Datenbank-Tabellen. Diese Liste klapperst du normalerweise mit einer For-To-Schleife ab:

for i := 0 to z-1 do LeseDatei(Liste[i]); (LeseDatei ist deine Methode, um die Datei im übergebenen String einzulesen.)

Nun möchtest du, weil du nebenher was anderes am selben PC machen willst, eine Pausenfunktion für diese Einlese-Methode einrichten. Du setzt einen Button aufs Formular, den du z.B. Btn_PauseWeiter nennst. Nun genügen die Möglichkeiten der For-To-Schleife nicht mehr, du benötigst eine While-Schleife:
Delphi-Quellcode:
...
private
  Var
    Pause : Boolean;
    LeseId : Integer;
  
  procedure Einlesen(const Liste : TStrings);

implementation

procedure TForm1.Einlesen(const Liste : TStrings);
var
  i,z : Integer;
begin
  if not Assigned(Liste) then exit;
  z := Liste.Count;
  if z = 0 then exit;

  i := LeseId;
  LeseId := 1;
  Pause := false;
  Btn_PauseWeiter.Caption := 'Pause';

  while (i < z) and not Pause do
  begin
    LeseDatei(Liste[i]);
    inc(i);
    Application.ProcessMessages;
  end;

  // wenn durch Pause abgebrochen, dann aktuelle Position der Liste merken
  if Pause then LeseId := i else
  // sonst alles wieder zurücksetzen
  begin
    Btn_PauseWeiter.Caption := 'Einlesen';
    LeseId := 0;
  end;
end;

procedure TForm1.Btn_PauseWeiterClick(Sender: TObject);
begin
  If LeseId = 0 then Einlesen else
  begin
    if Pause then
    begin
      Btn_PauseWeiter.Caption := 'Pause';
      Pause := false;
    end else
    begin
      Btn_PauseWeiter.Caption := 'Weiter';
      Pause := true;
    end;
  end;
end;
Klickst du nun auf den Button "Pause", schaut dessen Klick-Methode nach, wie die Variable Pause gerade steht und reagiert entsprechend. Deine Einlese-Schleife fragt ebenfalls die Pause-Variable ab und reagiet entsprechend.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:09 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 by Thomas Breitkreuz