Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Kann man diese Prozedure besser machen? (https://www.delphipraxis.net/80395-kann-man-diese-prozedure-besser-machen.html)

PeterKiers 8. Nov 2006 11:19


Kann man diese Prozedure besser machen?
 
hallo zusammen!

Ich hab eine frage, Ich habe dieser Prozedure gemacht.
Kann man diese Prozedure besser machen?

Delphi-Quellcode:
procedure TMainForm.Open1Click(Sender: TObject);
begin
  if IsModified then
  begin
    case MessageDlg('Do you want to save the current file?', mtConfirmation,
      [mbYes, mbNo, mbCancel], 0) of
      mrYes:
        begin
          Save1Click(Sender);
          if SocOpen then Warning2
          else begin
            OpenDialog1.InitialDir := ExtractFileDir(Application.exename) + '\Sessions\';
            OpenDialog1.DefaultExt := 'emu';
            if OpenDialog1.Execute then
            begin
              Save1Click(Sender);
              LoadOptions(OpenDialog1.Filename);
              CurrentFile := OpenDialog1.FileName;
              MakeConnect
            end
            else begin
              OpenDialog1.InitialDir := ExtractFileDir(Application.exename) + '\Sessions\';
              OpenDialog1.DefaultExt := 'emu';
              if OpenDialog1.Execute then
              begin
                LoadOptions(OpenDialog1.Filename);
                CurrentFile := OpenDialog1.FileName;
                MakeConnect;
              end;
            end;
          end;
        end;
      mrNo:
        begin
          if SocOpen then Warning2
          else begin
            OpenDialog1.InitialDir := ExtractFileDir(Application.exename) + '\Sessions\';
            OpenDialog1.DefaultExt := 'emu';
            if OpenDialog1.Execute then
            begin
              LoadOptions(OpenDialog1.Filename);
              CurrentFile := OpenDialog1.FileName;
              MakeConnect;
            end;
          end;
        end;
      mrCancel: ;
    end;
  end
  else
    if socOpen then Warning2
    else begin
      OpenDialog1.InitialDir := ExtractFileDir(Application.exename) + '\Sessions\';
      OpenDialog1.DefaultExt := 'emu';
      if OpenDialog1.Execute then
      begin
        LoadOptions(OpenDialog1.Filename);
        CurrentFile := OpenDialog1.FileName;
        MakeConnect;
      end;
    end;
end;

schon mal großes DANKE im voraus

Gruß

Peter

[edit=SirThornberry]Code-Tags durch Delphi-Tags ersetzt - Mfg, SirThornberry[/edit]

Jürgen Thomas 8. Nov 2006 11:33

Re: Kann man diese Prozedure besser machen?
 
Hallo Peter,
Zitat:

Zitat von PeterKiers
Kann man diese Prozedure besser machen?

Ja. Wenn Du Dir Deinen Code ansiehst, dann stellst Du fest, dass Du mehrere Abschnitte mehrfach verwendest.

Du solltest also erstens neu gruppieren:
Delphi-Quellcode:
if IsModified then
begin
  if MessageDlg = mrYes then
  begin
    try
      Save1Click(Sender);
    except
    end;
    //  bei Fehler oder mrCancel Abbruch
  end;
end;
//  und jetzt alles für den neuen OpenDialog1
Zweitens solltest Du alles, was nicht unmittelbar mit einem Ereignis zusammenhängt, sondern eigenständige Maßnahmen sind, in eigene Prozeduren verlagern. Dann kannst Du solche Maßnahmen von mehreren Stellen - z.B. dem Button Save1 - aus aufrufen, bist insgesamt flexibler und programmierst übersichtlicher.

Viel Erfolg! Jürgen

Flocke 8. Nov 2006 12:29

Re: Kann man diese Prozedure besser machen?
 
Zitat:

Zitat von Jürgen Thomas
Delphi-Quellcode:
    try
      Save1Click(Sender);
    except
    end;

Was soll denn sowas? Darf der Anwender nicht wissen, wenn beim Speichern Fehler auftreten?

PeterKiers 8. Nov 2006 14:24

Re: Kann man diese Prozedure besser machen?
 
Danke.


Peter Kiers

Jürgen Thomas 9. Nov 2006 11:09

Re: Kann man diese Prozedure besser machen?
 
Zitat:

Zitat von Flocke
Zitat:

Zitat von Jürgen Thomas
Delphi-Quellcode:
    try
      Save1Click(Sender);
    except
    end;

Was soll denn sowas? Darf der Anwender nicht wissen, wenn beim Speichern Fehler auftreten?

Ich hatte mich darauf beschränkt, wichtige Teile zu kopieren und zu zitieren. Die Details sollte Peter selbst "ausfüllen". Vielleicht hätte ich meinen Kommentar in den except-Bereich eintragen sollen. Außerdem weiß ich nicht, was Peter in seiner Prozedur Save1Click vorgesehen hat.

Also meine Empfehlung: nicht jede winzige Einzelheit reklamieren, wenn sie mit dem eigentlichen Thema nichts zu tun hat. Danke! Jürgen

PS. Ich habe den Eindruck, dass Peter verstanden hat, was ich ihm sagen wollte.

Flocke 9. Nov 2006 12:20

Re: Kann man diese Prozedure besser machen?
 
Zitat:

Zitat von Jürgen Thomas
Also meine Empfehlung: nicht jede winzige Einzelheit reklamieren, wenn sie mit dem eigentlichen Thema nichts zu tun hat. Danke! Jürgen

Die Sache ist, dass hier im Board viele Anfänger (oft auch nur lesend) unterwegs sind und dass außerdem gerade im Bereich "Exception Handling" oft grundliegende Fehler zu sehen sind (99% "try..finally" fehlen und 99% "try..except" sind zu viel).

Gerade Konstrukte wie die von mir zitierten Zeilen sind in der gezeigten Form absolut falsch und gehören ohne Umschweife in den Papierkorb - ein Anfänger weiß das aber vielleicht (noch) nicht und kopiert sich die Zeilen einfach in seinen Code, ohne weiter darüber nachzudenken.

Also meine Empfehlung: lieber vor dem Posten einmal mehr über "try..except" bzw. "try..finally" nachdenken. :zwinker:


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:44 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