AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

XE5 Firemonkey MessageBox/MessageDlg

Ein Thema von Nils S. · begonnen am 12. Apr 2014 · letzter Beitrag vom 11. Jul 2019
Antwort Antwort
Seite 1 von 3  1 23   
Nils S.

Registriert seit: 10. Apr 2014
36 Beiträge
 
Delphi XE5 Professional
 
#1

XE5 Firemonkey MessageBox/MessageDlg

  Alt 12. Apr 2014, 09:39
Hallo zusammen,

ich habe mittlerweile festgestellt, dass es bei Firemonkey keine MessageBox mehr gibt, sondern nur noch den MessageDlg.
Kann man einen MessageDlg irgendwie modal anzeigen?
Oder gibt es eine Alternative?

Hat da jemand eine Idee oder Erfahrung?
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: XE5 Firemonkey MessageBox/MessageDlg

  Alt 12. Apr 2014, 11:21
Gbit es da auch noch sowas wie CreateMessageDialog, bzw. MessageDlgIndirect, welches man selber via ShowModal anzeigen kann?
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.169 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: XE5 Firemonkey MessageBox/MessageDlg

  Alt 12. Apr 2014, 12:22
MessageBox ist eine WinAPI-Funktion. Für eine plattformunabhänges Framework/Implementierung ist das ein NoGo.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von Harry Stahl
Harry Stahl

Registriert seit: 2. Apr 2004
Ort: Bonn
2.475 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: XE5 Firemonkey MessageBox/MessageDlg

  Alt 12. Apr 2014, 13:34
Hallo zusammen,
ich habe mittlerweile festgestellt, dass es bei Firemonkey keine MessageBox mehr gibt, sondern nur noch den MessageDlg.
Kann man einen MessageDlg irgendwie modal anzeigen?
Der wird doch modal angezeigt. Beispiel:
Delphi-Quellcode:
 info := 'Wollen Sie die gewählte Rechnung wirklich löschen?';

  if not IsShiftKeyPressed then begin // Wenn Taste Shift gedrückt ist, nicht fragen
    if MessageDlg(info, TMsgDlgType.mtWarning, [TMsgDlgBtn.mbYes,TMsgDlgBtn.mbNo], 0) = mrNo then begin
      exit;
    end;
  end;
  Mit Zitat antworten Zitat
Nils S.

Registriert seit: 10. Apr 2014
36 Beiträge
 
Delphi XE5 Professional
 
#5

AW: XE5 Firemonkey MessageBox/MessageDlg

  Alt 12. Apr 2014, 16:00
Danke schonmal für die Rückmeldungen.

Habe jetzt nochmal ein bisschen rum probiert.
Ich erzeuge den MessageDlg bei einem FormShow Ereignis
und habe jetzt beim Testen versehentlich mal zwei Dialoge anzeigen lassen.
Der Erste ist nicht modal, der zweite schon.

Wenn ich einen Dialog durch z.B. ein Click Ereignis erzeuge, dann ist er tatsächlich immer modal.

Kann ich das irgendwie umgehen?

Hintergrund ist, dass ich beim Sarten des Programmes den ConnectionString zu einer Datenbank festlege
und die Property Connected auf True setze.
Klappt das nicht, kommt eine Fehlermeldung und die ist dann nicht modal, weil sie bei dem FormShow Ereignis erzeugt wird.
  Mit Zitat antworten Zitat
Benutzerbild von Harry Stahl
Harry Stahl

Registriert seit: 2. Apr 2004
Ort: Bonn
2.475 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: XE5 Firemonkey MessageBox/MessageDlg

  Alt 12. Apr 2014, 16:24
Du kannst einen Timer verwenden, der zunächst nicht Enabled ist.

Den setzt Du beim OnShow der Form auf Enabled (wenn erforderlich) und im TimerEvent Disablest Du zuvor den Timer und zeigst dann Deine Nachricht an, die dann modal ist.

Geändert von Harry Stahl (12. Apr 2014 um 18:04 Uhr)
  Mit Zitat antworten Zitat
Nils S.

Registriert seit: 10. Apr 2014
36 Beiträge
 
