AGB  ·  Datenschutz  ·  Impressum  







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

RadioButton und OnClick

Ein Thema von Blutiger Anfänger · begonnen am 22. Mai 2005 · letzter Beitrag vom 23. Mai 2005
Antwort Antwort
Seite 1 von 2  1 2      
Blutiger Anfänger
(Gast)

n/a Beiträge
 
#1

RadioButton und OnClick

  Alt 22. Mai 2005, 23:31
Hallo zusammen,

habe ein Problem mit dem OnClick-Ereignis ,in Verbindung mit dem RadioButton.
Ueber Onclick, RadioButton, wird z.B. ein ext. Programm aufgerufen.
Wird aber zweimal, bzw.,wird DoubleClick ausgefuehrt, wird das Proramm auch zweimal aufgerufen.

Mit:

Delphi-Quellcode:
procedure TForm1.RBRechnerClick(Sender: TObject);

begin
 ShellExecute(0,'open',PChar('calc.exe'),nil,nil,SW_SHOW);
   RBRechner.Enabled := False;
   RBRechner.Checked := False;
   [b]sleep(5000) [/b] // zum Test eingefuegt, um die Zeit,( Enabled und Checked) = False, zu erhoehen
   RBRechner.Enabled := True;
 end;
,

wird z.B. der Taschenrechner aufgerufen.

RBRechner.Enabled := False; , RBRechner.Checked := False; und RBRechner.Enabled := True;,
sollen ermoeglichen, dass das Programm, bei Bedarf ein zweites mal augerufen werden kann.
Es soll aber verhindert werden, wenn jemand (ungewollt) einen DoubleClick ausfuehrt,
dass ein Programm zweimal aufgerufen wird.

Sollte jemand einen Tipp haben, sage ich schon einmal Danke!

Gruss OPA!

[edit=Christian Seehase]Delphi-Tags gesetzt. Bitte künftig selber machen. Danke. Mfg, Christian Seehase[/edit]
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

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

Re: RadioButton und OnClick

  Alt 23. Mai 2005, 00:58
Moin OPA,

wenn Du der Eigenschaft Checked eines RadioButton einen Wert zuweist, wird die OnClick Methode aufgerufen.

Durch Sleep wird der gesamte Thread in dem es aufgerufen wird für die genannte Zeitspanne angehalten, schau Dir besser mal ein Hier im Forum suchenDelay an.
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
RedDust

Registriert seit: 26. Okt 2004
Ort: Könnern
96 Beiträge
 
Delphi 2005 Personal
 
#3

Re: RadioButton und OnClick

  Alt 23. Mai 2005, 11:40
Hier hast du den Quelltext für das oben beschriebene Delay:

Delphi-Quellcode:
procedure Delay(time:word);
var Start: Integer;
begin
  Start:=GetTickCount;
  while (GetTickCount)-(Start) <= time do Application.ProcessMessages;
end;
Mario Franze
  Mit Zitat antworten Zitat
Benutzerbild von Die Muhkuh
Die Muhkuh

Registriert seit: 21. Aug 2003
7.332 Beiträge
 
Delphi 2009 Professional
 
#4

Re: RadioButton und OnClick

  Alt 23. Mai 2005, 11:43
Zitat von RedDust:
Hier hast du den Quelltext für das oben beschriebene Delay:

Delphi-Quellcode:
procedure Delay(time:word);
var Start: Integer;
begin
  Start:=GetTickCount;
  while (GetTickCount)-(Start) <= time do Application.ProcessMessages;
end;
Hi,

ich verwaise an dieser Stelle mal auf Hagens Delay.
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#5

Re: RadioButton und OnClick

  Alt 23. Mai 2005, 11:47
Zitat von Blutiger Anfänger:
Ueber Onclick, RadioButton, wird z.B. ein ext. Programm aufgerufen.
Hallo Opa,

du machst Sachen...

Zitat von IBM Common-User-Access Guidelines:
(mandatory) Use radio buttons for settings choices. Do not use radio buttons to represent action choices or routing choices.
Besser du nimmst einen Button um das selektierte Programm zu starten.

Grüße vom marabu
  Mit Zitat antworten Zitat
Blutiger Anfänger
(Gast)

n/a Beiträge
 
#6

Re: RadioButton und OnClick

  Alt 23. Mai 2005, 20:33
Hallo zusammen,

erst einmal Danke fuer Eure Antworten !

@Chris:
Danke fuer's Edit,(werde versuchen in Zukunft dran zu denken) und Danke fuer den Tipp
(Delay),-- funktioniert !
Allerdings verstehe ich nicht, dass sleep, erst recht wenn es sich auf den gesamten Thread
auswirkt, praktisch den zweiten Mausklick registriert und auswertet!
Mir ist nur noch von füher bekannt,(vor ca. 20 - 25 Jahren),dass aehnliche Funktionen
(Assembler und C) eingesetzt wurden, um in Steuerungen, dass Prellen von Tasten zu unterdruecken !

@RedDust und @Spider, Danke , aber Chris hatte das schon erwaehnt.

@Marabu:
Mit Button's habe ich dieses Programm schon erstellt, da es aber ca. 30 Stueck sind,
wollte ich ein etwas schlichteres Formular darstellen.
Ausserdem ist das Problem identisch, bzw. mit Button's sogar noch zeitkritischer,
denn selbst wenn ich ein enabled,oder visible = false, vor den Aufruf des Programm's
setze,tritt das Ereignis (false), waehrend des Programmstart's auf!
Gibt es denn so etwas wie ein technical ReferenzHandBuch,in dem Befehle,Funtionen..etc.,
detaillierter beschrieben sind ???
Mich wuerde interessieren was hinter Deinem genannten Hinweis steckt,
Du weisst schon, warum, wesh.... !!

Danke an Alle,

Gruss OPA!
  Mit Zitat antworten Zitat
Benutzerbild von Sharky
Sharky

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

Re: RadioButton und OnClick

  Alt 23. Mai 2005, 21:12
Hai OPA

beim "klick" auf eine Auswahl-Objekt (RadioButton oder CheckBox) sollen keine Aktionen ausgeführt werden (vom aktivieren/deaktievien abhängiger visueller Objekte mal abgesehen).

Wenn ich dich richtig verstehe möchtest Du verschiedene Programme aus deinem heraus starten?

Wenn ja ist der Ansatz über den RatioButton ja richtig. Mit diesen wird entschieden welches Programm gestartet wird.
Beim klick auf einen Button wird dann das gewählte Programm ausgeführt.

Die einzige Alternative die mir noch einfallen würde, wenn Du auf einen Button verzichten möchtest, wäre anstelle eines TRadioButton ein einfaches Label zu verwenden.
Stephan B.
"Lasst den Gänsen ihre Füßchen"
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#8

Re: RadioButton und OnClick

  Alt 23. Mai 2005, 21:16
Hallo Opa,

was hinter dem Hinweis steckt, ist einfach erklärt: die Macher der zitierten Guidelines wussten 5 Jahre nach dem Mac, was das Geheimnis seines Erfolges war: ein standardisiertes GUI. Geplant war dieses neue GUI für OS/2, aber mit Windows 3.0 wurde es erst kommerziell erfolgreich. Auch wenn viele Komponenten vom Entwickler kaum falsch verwendet werden können, sind die Guidelines von 1989 für mich auch heute noch ein wertvoller Qualitätsmaßstab.

Dein Design-Problem würde ich so lösen: Für jedes Programm einen RadioButton, alle in einer RadioGroup. Ein einziger ActionButton, der im OnClick sicherstellt, dass er nicht nochmal betätigt werden kann, solange du es nicht willst.

marabu

@sharky: Danke für die Unterstützung
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

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

Re: RadioButton und OnClick

  Alt 23. Mai 2005, 21:31
Moin OPA,

erst einmal muss ich einen Irrtum meinerseits aufklären:
Bei einem RadioButton wird nur dann das OnClick bei Zuweisung an die Eigenschaft Checked ausgelöst, wenn der Wert auf True gesetzt wird, und der Wert gleich false war.

Vergleichbar ist dies auch beim Anklicken.
Ist der Button markiert, so wird kein OnClick ausgelöst, demzufolge hat ein Doppelclick auch kein doppeltes Ausführen der Ereignisroutine zur Folge.

Es genügt also einfach das Starten des Programmes per ShellExecute dort einzutragen, ggf. noch das Zurücksetzen der Eigenschaft Checked.
Die Zuweisungen an Enabled, und die Verzögerung sind überflüssig.

Zu Marabus Anmerkung bezüglich der Verwendung von RadioButtons als Button hätte ich auch noch etwas (nicht böse gemeint):
Interface Hall of Shame

Es spricht natürlich prinzipiell nichts dagegen bei der Gestaltung der Bedienung kreativ zu sein, solange dies eine Verbesserung bedeutet. Bei der Verwendung von RadioButton als Button halte ich dies allerdings für fraglich, da sie sich hier völlig anders verhalten, erwartet.

Wie wäre es denn mit SpeedButton?
Initial werden AllowUp auf true und Down auf false gesetzt.
Im OnClick werden nun
Delphi-Quellcode:
  SpeedButton1.OnClick := nil;
  SpeedButton1.AllowAllUp := false;
gesetzt.
Dies hat zur Folge, dass der Button gedrückt erscheint, und kein Klick mehr Wirkung hat.
Um dieses zu lösen nimmst Du einen weiteren, "normalen", Button als Reset-Button.

Delphi-Quellcode:
  SpeedButton1.AllowAllUp := true;
  SpeedButton1.Down := false;
  SpeedButton1.OnClick := SpeedButton1Click;
Hiermit wird der Button wieder gelöst, und das Anklicken mit Funktion belegt.
Damit sich die Button nicht gegenseitig auslösen muss bei jeden ein anderer GroupIndex > 0 angegeben werden.

Vorteil: Jeder sieht sofort, was er angeklickt hat, und kann gezielt die erneute Nutzung aktivieren (Reset-Button, ggf. einer für alle SpeedButton).
Das ist jetzt auch nicht ideal, aber, IMHO, irgendwie gewohnter, als ein RadioButton.

Eigentlich sollten Button genügen, denn i.d.R. weiss der geübte Windows-Anwender, dass ein Doppelclick auf einen Button diesen auch zweimal aktiviert.
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
Blutiger Anfänger
(Gast)

n/a Beiträge
 
#10

Re: RadioButton und OnClick

  Alt 23. Mai 2005, 22:04
Hallo,

@Sharky, @Marabu, @Chris, Danke fuer Eure Verbesserungsvorschlaege,
werde sie mir mal zu Gemuete fuehren und umsetzen.

@Chris:
Das Checked eines RadioButton auf false zu setzen, reicht leider nicht!
Dies ist auch so ein Phaenomaen fuer mich, wird das aufgerufene Programm sofort wieder geschlossen,
startet es auch schon wieder, diese Geschichte erweist sich dann als Endlosschleife,
von Hand schliessen, wird wieder automatisch gestartet, von Hand...... !!!
Dachte auch erst, dass dies ein Bug ist, leider nicht , passiert mit D6, D7, D_PE 2005 !!

p.s.: Der Hinweis mit Hall of shame, ist schon ok !



Danke und Gruss, OPA!
  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 13:52 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