Einzelnen Beitrag anzeigen

Benutzerbild von Sherlock
Sherlock

Registriert seit: 10. Jan 2006
Ort: Offenbach
3.765 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: FMX.DialogServices... wie benutzen?

  Alt 10. Jun 2016, 09:45
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
Oliver
Geändert von Sherlock (Morgen um 16:78 Uhr) Grund: Weil ich es kann
  Mit Zitat antworten Zitat