Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Cross-Platform-Entwicklung (https://www.delphipraxis.net/91-cross-platform-entwicklung/)
-   -   Delphi [MAC] MessageDlg führt zu "Out of Memory" (https://www.delphipraxis.net/179147-%5Bmac%5D-messagedlg-fuehrt-zu-out-memory.html)

Darlo 17. Feb 2014 12:49


[MAC] MessageDlg führt zu "Out of Memory"
 
Hallo zusammen,

wenn ich unter OS X eine MessageDLG erzeuge stürzt das Programm mit "Out of Memory" ab.

Es wird auf der GUI eine Funktion aus einer anderen Unit aufgerufen, die die Nachricht anzeigen soll.
Delphi-Quellcode:
    if dsListe.Count = 0 then
      begin
        result := false;
        frmMain.myMessageDlg('Unter dem Suchbegriff '+suchwort+' wurde kein Nachname gefunden.', TMsgDlgType.mtError, mbOKCancel,0);
        exit;
      end
Ist ein BUG bzw. Workaround bekannt.

nuclearping 17. Feb 2014 13:00

AW: [MAC] MessageDlg führt zu "Out of Memory"
 
1) Passiert das nur mit OSX oder auch mit Windows?
2) frmMain ist in dem Fall instanziert?
3) Zeig mal den Code von
Delphi-Quellcode:
frmMain.myMessageDlg

Darlo 17. Feb 2014 13:06

AW: [MAC] MessageDlg führt zu "Out of Memory"
 
Hi,

ja es passiert nur unter OS X. Die Windows-Version läuft super stabil.

Hatte nur mal probiert die MessageDlg über das Hauptformular aufzurufen:

Delphi-Quellcode:
function TfrmMain.myMessageDlg(msg: String; msgType: TMsgDlgType; msgBtn: TMsgDlgButtons; msgInt: Integer): boolean;
begin
  MessageDlg(msg,msgType,msgBtn,msgInt);
end;
Ursprünglich wurde die MessageDlg direkt aufgerufen
Delphi-Quellcode:
    if dsListe.Count = 0 then
      begin
        result := false;
        MessageDlg('Unter dem Suchbegriff '+suchwort+' wurde kein Nachname gefunden.', TMsgDlgType.mtError, mbOKCancel,0);
        exit;
      end
Sobald die MessageDlg aufgeht läuft der Arbeitsspeicher voll, pro Sekunde ca. +400 MB bis das Programm geschlossen wird.

Sir Rufo 17. Feb 2014 13:07

AW: [MAC] MessageDlg führt zu "Out of Memory"
 
Ich würde hier ganz stumpf eine Exception werfen -> Look and Feel bleibt dabei gleich (weil du die Rückgabe nicht auswertest)
Delphi-Quellcode:
    if dsListe.Count = 0 then
      raise Exception.CreateFmt('Unter dem Suchbegriff %s wurde kein Nachname gefunden.',[suchwort]);

himitsu 17. Feb 2014 13:19

AW: [MAC] MessageDlg führt zu "Out of Memory"
 
Zitat:

Zitat von Sir Rufo (Beitrag 1248199)
(weil du die Rückgabe nicht auswertest)

Dennoch dem Benutzer mehrere Buttons (mbOKCancel) zur Auswahl bieten, aber dann immer das Gleiche machen, egal was gedrückt wurde.

Zitat:

Zitat von Darlo (Beitrag 1248198)
Sobald die MessageDlg aufgeht läuft der Arbeitsspeicher voll, pro Sekunde ca. +400 MB bis das Programm geschlossen wird.

Wie oft die Sekunde wird der Code denn aufgerufen?

Und jetzt sag blos nicht, das ist in einem Timer?
Während der Dialog angezeigt wird, arbeiten Timmer fleißig weiter und es werden gaaaaaaaaanz viele Dialoge übereinander aufgemacht, was irgendwann bestimmt überläuft.

Darlo 17. Feb 2014 13:34

AW: [MAC] MessageDlg führt zu "Out of Memory"
 
Zitat:

Zitat von Sir Rufo (Beitrag 1248199)
Ich würde hier ganz stumpf eine Exception werfen -> Look and Feel bleibt dabei gleich (weil du die Rückgabe nicht auswertest)
Delphi-Quellcode:
    if dsListe.Count = 0 then
      raise Exception.CreateFmt('Unter dem Suchbegriff %s wurde kein Nachname gefunden.',[suchwort]);

Führt leider zum selben Ergebnis....

Sir Rufo 17. Feb 2014 13:41

AW: [MAC] MessageDlg führt zu "Out of Memory"
 
Zitat:

Zitat von Darlo (Beitrag 1248204)
Zitat:

Zitat von Sir Rufo (Beitrag 1248199)
Ich würde hier ganz stumpf eine Exception werfen -> Look and Feel bleibt dabei gleich (weil du die Rückgabe nicht auswertest)
Delphi-Quellcode:
    if dsListe.Count = 0 then
      raise Exception.CreateFmt('Unter dem Suchbegriff %s wurde kein Nachname gefunden.',[suchwort]);

Führt leider zum selben Ergebnis....

Also mit XE5 Update 2 funktioniert das einwandfrei ...
Delphi-Quellcode:
unit FormMain;

interface

uses
  System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
  FMX.Types, FMX.Graphics, FMX.Controls, FMX.Forms, FMX.Dialogs, FMX.StdCtrls;

type
  TForm1 = class( TForm )
    Button1 : TButton;
    Button2: TButton;
    procedure Button1Click( Sender : TObject );
    procedure Button2Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1 : TForm1;

implementation

{$R *.fmx}

procedure TForm1.Button1Click( Sender : TObject );
begin
  MessageDlg( 'Test', TMsgDlgType.mtError, mbOKCancel, 0 );
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  raise Exception.Create('Test');
end;

end.

himitsu 17. Feb 2014 15:56

AW: [MAC] MessageDlg führt zu "Out of Memory"
 
Zitat:

Zitat von Darlo (Beitrag 1248204)
Führt leider zum selben Ergebnis....

Du könntest ja mal den 2. Teil meines Posts beantworten.

Darlo 17. Feb 2014 17:58

AW: [MAC] MessageDlg führt zu "Out of Memory"
 
Hi,

nein es sind keine Timer involviert und es wird die Funktion nur einmal ausgeführt. An einer anderen Stelle funktioniert die MessageDlg auch ohne Probleme.
An anderen Stellen wird Sie angezeigt und gleichzeitig läuft der speicher voll. Wenn ich die MessageDlg da auskommentiere wird der restliche Code ohne Probleme abgearbeitet.

Btw. an dieser Stelle ist eigentlich nur ein "OK-Button", wenn mehrere Buttons zur Verfügung stehen hat dieses natürlich einen Sinn und wird ausgewertet ;-)

Gruß

Union 17. Feb 2014 18:01

AW: [MAC] MessageDlg führt zu "Out of Memory"
 
Kannst Du ein Beispielprojekt anhängen, das den Fehler reproduziert? Am besten nur mit dem frmMain und einem weiteren, das den Aufruf enthält?


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:12 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