AGB  ·  Datenschutz  ·  Impressum  







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

Buttons "synchronisieren"

Ein Thema von Gereon · begonnen am 6. Sep 2003 · letzter Beitrag vom 7. Sep 2003
Antwort Antwort
Gereon

Registriert seit: 17. Aug 2003
12 Beiträge
 
Delphi 6 Personal
 
#1

Buttons "synchronisieren"

  Alt 6. Sep 2003, 11:18
Hallo Experten,

ich möchte in einem Programm verhindern, dass die ClickProcedure eines Buttons aufgerufen wird, während die eines anderen noch abgearbeitet wird.

Ich vermute, dass das Problem gar nicht auftreten würde, wenn ich nicht in jeder dieser Prozeduren eine Warteschleife hätte (die Application.Processmesages enthält).

Meine eigene Lösung sieht so aus: Ich führe eine Synchronisationsvariable ein (ActionAbgeschlossen : boolean) und ergänze jeweils in ....ButtonxyzClick....

Delphi-Quellcode:
 if ActionAbgeschlossen then begin
    ActionAbgeschlossen:=false;

      { hier kommt der eigentlich Code der Procedure }

    ActionAbgeschlossen:=true;
  end
Das klappt auch. Ich frage mich nur, ob sowas nicht eleganter mit Delphi-Bordmitteln funktioniert. Der Code wird dadurch ja nicht kürzer oder übersichtlicher, dass ich sowas in jede ButtonClick-Procedure einfüge ...

Für Tipps dankbar.
Gereon
  Mit Zitat antworten Zitat
axelf98

Registriert seit: 27. Aug 2003
Ort: Ennepetal
440 Beiträge
 
Delphi 2005 Personal
 
#2

Re: Buttons "synchronisieren"

  Alt 6. Sep 2003, 12:04
Kann man nicht einfach die Knöpfe, die nicht benutzt werden sollen, auf enabled := false setzen? Wenn die Prozedur fertig ist, werden sie wieder aktiviert...
  Mit Zitat antworten Zitat
Gereon

Registriert seit: 17. Aug 2003
12 Beiträge
 
Delphi 6 Personal
 
#3

Re: Buttons "synchronisieren"

  Alt 6. Sep 2003, 13:55
Hallo,

die Buttons auszuschalten erscheint mir kaum eleganter, zumal man dann ja pro Button individuell die jeweils anderen Buttons ausschalten muss. Mir wäre eher daran gelegen Application.Processmessages dazu zu kriegen nur auf einen bestimmten Button (ein Weiter-Button für die Pause) zu reagieren und den Rest zu ignorieren.
Vielleicht kann man auch was mit Threads machen. Da kenne ich mich aber nicht aus und die Frage ist, ob das dann nicht noch komplizierter wird ...

Gereon
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.116 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: Buttons "synchronisieren"

  Alt 6. Sep 2003, 14:02
Moin Gereon,

also ich für meinen Teil finde Programme nicht so schön, bei denen man Funktionen anwählen kann, die im jeweiligen Moment nicht funktionieren.
So gesehen lasse ich Menüpunkte, Button o.ä. gar nicht erst zu die man gerade nicht verwenden kann.

Einen Button klickbar darzustellen, der nicht benutzt werden kann halte ich also für ziemlich sinnlos.

Wenn Du es aber trotzdem so haben willst, kannst Du, statt den Button zu disabeln auch die jeweilige OnClick Routine abklemmen.
Dazu brauchst Du nur eine Variable vom Typ TNotifyEvent, der die OnClick Routine zugewiesen wird. Dann wird OnClick des zu deaktivierenden Button auf nil gesetzt. Ist die Routine abgelaufen, wird dann der Variableninhalt wieder OnClick des Buttons zugewiesen.
Und nicht vergessen das ganze in einem try/finally Block unterzubringen, damit die OnClick Routine auch garantiert wieder zugewiesen wird.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Gereon

Registriert seit: 17. Aug 2003
12 Beiträge
 
Delphi 6 Personal
 
#5

Re: Buttons "synchronisieren"

  Alt 7. Sep 2003, 16:30
Hi,
ok, ich gebe mich geschlagen ... äh ... zeige mich einsichtig. Ich werde die Buttons disablen.

Gereon
[WarumEinfachWennsAuchKompliziertGeht ...]
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.116 Beiträge
 
Delphi 11 Alexandria
 
#6

Re: Buttons "synchronisieren"

  Alt 7. Sep 2003, 17:04
Moin Gereon,

Zitat von Gereon:
WarumEinfachWennsAuchKompliziertGeht
ich finde, dass man da unterscheiden muss für wen es einfach, und für wen es kompliziert ist.
Wenn es sich der Entwickler einfach macht, wird's i.d.R. für den Anwender kompliziert und umgekehrt.

Wer hat Vorrang?
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Benutzerbild von Sharky
Sharky

Registriert seit: 29. Mai 2002
Ort: Frankfurt
8.252 Beiträge
 
Delphi 2006 Professional
 
#7

Re: Buttons "synchronisieren"

  Alt 7. Sep 2003, 18:14
Zitat von Gereon:
....[WarumEinfachWennsAuchKompliziertGeht ...]
Kompliziert muss es ja nicht sein.

Schreibe dir zwei Proceduren.

Die erste Disabled alle Button und die zweite Enables sie.
Jetzt einfach in der ersten und letzten Zeile deiner Button-OnClicks diese einfügen -> Fertig.

Ausserdem würde ich den Cursor noch anpassen. Dann weiss der Anwender das dein Programm etwas arbeitet und nicht einfach alles Disabled hat.
Stephan B.
"Lasst den Gänsen ihre Füßchen"
  Mit Zitat antworten Zitat
Gereon

Registriert seit: 17. Aug 2003
12 Beiträge
 
Delphi 6 Personal
 
#8

Re: Buttons "synchronisieren"

  Alt 7. Sep 2003, 20:01
Die 2 Prozeduren hab ich schon geschrieben. Die Bemerkung war mehr darauf gemünzt, dass ich nicht gleich die Buttons disabled habe. Das mit dem Cursor ist noch ein brauchbare Hinweis.

Danke,
Gereon
  Mit Zitat antworten Zitat
Antwort Antwort


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 08:20 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