AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Cross-Platform-Entwicklung Android procedure auf ShowModal warten
Thema durchsuchen
Ansicht
Themen-Optionen

Android procedure auf ShowModal warten

Ein Thema von NickD · begonnen am 29. Jul 2015 · letzter Beitrag vom 31. Jul 2015
Antwort Antwort
Seite 1 von 2  1 2      
NickD

Registriert seit: 10. Okt 2012
Ort: Burgsinn
53 Beiträge
 
Delphi 10.3 Rio
 
#1

Android procedure auf ShowModal warten

  Alt 29. Jul 2015, 08:21
Hi Leute,
ich habe eine Frage zu ShowModal auf Android. Wie verwende ich es wenn ich auf eine Benutzereingabe warten möchte? Wenn ich ein Dialog in einer Procedure aufrufe, wird nicht darauf gewartet bis das Modale Fenster wieder geschlossen wurde.
Ich habe mal eine Beispiel Procedure geschrieben. In der function GetRot() sollte solange gewartet werden, bis sich das Modale Fenster wieder schließt und einen Rückgabewert hat, da sonst immer ein leerer String übergeben wird.
Wie löst man das am Besten?

Delphi-Quellcode:
procedure TfrmMain.CreateFarbe();
var
  Rot, Gruen, Blau: String;
begin
  // Buttonindex holen
  Index := (Sender as TButton).Tag;

  Rot := '';
  Gruen := '';
  Blau := '';
  l := Length('RGB');


  for i := 1 to l do
  begin
    ch := Copy('RGB', i,i);
   
    if ch = 'Rthen
    begin
      Rot := GetRot;
      if Rot = 'then
        Exit;
    end
    else if ch = 'Gthen
    begin
      Gruen := GetGruen;
      if Gruen = 'then
        Exit;
    end
    else if ch = 'Bthen
    begin
      Blau := GetBlau;
      if Blau = 'then
        Exit;
    end;
  end;
  FarbeZusammenstellen(Rot, Gruen, Blau)   
end;

function TfrmMain.GetRot: String;
var
  dlgRot: TfrmFarbauswahl;
  sRot: String;
begin
  dlgRot := TfrmFarbauswahl.Create(nil);
  dlgRot.ShowModal(
  procedure(ModalResult: TModalResult)
  begin
    if ModalResult = mrOk then
    begin
      sRot := dlgRot.lbRot.Items[dlgRot.lbRot.ItemIndex];
    end;
    if ModalResult = mrCancel then
    begin
      sRot := '';
    end;
    dlgRot.Close;
  end
  );
  Result := sRot;
end;
  Mit Zitat antworten Zitat
Benutzerbild von Mavarik
Mavarik

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

AW: Android procedure auf ShowModal warten

  Alt 29. Jul 2015, 09:52
Unter Android ist ein ShowModal ein "Don't do"...

Mavarik
  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 procedure auf ShowModal warten

  Alt 29. Jul 2015, 10:04
Unter Android ist ein ShowModal ein "Don't do"...

Mavarik
Du meinst sicher ein blockierendes ShowModal
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
NickD

Registriert seit: 10. Okt 2012
Ort: Burgsinn
53 Beiträge
 
Delphi 10.3 Rio
 
#4

AW: Android procedure auf ShowModal warten

  Alt 29. Jul 2015, 10:07
Ja das habe ich mir schon gedacht.. Gibt es andere Möglichkeiten in einer procedure auf eine Benutzereingabe aus einem anderen Formular zu warten?
  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 procedure auf ShowModal warten

  Alt 29. Jul 2015, 10:11
Ja das habe ich mir schon gedacht.. Gibt es andere Möglichkeiten in einer procedure auf eine Benutzereingabe aus einem anderen Formular zu warten?
Du musst nicht warten, das ist der Trick. Du gibst einen Callback mit, der ausgeführt wird, wenn der Dialog beendet wurde.
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 Mavarik
Mavarik

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

AW: Android procedure auf ShowModal warten

  Alt 29. Jul 2015, 11:03
Unter Android ist ein ShowModal ein "Don't do"...

