AGB  ·  Datenschutz  ·  Impressum  







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

Android: MessageDlg Logik

Offene Frage von "Daniel"
Ein Thema von amigage · begonnen am 25. Jan 2015 · letzter Beitrag vom 14. Feb 2015
Antwort Antwort
Seite 1 von 4  1 23     Letzte »    
amigage

Registriert seit: 11. Nov 2005
Ort: Leipzig
274 Beiträge
 
Delphi 12 Athens
 
#1

Android: MessageDlg Logik

  Alt 25. Jan 2015, 15:47
Hallo,

ich finde die Android Logik nicht ganz sinnvoll, keine blockierenden Meldungen zuzulassen:

Beispiel: Nachfrage, ob eine bestehende Datei überschrieben werden soll.

Windows:
Delphi-Quellcode:
if FileExists() then
begin
   Case MsgDlg('soll die Datei überschrieben werden') of
     mrNo: exit;
    end;
end;

// ab hier wird die Datei überschrieben
Android:
Delphi-Quellcode:
if FileExists() then
begin
  MsgDlg('soll die Datei überschrieben werden')
     procedure(const AResult: TModalResult)
     begin
       Case AResult of
          mrNo: exit;
          mrYes: begin
                 // ab hier wird die Datei überschrieben
                 exit;
                 end;
       end;
    end);
  exit;
end;

// ab hier wird die Datei überschrieben

Mich stört hierbei, dass ich die nach der Frage abzuarbeitenden Befehle in eine Funktion auslagern muss, da die Befehle entweder bei einer nicht vorhandenen Datei und bei einem "Ja, du darfst überschreiben" ausgeführt werden sollen.

Wie handhabt ihr diese Logik?

Amigage

