Aha, Danke. Kleinere Korrektur, und so geht es dann auch:
Delphi-Quellcode:
procedure TFDeviceReader.AusRebootBtnClick(Sender: TObject);
var
Command: Integer;
Frage: string;
begin
if Sender = AusBtn then
begin
Command := 0;
Frage := rsReallyShutDown;
end
else
begin
Command := 1;
Frage := rsReallyReboot;
end;
TDialogService.MessageDialog(Frage, TMsgDlgType.mtConfirmation, mbYesNo, TMsgDlgBtn.mbNo, 0,
procedure(const aResult: TModalResult)
begin
if aResult = mrYes then
case Command of
0:
begin
ShowMessage(rsShutdown);
fDevice.SendShutDown(Command);
fDevice.Connected := False;
Halt(0);
end;
1:
begin
ShowMessage(rsReboot);
fDevice.SendShutDown(Command);
fDevice.Connected := False;
repeat
Sleep(10000);
until fDevice.ConnectionTest;
end;
end;
end);
end;
Es fehlte noch der DefaultButton.
Insgesamt etwas holprig, und
IMHO schlechter lesbar, als die alte Variante. Ich habe nicht übel Lust einen Wrapper zu bauen, der folgendes tut, und damit wieder die schlichte Eleganz der alten Implementierung herstellt:
Delphi-Quellcode:
function myMessageDlg(const AMessage:string; const ADialogType: TMsgDlgType; const AButtons: TMsgDlgButtons; const AHelpContext:integer; const ADefaultButton: TMsgDlgBtn):TModalResult;
begin
// Alle Parameter auf Gültigkeit prüfen, yada yada yada
// Jetzt die neue Methode verwenden
TDialogService.MessageDialog(AMessage, ADialogType, AButtons, ADefaultButton, AHelpContext,
procedure(const aResult: TModalResult)
begin
Result := aResult;
end);
end;
Mag mir einer der fachkundigeren Mitforisten erläutern, was an der neuen Variante besser ist?
Sherlock