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?