Geändert von amigage (25. Jan 2015 um 16:09 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#2

AW: Android: MessageDlg Logik

  Alt 25. Jan 2015, 16:06
Das Problem ist halt, daß es dort eigentlich nicht sowas wie "modale" Dialoge gibt, wie man sie aus den nicht-mobilen Plattformen kennt und Emba nicht in der Lage war etwas funktionell "gleichwertiges" hinzubekommen.
Eigentlich macht man ein neues Fenster auf und reagiert dort dann auf den Button-Klick ... und diese Syntax ist praktisch die gekapselte "Kurzfassung" davon, aber statt der anonymen Methode darfst du auch gern eine richtige Methode oder ein eigenes Fenster benutzen.
$2B or not $2B

Geändert von himitsu (25. Jan 2015 um 16:16 Uhr)
  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: Android: MessageDlg Logik

  Alt 25. Jan 2015, 16:34
Selbst bei der VCL gibt es eigentlich keine modalen Dialoge. Das was da als modal verkauft wird, ist eine Schleife, die ständig Application.ProcessMessages aufruft. Vorher wurden alle anderen Formulare abgeschaltet und werden nachher wieder eingeschaltet, bzw. auf den gespeicherten Zustand zurückgesetzt.

Dieses modal soll ja eigentlich nur weitere Eingaben in den anderen Formularen verhindern und nur in diesem einzigen zulassen. Darum wird bei den Mobil-Plattformen quasi ein Vorhang (Rectangle, Opacity 50%, HitTest True) davorgelegt und dann kommt der Dialog. Am Ende wird der wieder entfernt.

Allerdings würde mich so eine Exit-Orgie in deinem Code auch stören:
Delphi-Quellcode:
if FileExists() then
begin
  MsgDlg('soll die Datei überschrieben werden',
     procedure(const AResult: TModalResult)
     begin
       if AResult = mrYes then
          begin
                 // ab hier wird die Datei überschrieben
          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
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#4

AW: Android: MessageDlg Logik

  Alt 25. Jan 2015, 16:47
Selbst bei der VCL gibt es eigentlich keine modalen Dialoge. ...
OK, ob das vom Windows so gemacht wird (z.B. MessageBox) oder manuell von der VCL ... sowas Ähnliches hätte man doch bestimmt auch hier hinbekommen.
(z.B. Android ist auch auch "nur" ein Linux)

Und die zusätzliche Schleife ist nichts Besonderes, denn das ist der Normalfall ... siehe Application.Run
$2B or not $2B

Geändert von himitsu (25. Jan 2015 um 16:54 Uhr)
  Mit Zitat antworten Zitat
amigage

Registriert seit: 11. Nov 2005
Ort: Leipzig
274 Beiträge
 
Delphi 12 Athens
 
#5

AW: Android: MessageDlg Logik

  Alt 26. Jan 2015, 13:22
Zitat:
Allerdings würde mich so eine Exit-Orgie in deinem Code auch stören:
Das stimmt, da ja bei der Frage nur die anonyme Methode durchlaufen wird, kann man sich die zusätzlichen exit sparen.
  Mit Zitat antworten Zitat
eddie11

Registriert seit: 8. Nov 2005
Ort: Zossen bei Berlin
236 Beiträge
 
Delphi XE8 Professional
 
#6

AW: Android: MessageDlg Logik

  Alt 26. Jan 2015, 14:24
Wie wärs denn damit?

Delphi-Quellcode:
procedure TForm1.Button16Click(Sender: TObject);
begin
  if not Confirm('Willst Du?') then
    Exit
  // Weiter gehts erst nach Click
end;

function TForm1.Confirm(const AText:String):Boolean;
var
  geklickt: Boolean;
  Ergebnis: Boolean;
begin
  Ergebnis := false;
  geklickt := false;
  MsgDialog(AText,TMsgDlgType.mtConfirmation,[TMsgDlgBtn.mbYes,TMsgDlgBtn.mbNo],TMsgDlgBtn.mbYes,
     procedure(const AResult: TModalResult)
     begin
       Ergebnis := (AResult=mrYes);
       geklickt := true;
     end);
  repeat
    Application.ProcessMessages();
  until geklickt;
  Result := Ergebnis;

end;
Gruß
Eddie
Edgar Leifeld
Liebe Grüße aus Zossen bei Berlin

Die Kontramedüse ist verdrupelt!!!
  Mit Zitat antworten Zitat
Hwfa

Registriert seit: 13. Feb 2015
1 Beiträge
 
#7

AW: Android: MessageDlg Logik

  Alt 13. Feb 2015, 07:59
Dieses modal soll ja eigentlich nur weitere Eingaben in den anderen Formularen verhindern und nur in diesem einzigen zulassen. Darum wird bei den Mobil-Plattformen quasi ein Vorhang (Rectangle, Opacity 50%, HitTest True) davorgelegt und dann kommt der Dialog. Am Ende wird der wieder entfernt.
NAT
  Mit Zitat antworten Zitat
eddie11

Registriert seit: 8. Nov 2005
Ort: Zossen bei Berlin
236 Beiträge
 
Delphi XE8 Professional
 
#8

AW: Android: MessageDlg Logik

  Alt 13. Feb 2015, 08:40
Dieses modal soll ja eigentlich nur weitere Eingaben in den anderen Formularen verhindern und nur in diesem einzigen zulassen. Darum wird bei den Mobil-Plattformen quasi ein Vorhang (Rectangle, Opacity 50%, HitTest True) davorgelegt und dann kommt der Dialog. Am Ende wird der wieder entfernt.
Das stimmt, weitere Eingaben werden geblockt - aber die Programmausführung wartet nicht. Wenn nach dem Dialog noch weiterer Code folgt, dann wird dieser ausgeführt ohne auf die Antwort des Dialogs zu warten - jedenfalls ist das bei Android so.
Edgar Leifeld
Liebe Grüße aus Zossen bei Berlin

Die Kontramedüse ist verdrupelt!!!
  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
 
#9

AW: Android: MessageDlg Logik

  Alt 13. Feb 2015, 08:57
Dann programmiere deine Anwendung doch einfach besser lesbar
Delphi-Quellcode:
procedure ConfirmAction( const AText : string; const AProc : TProc );
begin
  MsgDialog(AText,TMsgDlgType.mtConfirmation,[TMsgDlgBtn.mbYes,TMsgDlgBtn.mbNo],TMsgDlgBtn.mbYes,
     procedure(const AResult: TModalResult)
     begin
       if (AResult=mrYes) then
         AProc();
     end);
end;

procedure TForm1.Button6Click( Sender : TObject );
begin
  ConfirmAction( 'Willst du Drucken?', PrintFoo );
end;

procedure TForm1.PrintFoo;
begin
  // Hier der Code zum drucken
end;
Wow, schon wird aus einem ominösen und unleserlichem Button6Click eine dokumentierte Methode. Auf einem Blick sieht man nun, dass hier nach Rückfrage ein Druck ausgelöst wird.

Ja, dass mit diesem komischen Dialog-Gedöns ist richtig ekelig: Man muss sich ja richtig Gedanken machen
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
eddie11

Registriert seit: 8. Nov 2005
Ort: Zossen bei Berlin
236 Beiträge
 
Delphi XE8 Professional
 
#10

AW: Android: MessageDlg Logik

  Alt 13. Feb 2015, 09:18
Dann programmiere deine Anwendung doch einfach besser lesbar

Wow, schon wird aus einem ominösen und unleserlichem Button6Click eine dokumentierte Methode. Auf einem Blick sieht man nun, dass hier nach Rückfrage ein Druck ausgelöst wird.
:
Wow, wer abstrahieren kann ist besser dran!

Üblichweise heißt ein Button bei mir nicht Button16 (manchmal auch Button17 oder ..18 ,), das macht die IDE halt so, wenn man mal schell was ausprobieren will....
Und "willst Du" scheint mir auch nicht unbedingt aussage(frage)kräftig, steht üblicherweise nicht in meinen Dialogboxen. Könnt es vielleicht sein, dass das mal Q&D hingeklickt ist um die Funktionalität auszuprobieren / zu zeigen......?

Aber im Ernst. Wer für Desktop programmiert, der ist gewöhnt, dass "modal" bedeutet, dass die Anwendung erst weiterläuft, wenn das modale Fenster geschlossen wurde,
Darum geht's hier. Nicht um Namenskonventionen oder Programmlesbarkeit.
Edgar Leifeld
Liebe Grüße aus Zossen bei Berlin

Die Kontramedüse ist verdrupelt!!!
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 4  1 23     Letzte »    


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 02:59 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