AGB  ·  Datenschutz  ·  Impressum  







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

Erhalte falsches modalResult

Ein Thema von delphicoder123 · begonnen am 28. Feb 2019 · letzter Beitrag vom 1. Mär 2019
Antwort Antwort
delphicoder123

Registriert seit: 14. Feb 2019
102 Beiträge
 
#1

Erhalte falsches modalResult

  Alt 28. Feb 2019, 22:05
Hallo,
nach dem Klick auf den Ok bzw. Abbrechen Button möchte ich als Result mrOK bzw. mrCancel erhalten.
Was ist an meinem Code falsch? Ich erhalte gleich beim Starten des Programms die Meldung "False".
Beim Klicken auf die Buttons aber keine Meldung.


Code:
unit Unit1;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;

type
  TForm1 = class(TForm)
    btnOK: TButton;
    btnAbbrechen: TButton;
    procedure btnOKClick(Sender: TObject);
    procedure btnAbbrechenClick(Sender: TObject);
    function modalErgebnis(): String;
    procedure FormActivate(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}


 procedure TForm1.btnOKClick(Sender: TObject);
begin
  Form1.ModalResult:=mrOk;
end;

procedure TForm1.FormActivate(Sender: TObject);
begin
   ShowMessage( modalErgebnis() );
end;

procedure TForm1.btnAbbrechenClick(Sender: TObject);
begin
  Form1.ModalResult:=mrCancel;
end;

function TForm1.modalErgebnis(): String;
begin
  if Form1.ModalResult=mrOk then
  begin
    result:='OK';
  end
  else if Form1.ModalResult=mrCancel then
  begin
     result:='Abbrechen';
  end
  else
  begin
    result:='False';
  end;
end;

end.
  Mit Zitat antworten Zitat
old7
(Gast)

n/a Beiträge
 
#2

AW: Erhalte falsches modalResult

  Alt 1. Mär 2019, 03:49
Du brauchst mindestens zwei Formulare

Das 1. ruft das 2. mit ShowModal auf und wertet das Ergebnis des Aufrufs aus.

Siehe angehängte Mini-Demo für Delphi7. Im 2. Formular ist Alles über den OI eingestellt.
Angehängte Dateien
Dateityp: zip MR_Demo_Delphi7.zip (2,8 KB, 10x aufgerufen)
  Mit Zitat antworten Zitat
Ydobon

Registriert seit: 3. Mär 2006
261 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: Erhalte falsches modalResult

  Alt 1. Mär 2019, 07:48
Angesichts deiner Fragen wäre es interessant zu erfahren, was du tatsächlich vor hast.
In procedure TForm1.Button1Click(Sender: TObject); ist Sender immer die auslösende Komponente, auch wenn du diese Ereignisbehandlungsprozedur zusätzlich noch Button2, Button3,..,ButtonX zuweisen würdest. (Sender as TButton).Caption ergibt dann z.B. die Beschriftung des jeweils gedrückten Buttons. Oder die Eigenschaft "Tag" der Komponenten, eine beliebige Ganzzahl, die man zu solchen Identifizierungen auch nutzen kann.
  Mit Zitat antworten Zitat
delphicoder123

Registriert seit: 14. Feb 2019
102 Beiträge
 
#4

AW: Erhalte falsches modalResult

  Alt 1. Mär 2019, 08:21
Du brauchst mindestens zwei Formulare

Das 1. ruft das 2. mit ShowModal auf und wertet das Ergebnis des Aufrufs aus.

Siehe angehängte Mini-Demo für Delphi7. Im 2. Formular ist Alles über den OI eingestellt.
Die zip-Datei ist fehlerhaft.
  Mit Zitat antworten Zitat
jsp

Registriert seit: 9. Aug 2003
50 Beiträge
 
#5

AW: Erhalte falsches modalResult

  Alt 1. Mär 2019, 08:33
Nö... Alles funktioniert...
  Mit Zitat antworten Zitat
Benutzerbild von scrat1979
scrat1979

Registriert seit: 12. Jan 2007
Ort: Sulzbach a.d. Murr
1.028 Beiträge
 
Delphi 10.4 Sydney
 
#6

AW: Erhalte falsches modalResult

  Alt 1. Mär 2019, 09:13
Du hast im Ereignis „OnActivate“ ja weder mrOk noch mrCancel als ModalResult definiert, daher erscheint logischerweise „false“ als Ausgabe.
Michael Kübler
  Mit Zitat antworten Zitat
old7
(Gast)

n/a Beiträge
 
#7

AW: Erhalte falsches modalResult

  Alt 1. Mär 2019, 09:58
Du brauchst mindestens zwei Formulare

Das 1. ruft das 2. mit ShowModal auf und wertet das Ergebnis des Aufrufs aus.

Siehe angehängte Mini-Demo für Delphi7. Im 2. Formular ist Alles über den OI eingestellt.
Die zip-Datei ist fehlerhaft.
Dann halt nocheinmal als 7z mit zusätzlicher EXE darin
Angehängte Dateien
Dateityp: 7z d7demo.7z (147,8 KB, 2x aufgerufen)
  Mit Zitat antworten Zitat
