AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Cross-Platform-Entwicklung Android: Switch vom vorherigen Formular zurücksetzen

Android: Switch vom vorherigen Formular zurücksetzen

Ein Thema von amigage · begonnen am 19. Aug 2015 · letzter Beitrag vom 19. Aug 2015
Antwort Antwort
amigage

Registriert seit: 11. Nov 2005
Ort: Leipzig
231 Beiträge
 
Delphi 10.4 Sydney
 
#1

Android: Switch vom vorherigen Formular zurücksetzen

  Alt 19. Aug 2015, 15:05
Hallo,

ich bin am Verzweifeln und hoffe auf Euren Tipp.

Und zwar habe zwei nur Firemonkey Formulare.

Form1 hat z.B. nur mehrere TSwitch-Komponenten, die bei Aktivierung ein neues Fenster Form2 öffnen.
Wenn in Form2 ein Zurück-Button betätigt wird, soll vor dem Schließen die gewählte TSwitch-Komponente wieder zurückgesetzt werden. (.isChecked := false);

Also merke ich mir die Komponente in der Variable RememberSwitch , um diese dann in der Prozedur ResetSelectedSwitch() ansprechen zu können.

Delphi-Quellcode:
type
  public
    { Public-Deklarationen }
    procedure ResetSelectedSwitch;
  end;

// Formular 1
procedure TForm1.Switch1Switch(Sender: TObject);
var
  Dlg: TForm2;
begin
  RememberSwitch := TSwitch(Sender);
  showmessage(RememberSwitch.Name); // der entsprechende Name der Komponente wird korrekt angezeigt
    
  if TSwitch(Sender).isChecked then
  begin
      Dlg := TForm2.Create(Self);
      Dlg.Show;
  end
end;

Und hier ist der Aufruf aus Form2.

Delphi-Quellcode:
// Formular 2
procedure TForm2.btnCancelClick(Sender: TObject);
begin
  Form1.ResetSelectedSwitch;
  Close;
end;

Und hier entsteht bei der Ausgabe des Namens der gemerkten TSwitch-Komponente eine Zugriffsverletzung.

Delphi-Quellcode:
procedure TForm1.ResetSelectedSwitch;
begin
  showmessage(RememberSwitch.Name); // <---- Zugriffsverletzung
  TSwitch(RememberSwitch).IsChecked := false;
end;

Ich habe es auch schon vorher über FindComponent() probiert, aber auch hier kam eine Zugriffsverletzung.

Ich freue mich über jedweden Hinweis. Danke.

Amigage
  Mit Zitat antworten Zitat
Benutzerbild von Mavarik
Mavarik

Registriert seit: 9. Feb 2006
Ort: Stolberg (Rhld)
3.958 Beiträge
 
Delphi 10.3 Rio
 
#2

AW: Android: Switch vom vorherigen Formular zurücksetzen

  Alt 19. Aug 2015, 15:34
Sicher das die Exception da kommt und nicht beim Cancel?
  Mit Zitat antworten Zitat
amigage

Registriert seit: 11. Nov 2005
Ort: Leipzig
231 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: Android: Switch vom vorherigen Formular zurücksetzen

  Alt 19. Aug 2015, 15:44
Ja, sicher. Denn das funktioniert:

Delphi-Quellcode:
procedure TForm1.ResetSelectedSwitch;
begin
  showmessage('hier');
end;
  Mit Zitat antworten Zitat
Benutzerbild von Mavarik
Mavarik

Registriert seit: 9. Feb 2006
Ort: Stolberg (Rhld)
3.958 Beiträge
 
Delphi 10.3 Rio
 
#4

AW: Android: Switch vom vorherigen Formular zurücksetzen

  Alt 19. Aug 2015, 15:47
ja aber dlg ist "out auf scope"

ARC!

Wo ist die Variable definiert?
  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
 
#5

AW: Android: Switch vom vorherigen Formular zurücksetzen

  Alt 19. Aug 2015, 15:47
und wie sieht es damit aus
Delphi-Quellcode:
// Formular 1
procedure TForm1.Switch1Switch(Sender: TObject);
var
  Dlg: TForm2;
  Switch : TSwitch absolute Sender;
begin
  showmessage(Switch.Name); // kann dann irgendwann raus ;o)

  if Switch.isChecked then
  begin
    Dlg := TForm2.Create(Self);
    Dlg.ShowModal(
      procedure ( ModalResult : TModalResult )
      begin
        Switch.IsChecked := False;
      end );
  end
end;
Jetzt brauchst du die Form nur noch chliessen und alles wird gut
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
amigage

Registriert seit: 11. Nov 2005
Ort: Leipzig
231 Beiträge
 
Delphi 10.4 Sydney
 
#6

AW: Android: Switch vom vorherigen Formular zurücksetzen

  Alt 19. Aug 2015, 16:09
@Sir Rufo: Besten Dank, das war's. Damit muss ich mir auch nicht mehr die gewählte Komponente merken, sondern nur das ModalResult auswerten...

Neu für mich war auch: Switch : TSwitch absolute Sender; Lese ich das richtig, dass bei der Definition immer davon ausgegangen werden kann, dass es sich um TSwitch handelt? Bisher habe ich TSwitch(Sender) verwendet...

Beste Dank.
Amigage
  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
 
#7

AW: Android: Switch vom vorherigen Formular zurücksetzen

  Alt 19. Aug 2015, 16:15
Neu für mich war auch: Switch : TSwitch absolute Sender; Lese ich das richtig, dass bei der Definition immer davon ausgegangen werden kann, dass es sich um TSwitch handelt? Bisher habe ich TSwitch(Sender) verwendet...
Nein, kann man nicht, genausowenig, wie du bei TSwitch(Sender) davon ausgehen kannst, denn hier handelt es sich um einem harten Cast.

Wenn man aber eh einen harten Cast vornimmt, dann kann man das auch gleich so deklarieren und spart sich das ständige casten ... was einfach nur viel Schreibarbeit ist.

Wenn du es sicher haben möchtest, dann so
Delphi-Quellcode:
procedure TForm1.Switch1Switch(Sender: TObject);
var
  Dlg: TForm2;
  Switch : TSwitch absolute Sender;
begin
  // Wir prüfen, ob der Sender auch wirklich vom Typ TSwitch ist
  if not ( Sender is TSwitch ) then
    Exit; // ist nicht, dann z.B. raus hier

  showmessage(Switch.Name); // kann dann irgendwann raus ;o)

  if Switch.isChecked then
  begin
    Dlg := TForm2.Create(Self);
    Dlg.ShowModal(
      procedure ( ModalResult : TModalResult )
      begin
        Switch.IsChecked := False;
      end );
  end
end;
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
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 +1. Es ist jetzt 06:47 Uhr.
Powered by vBulletin® Copyright ©2000 - 2020, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2020 by Daniel R. Wolf