Mavarik
Du meinst sicher ein blockierendes ShowModal
Ja wie der Name schon sagt...

Zitat von EMBT:
Use ShowModal to show a form as a modal form. A modal form is one where the application can't continue to run until the form is closed...
  Mit Zitat antworten Zitat
greenmile

Registriert seit: 17. Apr 2003
1.107 Beiträge
 
Delphi 10.3 Rio
 
#7

AW: Android procedure auf ShowModal warten

  Alt 29. Jul 2015, 11:12
Ich persönlich halte nichts von den Callbacks nur für Unterformulare oder Messageboxen, ist mir einfach zu aufwendig.
Du kannst eine globale Variable definieren die von der Unterform gefüllt wird. Das Hauptformular muss nun einfach nur solange warten, bis die Variable gefüllt ist. Beispiel:

Code:
var MsgDlgResult: Integer;

 function MessageDlg(const Msg: string; DlgType: TMsgDlgType;
   Buttons: TMsgDlgButtons; HelpCtx: Longint): Integer;
 begin
   MsgDlgResult := -1;
   FMX.Dialogs.MessageDlg(Msg, DlgType, Buttons, HelpCtx,
             procedure(const AResult: TModalResult)
             begin
               MsgDlgResult:= AResult;
             end
           );
   while MsgDlgResult<0 do Delay(10);
   Result := MsgDlgResult;
 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
 
#8

AW: Android procedure auf ShowModal warten

  Alt 29. Jul 2015, 11:13
Zitat von EMBT:
Use ShowModal to show a form as a modal form. A modal form is one where the application can't continue to run until the form is closed...
Ich behaupte jetzt mal steif und fest, dass diese Aussage total falsch ist. Meine Anwendung lief weiter (diese modale Form gehört ja auch zu meiner Anwendung).

Richtig ist, dass die Methode/Prozedur, die dieses ShowModal aufruft, erst dann weiter läuft, wenn diese modale Form geschlossen wurde. Die Anwendung selber läuft einwandfrei weiter.

@greenmile

Bitte nicht ... es gibt einen guten Grund, warum die modalen Formulare auf den Mobile Devices eben nicht mehr blockierend sind.
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)

Geändert von Sir Rufo (29. Jul 2015 um 11:16 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Mavarik
Mavarik

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

AW: Android procedure auf ShowModal warten

  Alt 29. Jul 2015, 11:26

Code:
   while MsgDlgResult<0 do Delay(10);
Du hast einen Kommentar vergessen..

   while MsgDlgResult<0 do Delay(10); // Töte den Akku

Spass bei Seite... Bitte nicht.. Es gibt bessere Wege

Das war mal ein Post... Als XE6 raus gekommen ist, oder?
Ich hatte das auch so "abgetippt"

[EDIT] Habs gefunden...
Original Post war:

Delphi-Quellcode:
function MyMessageDlg(const Msg: string; DlgType: TMsgDlgType; Buttons: TMsgDlgButtons; HelpCtx: Longint): Integer;
{$IFDEF ANDROID}
var
  MsgDlgResult : Integer;
{$ENDIF}
begin
  {$IFDEF ANDROID}
  MsgDlgResult := -1;

  FMX.Dialogs.MessageDlg(Msg, DlgType, Buttons, HelpCtx,
    procedure(const AResult: TModalResult)
      begin
        MsgDlgResult:= AResult;
      end);

  while MsgDlgResult<0 do
    begin
      Application.Processmessages; // Makes Android Happy...
      Sleep(10);
    end;

    Result := MsgDlgResult;
  {$ELSE}
  Result := FMX.Dialogs.MessageDlg(Msg, DlgType, Buttons, HelpCtx);
  {$ENDIF}
end;

Geändert von Mavarik (29. Jul 2015 um 11:31 Uhr)
  Mit Zitat antworten Zitat
bra

Registriert seit: 20. Jan 2015
711 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#10

AW: Android procedure auf ShowModal warten

  Alt 29. Jul 2015, 11:57
Application.Processmessages ist eine ganz schlechte Idee unter Android/iOS...
  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 01:33 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