AGB  ·  Datenschutz  ·  Impressum  







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

class function - Rückgabewert immer False

Ein Thema von Andreas L. · begonnen am 20. Jan 2010 · letzter Beitrag vom 20. Jan 2010
Antwort Antwort
Andreas L.
(Gast)

n/a Beiträge
 
#1

class function - Rückgabewert immer False

  Alt 20. Jan 2010, 12:48
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...

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?
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#2

Re: class function - Rückgabewert immer False

  Alt 20. Jan 2010, 13:13
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.
  Mit Zitat antworten Zitat
Andreas L.
(Gast)

n/a Beiträge
 
#3

Re: class function - Rückgabewert immer False

  Alt 20. Jan 2010, 13:16
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
  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 22:36 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