AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

TSwitch wieder deaktivieren?

Ein Thema von himitsu · begonnen am 31. Mai 2015 · letzter Beitrag vom 3. Jun 2015
Antwort Antwort
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
38.570 Beiträge
 
Delphi 10.4 Sydney
 
#1

TSwitch wieder deaktivieren?

  Alt 31. Mai 2015, 22:22
FMX-TSwitch bei Fehler wieder deaktivieren?
In XE3 geht es noch, aber zwischenzeitlich wurde ja mehrmals alles komplett umgebaut.

Allein das geht schonmal nicht.
Delphi-Quellcode:
procedure TForm1.Switch1Switch(Sender: TObject);
begin
  Switch1.IsChecked := False;
end;
und so war es eigentlich gemeint.
Delphi-Quellcode:
procedure TForm1.Switch1Switch(Sender: TObject);
begin
  try
    //if Switch1.IsChecked then
    // Activate
    //else
    // Deactivate;
    raise Exception.Create('Fehlermeldung');
  except
    Switch1.IsChecked := False;
    raise;
  end;
end;
Auch Switch1.Model.Value := False; hilft nix.

Kann das jemand bestätigen?
Bei TButton.IsPressed funktioniert es.


Windows und ControlType=Styled ... sonst weiß ich es nicht, wie es ist, aber windows wird es wohl Nativ eh nicht kennen.




PS: Was macht hier eigentlich "iOS" in der Thread-Erstellen-Präfixliste, unter all den anderen "Entwicklungsumgebungen"?
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
Delphi-Tage 2005-2014

