AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Kann man diese Prozedure besser machen?

Ein Thema von PeterKiers · begonnen am 8. Nov 2006 · letzter Beitrag vom 9. Nov 2006
Antwort Antwort
PeterKiers

Registriert seit: 15. Mär 2005
Ort: Wuppertal
42 Beiträge
 
#1

Kann man diese Prozedure besser machen?

  Alt 8. Nov 2006, 11:19
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]
  Mit Zitat antworten Zitat
Jürgen Thomas

Registriert seit: 13. Jul 2006
Ort: Berlin
750 Beiträge
 
#2

Re: Kann man diese Prozedure besser machen?

  Alt 8. Nov 2006, 11:33
Hallo Peter,
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
#D mit C# für NET, dazu Firebird
früher: Delphi 5 Pro, Delphi 2005 Pro mit C# (also NET 1.1)
Bitte nicht sauer sein, wenn ich mich bei Delphi-Schreibweisen verhaue; ich bin inzwischen an C# gewöhnt.
  Mit Zitat antworten Zitat
Benutzerbild von Flocke
Flocke

Registriert seit: 9. Jun 2005
Ort: Unna
1.172 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#3

Re: Kann man diese Prozedure besser machen?

  Alt 8. Nov 2006, 12:29
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?
Volker
Besucht meine Garage
Aktuell: RtfLabel 1.3d, PrintToFile 1.4
  Mit Zitat antworten Zitat
PeterKiers

Registriert seit: 15. Mär 2005
Ort: Wuppertal
42 Beiträge
 
#4

Re: Kann man diese Prozedure besser machen?

  Alt 8. Nov 2006, 14:24
Danke.


Peter Kiers
  Mit Zitat antworten Zitat
Jürgen Thomas

Registriert seit: 13. Jul 2006
Ort: Berlin
750 Beiträge
 
#5

Re: Kann man diese Prozedure besser machen?

  Alt 9. Nov 2006, 11:09
Zitat von Flocke:
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.
#D mit C# für NET, dazu Firebird
früher: Delphi 5 Pro, Delphi 2005 Pro mit C# (also NET 1.1)
Bitte nicht sauer sein, wenn ich mich bei Delphi-Schreibweisen verhaue; ich bin inzwischen an C# gewöhnt.
  Mit Zitat antworten Zitat
Benutzerbild von Flocke
Flocke

Registriert seit: 9. Jun 2005
Ort: Unna
1.172 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#6

Re: Kann man diese Prozedure besser machen?

  Alt 9. Nov 2006, 12:20
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.
Volker
Besucht meine Garage
Aktuell: RtfLabel 1.3d, PrintToFile 1.4
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:19 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