AGB  ·  Datenschutz  ·  Impressum  







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

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
44.326 Beiträge
 
Delphi 12 Athens
 
#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"?
Ein Therapeut entspricht 1024 Gigapeut.

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.546 Beiträge
 
Delphi 12 Athens
 
#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
44.326 Beiträge
 
Delphi 12 Athens
 
#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.
Ein Therapeut entspricht 1024 Gigapeut.

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
11.609 Beiträge
 
Delphi 12 Athens
 
#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
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:58 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