Geändert von himitsu (31. Mai 2015 um 23:24 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Harry Stahl
Harry Stahl

Registriert seit: 2. Apr 2004
Ort: Bonn
2.176 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: TSwitch wieder deaktivieren?

  Alt 1. Jun 2015, 00:27
Ohne mir das jetzt genauer angesehen zu haben (will jetzt den Matratzenhorchdienst starten), vermute ich mal, dass hier eine Animation verwendet wird, um den Switch gleiten zu lassen. Evtl. ist die Ausführung noch nicht zu Ende und Du versuchst direkt schon wieder den Switch zurückzusetzen und da kommt sich halt irgendwas ins Gehege.

So kannst Du es jedenfalls machen:

Delphi-Quellcode:
procedure TForm14.SetSwitchToFalse;
begin
  Switch1.IsChecked := false;
end;

procedure TForm14.Switch1Switch(Sender: TObject);
var
   T: ITask;
begin
   T := TTask.Create(procedure ()
     begin
       TThread.Synchronize(
       nil,
       procedure
       begin
         Self.SetSwitchToFalse;
       end);
     end);
   T.Start;
end;
  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
 
#3

AW: TSwitch wieder deaktivieren?

  Alt 1. Jun 2015, 01:40
Das "Aktivieren/Deaktivieren" sollte allerdings auch im Thread ablaufen
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
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
38.570 Beiträge
 
Delphi 10.4 Sydney
 
#4

AW: TSwitch wieder deaktivieren?

  Alt 1. Jun 2015, 03:34
Nee, die Komponenten sind ja nicht threadsave und ohne die Synchronisierung startet das Zurücksetzen eventuell zu früh.
Die Animation scheint blockierend abzulaufen und demnach wartet das Synchronize auf das Ende.

Leider ist es dennoch unschön, denn man sieht den Schalter noch umswitchen, bevor er schnell wieder zurück springt.
Witziger Weise ist das nur so, wenn man nur IsChecked auf False setzt ... beim Anzeigen einer Exception ist diese Animation nicht mehr zu sehn.

Delphi-Quellcode:
    // btTcpOpen.IsChecked := FeigTCP.IsActive;
    TThread.CreateAnonymousThread(procedure // die Animation und eine schrottige Implementierung verhindern das Zurückschalten
    begin
      TThread.Synchronize(nil, procedure
      begin
        btTcpOpen.IsChecked := not FeigTCP.IsActive; // nochmal zurück, sonst bekommt der blöde Button es eventuell nicht mit
        btTcpOpen.IsChecked := FeigTCP.IsActive;
      end);
    end).Start;
Ja, ich schreib bei jedem Bugfix emotionsgeladen das Warum dazu, auch bei OpenSource-Codes, damit jeder weiß warum das dort so ist.
Irgendwo muß man sich ja abreagieren, sonst würde man noch öfters wo anders seine Emotionen rauslassen, wenn es sich anstaut.
(ich würde das aber nicht jedem empfehlen, sonst bestehen viele Programme nur noch aus Schimpfworten)

Ich hatte keine Lust nur wegen dem Bugfix System.Threading einzubinden, außerdem gibt es das noch nicht lange, was für eine Komponente etwas ungünstig ist, darum TThread.CreateAnonymousThread().Start statt TTast.Run(). (gut, wenn TThread.Queue() richtig arbeiten würde, wäre es noch einfacher )

Jetzt brauch ich nur noch eine Metrik, die auf Schimpfworte und das Wort Bugfix reagiert und die Anzahl der normalen Kommentare damit vergleicht.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
Delphi-Tage 2005-2014

Geändert von himitsu ( 1. Jun 2015 um 04:44 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
8.642 Beiträge
 
Delphi 10.4 Sydney
 
#5

AW: TSwitch wieder deaktivieren?

  Alt 1. Jun 2015, 09:19
Jetzt brauch ich nur noch eine Metrik, die auf Schimpfworte und das Wort Bugfix reagiert und die Anzahl der normalen Kommentare damit vergleicht.
Schau mal hier: http://codeofrob.com/entries/evented...b-commits.html

Stichwort: Happiness index
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  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: TSwitch wieder deaktivieren?

  Alt 1. Jun 2015, 13:14
Es ist halt immer problematisch, wenn man etwas falsch umsetzt und dann das richtige Verhalten erwartet.

Wer ein iPhone hat und sehen möchte, wie es richtig umgesetzt ist, der schaltet mal Bluetooth in den Einstellungen ein und aus.

Bei jeder Änderung der Switch-Position, verschwindet der Switch und es taucht statt dessen diese Kringel-Animation auf (es passiert etwas im Hintergrund). Nach Abschluss erscheint wieder der Switch und der aktuelle Status (ein/aus) wird mit der Switch-Position angezeigt.

Schon bleibt die Oberfläche immer reaktionsbereit.
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
redox
(Gast)

n/a Beiträge
 
#7

AW: TSwitch wieder deaktivieren?

  Alt 1. Jun 2015, 14:09
Mit meinem Delph7 Personal habe ich zwar keinerlei/kaum noch Mitspracherecht, aber die Antworten von Sir Rufo sind doch immer wieder sehr lesenswert

Vielen Dank an dich dafür, Sir Rufo!

Aber wer ist denn das in deinem Avatar-Bild? Ein Fußballer ?
  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
 
#8

AW: TSwitch wieder deaktivieren?

  Alt 1. Jun 2015, 14:26
Mit meinem Delph7 Personal habe ich zwar keinerlei/kaum noch Mitspracherecht, aber die Antworten von Sir Rufo sind doch immer wieder sehr lesenswert

Vielen Dank an dich dafür, Sir Rufo!
Danke für die Blumen ...
Aber wer ist denn das in deinem Avatar-Bild? Ein Fußballer ?
Wie kommst du auf Fußballer? Ich habe mit Fußball nicht wirklich was am Hut und bevorzuge als Avatar-Bilder die, die mich selber zeigen.

Also, das Bild zeigt mich selber und darum garantiert zu 100% keinen Fußballer
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
redox
(Gast)

n/a Beiträge
 
#9

AW: TSwitch wieder deaktivieren?

  Alt 1. Jun 2015, 14:51
Mit meinem Delph7 Personal habe ich zwar keinerlei/kaum noch Mitspracherecht, aber die Antworten von Sir Rufo sind doch immer wieder sehr lesenswert

Vielen Dank an dich dafür, Sir Rufo!
Danke für die Blumen ...
Aber wer ist denn das in deinem Avatar-Bild? Ein Fußballer ?
Wie kommst du auf Fußballer? Ich habe mit Fußball nicht wirklich was am Hut und bevorzuge als Avatar-Bilder die, die mich selber zeigen.

Also, das Bild zeigt mich selber und darum garantiert zu 100% keinen Fußballer
Keine weitere Lobhudeleine von mir hier, du bekommst demnächst eine PN von mir
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
38.570 Beiträge
 
Delphi 10.4 Sydney
 
#10

AW: TSwitch wieder deaktivieren?

  Alt 3. Jun 2015, 21:38
Ich dachte doch TButton funktioniert.
Tja, zu früh gefreut.

Mehrere Buttons mit StaysPressed=True und
Delphi-Quellcode:
procedure TTestMainForm.btMenuShowClick(Sender: TObject);
begin
  tcPages.ActiveTab := tcPages.Tabs[TComponent(Sender).Tag];
  TButton(Sender).IsPressed := True;
end;
Wenn man nochmal auf den aktiven Button drückt, würde er sich ja loslassen, also TButton(Sender).IsPressed := True; mit reingemacht und ging,
aber dann hab ich mal "ausversehn" einen Doppelklick gemacht.
Sollte man nun auf die Idee kommen und sowohl OnClick, als auch OnDblClick dieses Event zuzuweisen, dann wird man enttäuscht ... läuft also auch wieder auf diesen bösen Thread+Synchronize hinaus.

Schade, daß es kein abschaltbares AutoCheck gibt, so wie bei den TMenuItems.

[edit]
Maustaste Drücken und Maus vom Button ziehen, bevor losgelassen wird = kein Klick.
So weit funktioniert es, aber IsPressed wird dennoch umgeschaltet, wenn es vorher True war. (hier geb ich wol einfach auf)
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
Delphi-Tage 2005-2014

Geändert von himitsu ( 3. Jun 2015 um 22:12 Uhr)
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 +2. Es ist jetzt 02:18 Uhr.
Powered by vBulletin® Copyright ©2000 - 2021, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf