Einzelnen Beitrag anzeigen

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