Delphi XE5 Professional
 
#7

AW: XE5 Firemonkey MessageBox/MessageDlg

  Alt 14. Apr 2014, 12:33
An sowas in der Art habe ich dann auch gedacht, für ein workaround.
Ich werde das demnächst mal probieren und dann nochmal kurz Kund tun, ob es funktionert hat.

Danke schonmal.
  Mit Zitat antworten Zitat
Nils S.

Registriert seit: 10. Apr 2014
36 Beiträge
 
Delphi XE5 Professional
 
#8

AW: XE5 Firemonkey MessageBox/MessageDlg

  Alt 15. Apr 2014, 20:14
Es hat natürlich, wie erwartet, funktioniert.

Danke nochmal.
  Mit Zitat antworten Zitat
Benutzerbild von Harry Stahl
Harry Stahl

Registriert seit: 2. Apr 2004
Ort: Bonn
2.475 Beiträge
 
Delphi 11 Alexandria
 
#9

AW: XE5 Firemonkey MessageBox/MessageDlg

  Alt 15. Apr 2014, 20:30
Gerne.

Übrigens hier gleich der Hinweis: Einige Sachen funktionieren nach wie vor - auch in XE6 - erst, wenn die Form vollständig initialisiert wurde, also auch OnShow abgeschlossen ist.

Z.B. ein "Imageviewer1.bestfit" funktioniert nicht im OnCreate oder OnShow, sondern erst danach, also auch hier erst per WorkAround im Timer, wenn die Grafik schon eingepasst zum Start der Form angezeigt werden soll.

Das sollte vielleicht auch noch mal von EMBA geändert werden... (QC-Eintrag dazu hatte ich schon zu XE5 gemacht).
  Mit Zitat antworten Zitat
Nils S.

Registriert seit: 10. Apr 2014
36 Beiträge
 
Delphi XE5 Professional
 
#10

AW: XE5 Firemonkey MessageBox/MessageDlg

  Alt 21. Apr 2014, 12:35
Ich habe nun noch eine Frage zu den MessageDlg in Firemonkey.
Wie funktioniert das mit case of?

In VCL habe ich es beispielsweise so gemacht:
Delphi-Quellcode:
case Application.MessageBox('Es wurden bereits Eingaben für einen' + #13 +
                                'neuen Benutzer gemacht.' + #13 +
                                'Sollen diese verworfen werden?',
                                MB_ICONWARNING or
                                MB_YESNOCANCEL or
                                MB_DEFBUTTON3) of
      IDYES:
      begin
        //mach was
      end;
      IDNO:
      begin
        //mach was anderes
      end;
      IDCANCEL:
      begin
        //mach noch was anderes
      end;
    end;
Wenn ich es in Firemonkey so mache:

Delphi-Quellcode:
case MessageDlg
        ('Es wurden bereits Eingaben für einen neuen Benutzer vorgenommen.' + #13 +
        'Sollen diese verworfen werden?',
        TMsgDlgType.mtConfirmation,
        [TMsgDlgBtn.mbYes, TMsgDlgBtn.mbNo, TMsgDlgBtn.mbCancel],
        0,
        TMsgDlgBtn.mbCancel) of
        TMsgDlgBtn.mbYes:
        begin
          //mach was
        end;
        TMsgDlgBtn.mbNo:
        begin
          //mach was anderes
        end;
        TMsgDlgBtn.mbCancel:
        begin
          //mach noch was anderes
        end;
Dann kommt beim Kompilieren die Fehlermeldung inkompatible Typen, Integer und TMsgDlgButton.
Wenn ich nun bei den verschiedenen Cases die Werte der Buttons, also 0, 1 und 3 für Yes, No und Cancel nehme, kommt beim Kompilieren zwar keine Fehlermeldung, aber der Code hat zur Laufzeit auch keine Funktion.

Wie bringe ich das zum Laufen?

Ok, bitte einfach die Frage vergessen, muss in dem Cases natürlich ein IDYes, IDNo und IDCancel verwenden...

Geändert von Nils S. (21. Apr 2014 um 13:19 Uhr) Grund: Selbsterklärend....
  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 07:04 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