Benutzerbild von Sherlock
Sherlock

Registriert seit: 10. Jan 2006
Ort: Offenbach
3.762 Beiträge
 
Delphi 11 Alexandria
 
#8

AW: Erhalte falsches modalResult

  Alt 1. Mär 2019, 10:00
delphicoder123: Ich lege Dir aufgrund Deiner Fragen dringend nahe, eine Einführung in die Programmierung mit Delphi zu lesen. Z.B. folgendes freies eBook: https://de.wikibooks.org/wiki/Programmierkurs:_Delphi

Sherlock
Oliver
Geändert von Sherlock (Morgen um 16:78 Uhr) Grund: Weil ich es kann
  Mit Zitat antworten Zitat
Andreas L.

Registriert seit: 23. Mai 2011
Ort: Furth im Wald
308 Beiträge
 
Delphi 11 Alexandria
 
#9

AW: Erhalte falsches modalResult

  Alt 1. Mär 2019, 10:04
Code:
  TForm1 = class(TForm)
    btnOK: TButton;
    btnAbbrechen: TButton;
    procedure btnOKClick(Sender: TObject);
    procedure btnAbbrechenClick(Sender: TObject);
    function modalErgebnis(): String;
    procedure FormActivate(Sender: TObject);
  end;

...

procedure TForm1.btnOKClick(Sender: TObject);
begin
  Form1.ModalResult:=mrOk;
end;

procedure TForm1.FormActivate(Sender: TObject);
begin
   ShowMessage( modalErgebnis() );
end;

procedure TForm1.btnAbbrechenClick(Sender: TObject);
begin
  Form1.ModalResult:=mrCancel;
end;

function TForm1.modalErgebnis(): String;
begin
  if Form1.ModalResult=mrOk then
  begin
    result:='OK';
  end
  else if Form1.ModalResult=mrCancel then
  begin
     result:='Abbrechen';
  end
  else
  begin
    result:='False';
  end;
end;
  • Wenn man auf die Variable des Forms (bei dir Form1) innerhalb der Form-Unit direkt zugreift, kann das in manchen Fällen Probleme geben. Ich würde an deiner Stelle lieber Self. statt Form1. verwenden oder den Namen komplett weglassen. Aus anderen Units z. B. Unit2 musst du natürlich Form1. voranstellen um auf das Form1 aus Unit1 zuzugreifen können.
  • Wie old7 schon geschrieben hat, muss natürlich das Form via ShowModal aufgerufen werden damit du an ModalResult rankommst (Rückgabe-Wert von ShowModal).
  • Du musst das ModalResult bei den Buttons nicht zwangsläufig im Code setzen. Du kannst einfach die ModalResult-Eigenschaft des Buttons im Objekt-Inspector festlegen. Bei einem Klick wird das ModalResult automatisch übergeben.
  • Wenn du mehrere Buttons hast mit jeweils unterschiedlichen ModalResults kannst du die Auswertung mit Case statt If machen.

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
  case Form2.ShowModal of
  begin
    mrOK: ShowMessage('OK gedrückt');
    mrCancel: ShowMessage('Abbrechen gedrückt');
    mrYes: ShowMessage('Ja gedrückt');
    mrNo: ShowMessage('Nein gedrückt');
    ...
  end
  else
    ShowMessage('Ein ModalResult wurde zurückgegeben das nicht im Case steht!');
end;
Der Else-Zweig ist Optional.
Andreas Lauß
Blog
  Mit Zitat antworten Zitat
peterbelow

Registriert seit: 12. Jan 2019
Ort: Hessen
672 Beiträge
 
Delphi 11 Alexandria
 
#10

AW: Erhalte falsches modalResult

  Alt 1. Mär 2019, 13:38
Hallo,
nach dem Klick auf den Ok bzw. Abbrechen Button möchte ich als Result mrOK bzw. mrCancel erhalten.
Was ist an meinem Code falsch? Ich erhalte gleich beim Starten des Programms die Meldung "False".
Beim Klicken auf die Buttons aber keine Meldung.
TButton hat eine Eigenschaft ModalResult, die Du schon im Designer auf den Wert setzten kannst, den das ModalResult des Forms bekommen soll, wenn der Button geklickt wird. Wenn Du sonst nichts weiter tun mußt, wenn der Button betätigt wird, brauchst Du auch keinen OnClick handler für ihn.

Noch was: Die gängige Konvention für modale Dialoge ist, dass der OK-Button die Default-Eigenschaft auf true gesetzt hat, während der Cancel-Button die Cancel-Eigenschaft auf True gesetzt hat. Damit kann der Benutzer einfach die Return/Enter-Taste benutzen, um den OK-Button auszulösen, bzw. die ESC-Taste, um den Cancel-Button auszulösen, und zwar auch, wenn keiner der Buttons gerade den Fokus hat. Das geht nur dann nicht, wenn das Control mit Fokus diese Tasten selbst bearbeitet.
Peter Below
  Mit Zitat antworten Zitat
Antwort Antwort


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 17:21 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