Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi class function - Rückgabewert immer False (https://www.delphipraxis.net/146462-class-function-rueckgabewert-immer-false.html)

Andreas L. 20. Jan 2010 11:48


class function - Rückgabewert immer False
 
Mahlzeit,

ich habe eine Form die beim Start nicht automatisch erstellt wird. Diese Form hat folgende class function:

Delphi-Quellcode:
class function TfrmEditStartupEntry.Execute(AItem: TStartupItem):Boolean;
begin
  with TfrmEditStartupEntry.Create(nil) do
  try
    FStartupItem := AItem;
    //ModalResult := mrCancel; <-- auch das hilft nicht
    Result := ShowModal = mrOK;
  finally
    Free;
  end;
end;
Auf der Form sind zwei Buttons:
Delphi-Quellcode:
procedure TfrmEditStartupEntry.btnCancelClick(Sender: TObject);
begin
  Close;
end;

procedure TfrmEditStartupEntry.btnOKClick(Sender: TObject);
begin
  ModalResult := mrOK;
  Close;
end;
Wenn der OK-Button gedrückt wird sollte das Ergebnis von Execute True sein, beim Cancel Button False. Soweit so theoretisch... :x

Der Rückgabewert ist immer False (bzw. True wegen dem not). So rufe ich den Dialog auf:
Delphi-Quellcode:
procedure TfrmManager.lstStartupAddEntry(AItem: TStartupItem;
  var ACancel: Boolean);
begin
  ACancel := not TfrmEditStartupEntry.Execute(AItem);
  ShowMessage(BoolToStr(ACancel, true)); //zum testen weil der Debugger ACancel wegoptimiert....
end;
lstStartupAddEntry ist ein Event einer modifizierten ListView. ACancel und AItem werden initialisiert (ACancel := False;, AItem := TStartupItem.Create;) bevor das Ereignis ausgelöst wird.
Delphi-Quellcode:
TStartupListViewAddEvent = procedure(AItem: TStartupItem; var ACancel: Boolean) of object;

...

procedure TStartupListView.Add;
var
  NewEntry: TStartupItem;
  DoCancel: Boolean;
begin
  if Assigned(FOnAddEntry) then
  begin
    NewEntry := TStartupItem.Create;
    DoCancel := False;
    OnAddEntry(NewEntry, DoCancel);
    if not DoCancel then
    begin
      FStartupList.Add(NewEntry);
      Refresh;
    end;
  end;
end;
Was mache ich falsch?

Muetze1 20. Jan 2010 12:13

Re: class function - Rückgabewert immer False
 
Ein modales Fenster wird geschlossen wenn der Eigenschaft ModalResult des Formulars ein Wert ungleich mrNone zugewiesen wird. Dies kann manuell erreicht werden oder durch Konfiguration der Eigenschaft ModalResult der Buttons.

Warum du zusätzlich noch Close aufrufst entzieht sich vernünftigen Gedanken und macht hier dein Problem aus.

Auch solltest du bedenken kein OnClick Ereignis zu zuweisen, wenn der jeweilige Button in seiner Eigenschaft ModalResult einen Wert <> mrNone enthält. Näheres dazu verrät die ausgiebige Hilfe zum Thema Delphi-Referenz durchsuchenTModalResult, Delphi-Referenz durchsuchenTCustomForm.ShowModal, Delphi-Referenz durchsuchenTCustomForm.ModalResult und Delphi-Referenz durchsuchenTCustomButton.ModalResult.

Ansonsten kann ich nur nochmals davon abraten with/do Blöcke zu verwenden.

Andreas L. 20. Jan 2010 12:16

Re: class function - Rückgabewert immer False
 
Zitat:

Zitat von Muetze1
Ein modales Fenster wird geschlossen wenn der Eigenschaft ModalResult des Formulars ein Wert ungleich mrNone zugewiesen wird. Dies kann manuell erreicht werden oder durch Konfiguration der Eigenschaft ModalResult der Buttons.

Warum du zusätzlich noch Close aufrufst entzieht sich vernünftigen Gedanken und macht hier dein Problem aus.

Auch solltest du bedenken kein OnClick Ereignis zu zuweisen, wenn der jeweilige Button in seiner Eigenschaft ModalResult einen Wert <> mrNone enthält. Näheres dazu verrät die ausgiebige Hilfe zum Thema Delphi-Referenz durchsuchenTModalResult, Delphi-Referenz durchsuchenTCustomForm.ShowModal, Delphi-Referenz durchsuchenTCustomForm.ModalResult und Delphi-Referenz durchsuchenTCustomButton.ModalResult.

Ahh danke, jetzt gehts :thumb:


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