AGB  ·  Datenschutz  ·  Impressum  







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

Vereinfachung/Verkürzen

Ein Thema von stexxy · begonnen am 12. Sep 2007 · letzter Beitrag vom 14. Sep 2007
Antwort Antwort
Seite 1 von 2  1 2      
stexxy

Registriert seit: 12. Sep 2007
15 Beiträge
 
#1

Vereinfachung/Verkürzen

  Alt 12. Sep 2007, 13:51
HI bin neu hier und ich beschäftige mich seit gestern mit delphi.
ich hab ein kleines programm geschrieben.
der quelltext is jedoch ziemlich lang geworden und ich sehe da kaum noch durch.
ich wollte mal fragen welche möglichenkeiten es gibt quellcodes zu vereinfach oder zu verkürzen.
man kann bestimmt etliche sachen vereinfach.

Hier mal der code

Delphi-Quellcode:
unit Fahrstuhl;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  ExtCtrls, StdCtrls, jpeg, RackCtls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    Button4: TButton;
    Button5: TButton;
    Button6: TButton;
    Image1: TImage;
    Timer1: TTimer;
    Button7: TButton;
    Timer2: TTimer;
    Button8: TButton;
    Button9: TButton;
    Button10: TButton;
    Button11: TButton;
    Button12: TButton;
    Button13: TButton;
    Button14: TButton;
    Timer3: TTimer;
    Image2: TImage;
    Timer4: TTimer;
    Image3: TImage;
    Timer5: TTimer;
    Timer6: TTimer;
    Timer7: TTimer;
    Timer8: TTimer;
    Timer9: TTimer;
    Timer10: TTimer;
    Label1: TLabel;
    Image4: TImage;
    Timer11: TTimer;
    Button15: TButton;
    Button16: TButton;
    Timer12: TTimer;
    Image5: TImage;
    Timer13: TTimer;
    Timer14: TTimer;
    Timer15: TTimer;
    Timer16: TTimer;
    Timer17: TTimer;
    Timer18: TTimer;
    procedure Timer1Timer(Sender: TObject);
    procedure Timer2Timer(Sender: TObject);
    procedure Button7Click(Sender: TObject);
    procedure Button14Click(Sender: TObject);
    procedure Button8Click(Sender: TObject);
    procedure Timer3Timer(Sender: TObject);
    procedure Timer4Timer(Sender: TObject);
    procedure Timer5Timer(Sender: TObject);
    procedure Timer6Timer(Sender: TObject);
    procedure Timer7Timer(Sender: TObject);
    procedure Timer8Timer(Sender: TObject);
    procedure Timer9Timer(Sender: TObject);
    procedure Timer10Timer(Sender: TObject);
    procedure Timer11Timer(Sender: TObject);
    procedure Timer12Timer(Sender: TObject);
    procedure Timer13Timer(Sender: TObject);
    procedure Timer15Timer(Sender: TObject);
    procedure Timer16Timer(Sender: TObject);
    procedure Timer17Timer(Sender: TObject);
    procedure Timer18Timer(Sender: TObject);
    procedure Timer14Timer(Sender: TObject);







private
    { Private-Deklarationen }
public
    { Public-Deklarationen }
end;

var
  Form1: TForm1;

implementation

{$R *.DFM}









procedure TForm1.Timer1Timer(Sender: TObject);

var
  x : integer;

begin
  timer1.enabled:=true;

  x:=-2;
  Image1.top:=Image1.top+x; //verschiebt image1 um wert x
  Image4.top:=Image4.top+x;
  Image5.top:=Image5.top+x;

  if image1.top=480 then
   Label1.caption:=inttostr(5);

  if image1.top=0 then
   timer1.enabled:=false;

  if image1.top=0 then
   timer11.enabled:=true;


  button8.Enabled:=true;
  button11.Enabled:=true;
  button9.Enabled:=true;
  button10.Enabled:=true;
  button12.Enabled:=true;
  button13.Enabled:=false;

  if image1.top=120 then
   Label1.caption:=inttostr(4);

  if image1.top=0 then
   Label1.caption:=inttostr(5);

  if image1.top=240 then
   Label1.caption:=inttostr(3);

  if image1.top=360 then
   Label1.caption:=inttostr(2);

  if image1.top=480 then
   Label1.caption:=inttostr(1);

  if image1.top=600 then
   Label1.caption:=inttostr(0);
end;


procedure TForm1.Timer2Timer(Sender: TObject);

var
  x : integer;

begin

  timer2.enabled:=true;

  x:=2;
  Image1.top:=Image1.top+x; //verschiebt image1 um wert x
  Image4.top:=Image4.top+x;
  Image5.top:=Image5.top+x;

  if image1.top=600 then
   timer2.enabled:=false;

  if image1.top=120 then
   Label1.caption:=inttostr(4);

  if image1.top=0 then
   Label1.caption:=inttostr(5);

  if image1.top=240 then
   Label1.caption:=inttostr(3);

  if image1.top=360 then
   Label1.caption:=inttostr(2);

  if image1.top=480 then
   Label1.caption:=inttostr(1);

  if image1.top=600 then
   Label1.caption:=inttostr(0);

  if image1.top=600 then
   timer11.enabled:=true;

  button8.Enabled:=false;
  button11.Enabled:=true;
  button9.Enabled:=true;
  button10.Enabled:=true;
  button12.Enabled:=true;
 button13.Enabled:=true;

end;




procedure TForm1.Button7Click(Sender: TObject); // NOtaus

begin
  timer1.enabled:=false;
  timer2.enabled:=false;
  timer3.enabled:=false; // stoppt den timer
  timer4.enabled:=false;
  timer5.enabled:=false;
  timer6.enabled:=false;
  timer7.enabled:=false;
  timer8.enabled:=false;
  timer9.enabled:=false;
  timer10.enabled:=false;
  timer11.enabled:=false;
  timer12.enabled:=false;

  button8.Enabled:=true;
  button9.Enabled:=true;
  button10.Enabled:=true; // macht tasten wieder funtionstüchtig
  button11.Enabled:=true;
  button12.Enabled:=true;
  button13.Enabled:=true;
end;




procedure TForm1.Button14Click(Sender: TObject);
begin
  close;
end;

procedure TForm1.Button8Click(Sender: TObject); // Fahrstuhlknopf innen EG
begin

  if image1.top=600 then
   timer2.enabled:=false;

end;

procedure TForm1.Timer3Timer(Sender: TObject);

var
  x : integer;

begin

  timer3.enabled:=true;

  x:=-2;
  Image1.top:=Image1.top+x; //verschiebt image1 um wert x
  Image4.top:=Image4.top+x;
  Image5.top:=Image5.top+x;

  if image1.top<480 then
   timer3.enabled:=false;

  if image1.top<480 then
   timer7.enabled:=true;

  if image1.top=480 then
   timer3.enabled:=false;

  if image1.top=480 then
   timer11.enabled:=true;

  if image1.top=120 then
   Label1.caption:=inttostr(4);

  if image1.top=0 then
   Label1.caption:=inttostr(5);

  if image1.top=240 then
   Label1.caption:=inttostr(3);

  if image1.top=360 then
   Label1.caption:=inttostr(2);

  if image1.top=480 then
   Label1.caption:=inttostr(1);

  if image1.top=600 then
   Label1.caption:=inttostr(0);

  button11.Enabled:=true;
  button8.Enabled:=true;
  button10.Enabled:=true;
  button12.Enabled:=true;
  button13.Enabled:=true;
  button9.Enabled:=false;

end;


procedure TForm1.Timer4Timer(Sender: TObject);

var
  x : integer;

  begin
  timer4.enabled:=true;

  x:=-2;
  Image1.top:=Image1.top+x; //verschiebt image1 um wert x
  Image4.top:=Image4.top+x;
  Image5.top:=Image5.top+x;

  if image1.top=360 then
   timer4.enabled:=false;

  if image1.top<360 then
   timer4.enabled:=false;

  if image1.top<360 then
   timer8.enabled:=true;

  if image1.top=360 then
  timer11.enabled:=true;

  if image1.top=120 then
   Label1.caption:=inttostr(4);

  if image1.top=0 then
   Label1.caption:=inttostr(5);

  if image1.top=240 then
   Label1.caption:=inttostr(3);

  if image1.top=360 then
   Label1.caption:=inttostr(2);

  if image1.top=480 then
   Label1.caption:=inttostr(1);

  if image1.top=600 then
   Label1.caption:=inttostr(0);

  button11.Enabled:=true;
  button8.Enabled:=true;
  button9.Enabled:=true;
  button12.Enabled:=true;
  button13.Enabled:=true;
  button10.Enabled:=false;

end;



procedure TForm1.Timer5Timer(Sender: TObject);
var
  x : integer;

begin
  timer5.enabled:=true;

  x:=-2;
  Image1.top:=Image1.top+x; //verschiebt image1 um wert x
  Image4.top:=Image4.top+x;
  Image5.top:=Image5.top+x;

  if image1.top=240 then
   timer5.enabled:=false;

  if image1.top<240 then
   timer5.enabled:=false;

  if image1.top<240 then
   timer9.enabled:=true;

  if image1.top=240 then
   timer11.enabled:=true;

  if image1.top=120 then
   Label1.caption:=inttostr(4);

  if image1.top=0 then
   Label1.caption:=inttostr(5);

  if image1.top=240 then
   Label1.caption:=inttostr(3);

  if image1.top=360 then
   Label1.caption:=inttostr(2);

  if image1.top=480 then
   Label1.caption:=inttostr(1);

  if image1.top=600 then
  Label1.caption:=inttostr(0);

  button11.Enabled:=false;
  button8.Enabled:=true;
  button9.Enabled:=true;
  button10.Enabled:=true;
  button12.Enabled:=true;
  button13.Enabled:=true;

end;


procedure TForm1.Timer6Timer(Sender: TObject);
var
  x : integer;

  begin
  timer6.enabled:=true;

  x:=-2;
  Image1.top:=Image1.top+x; //verschiebt image1 um wert x
  Image4.top:=Image4.top+x;
  Image5.top:=Image5.top+x;

  if image1.top=120 then
   timer6.enabled:=false;

  if image1.top<120 then
   timer6.enabled:=false;

  if image1.top<120 then
   timer10.enabled:=true;

  if image1.top=120 then
   timer11.enabled:=true;

  if image1.top=120 then
   Label1.caption:=inttostr(4);

  if image1.top=0 then
   Label1.caption:=inttostr(5);

  if image1.top=240 then
   Label1.caption:=inttostr(3);

  if image1.top=360 then
   Label1.caption:=inttostr(2);

  if image1.top=480 then
   Label1.caption:=inttostr(1);

  if image1.top=600 then
   Label1.caption:=inttostr(0);

  button11.Enabled:=true;
  button8.Enabled:=true;
  button9.Enabled:=true;
  button10.Enabled:=true;
  button12.Enabled:=false;
  button13.Enabled:=true;

end;

procedure TForm1.Timer7Timer(Sender: TObject);

var

  x : integer;

begin
  timer7.enabled:=true;

  x:=2;
  Image1.top:=Image1.top+x;
  Image4.top:=Image4.top+x;
  Image5.top:=Image5.top+x;

  if image1.top=480 then
   timer7.enabled:=false;

  if image1.top=480 then
   timer11.enabled:=true;

  if image1.top=120 then
   Label1.caption:=inttostr(4);

  if image1.top=0 then
   Label1.caption:=inttostr(5);

  if image1.top=240 then
   Label1.caption:=inttostr(3);

  if image1.top=360 then
   Label1.caption:=inttostr(2);

  if image1.top=480 then
   Label1.caption:=inttostr(1);

  if image1.top=600 then
   Label1.caption:=inttostr(0);

end;

procedure TForm1.Timer8Timer(Sender: TObject);
var

   x : integer;

begin
  timer8.enabled:=true;

  x:=2;
  Image1.top:=Image1.top+x;
  Image4.top:=Image4.top+x;
  Image5.top:=Image5.top+x;

  if image1.top=360 then
   timer8.enabled:=false;

  if image1.top=360 then
   timer11.enabled:=true;

  if image1.top=120 then
   Label1.caption:=inttostr(4);

  if image1.top=0 then
   Label1.caption:=inttostr(5);

  if image1.top=240 then
   Label1.caption:=inttostr(3);

  if image1.top=360 then
   Label1.caption:=inttostr(2);

  if image1.top=480 then
   Label1.caption:=inttostr(1);

  if image1.top=600 then
   Label1.caption:=inttostr(0);

end;


procedure TForm1.Timer9Timer(Sender: TObject);
var

 x : integer;

begin
  timer9.enabled:=true;
  x:=2;
  Image1.top:=Image1.top+x;
  Image4.top:=Image4.top+x;
  Image5.top:=Image5.top+x;

  if image1.top=240 then
   timer9.enabled:=false;

  if image1.top=240 then
   timer11.enabled:=true;

  if image1.top=120 then
   Label1.caption:=inttostr(4);

  if image1.top=0 then
   Label1.caption:=inttostr(5);

  if image1.top=240 then
   Label1.caption:=inttostr(3);

  if image1.top=360 then
   Label1.caption:=inttostr(2);

  if image1.top=480 then
   Label1.caption:=inttostr(1);

  if image1.top=600 then
   Label1.caption:=inttostr(0);

end;


procedure TForm1.Timer10Timer(Sender: TObject);
var

  x : integer;

begin
  timer10.enabled:=true;

  x:=2;
  Image1.top:=Image1.top+x;
  Image4.top:=Image4.top+x;
  Image5.top:=Image5.top+x;

  if image1.top=120 then
   timer10.enabled:=false;

  if image1.top=120 then
   timer11.enabled:=true;

  if image1.top=120 then
   Label1.caption:=inttostr(4);

  if image1.top=0 then
   Label1.caption:=inttostr(5);

  if image1.top=240 then
   Label1.caption:=inttostr(3);

  if image1.top=360 then
   Label1.caption:=inttostr(2);

  if image1.top=480 then
   Label1.caption:=inttostr(1);

  if image1.top=600 then
   Label1.caption:=inttostr(0);

end;


procedure TForm1.Timer11Timer(Sender: TObject); // tür auf
var

  y : integer;

begin
  timer11.enabled:=true;

  y:=2;
  Image4.left:=Image4.left-y;

  if image4.left=30 then
   timer11.enabled:=false;

end;



procedure TForm1.Timer12Timer(Sender: TObject); // tür zu
var
   y : integer;

begin
  timer12.enabled:=true;

  y:=2;
  Image4.left:=Image4.left+y;

  if image4.left=100 then
    timer12.enabled:=false;

end;



procedure TForm1.Timer13Timer(Sender: TObject);

  var
   y : integer;

begin
  timer13.enabled:=true;

  y:=2;
  Image4.left:=Image4.left+y;

  if image4.left=100 then
    timer13.enabled:=false;
  if not timer13.enabled then
    timer2.enabled:=true;
end;

procedure TForm1.Timer15Timer(Sender: TObject);
var
   y : integer;

begin
  timer15.enabled:=true;

  y:=2;
  Image4.left:=Image4.left+y;

  if image4.left=100 then
    timer15.enabled:=false;
  if not timer15.enabled then
    timer4.enabled:=true;
end;

procedure TForm1.Timer16Timer(Sender: TObject);
var
   y : integer;

begin
  timer16.enabled:=true;

  y:=2;
  Image4.left:=Image4.left+y;

  if image4.left=100 then
    timer16.enabled:=false;
  if not timer16.enabled then
    timer5.enabled:=true;
end;

procedure TForm1.Timer17Timer(Sender: TObject);
var
   y : integer;

begin
  timer17.enabled:=true;

  y:=2;
  Image4.left:=Image4.left+y;

  if image4.left=100 then
    timer17.enabled:=false;
  if not timer17.enabled then
    timer6.enabled:=true;
end;

procedure TForm1.Timer18Timer(Sender: TObject);
var
   y : integer;

begin
  timer18.enabled:=true;

  y:=2;
  Image4.left:=Image4.left+y;

  if image4.left=100 then
    timer18.enabled:=false;
  if not timer18.enabled then
    timer1.enabled:=true;
end;



procedure TForm1.Timer14Timer(Sender: TObject);
var
   y : integer;

begin
  timer14.enabled:=true;

  y:=2;
  Image4.left:=Image4.left+y;

  if image4.left=100 then
    timer14.enabled:=false;
  if not timer14.enabled then
    timer3.enabled:=true;

end;

end.

würde mich freuen wenn es einige vorschläge gibt das programm funktioniert einwandfrei .
  Mit Zitat antworten Zitat
Benutzerbild von inherited
inherited

Registriert seit: 19. Dez 2005
Ort: Rosdorf
2.022 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: Vereinfachung/Verkürzen

  Alt 12. Sep 2007, 13:54
Könntest du bitte deinen beitrag editieren und den gesamten Code in [ delphi], [ /delphi]-Tags legen?
Nikolai Wyderka

SWIM SWIM HUNGRY!
Neuer Blog: hier!
  Mit Zitat antworten Zitat
stexxy

Registriert seit: 12. Sep 2007
15 Beiträge
 
#3

Re: Vereinfachung/Verkürzen

  Alt 12. Sep 2007, 14:01
jo sry schon passiert
  Mit Zitat antworten Zitat
jmd anders

Registriert seit: 13. Mai 2004
84 Beiträge
 
#4

Re: Vereinfachung/Verkürzen

  Alt 12. Sep 2007, 14:17
du kannst zum beispiel die ganzen if then anweisungen in denen du überprüfst ob die varible einen bestimmten wert enthält durch case of anweisungen ersetzen.
  Mit Zitat antworten Zitat
stexxy

Registriert seit: 12. Sep 2007
15 Beiträge
 
#5

Re: Vereinfachung/Verkürzen

  Alt 12. Sep 2007, 14:24
danke dafür werd es gleich mal ausprobieren!

gibt es denn eine möglichkeit die ganzen timer einzusparen da ich ja irgendwie 18 stück enthalten habe ,
es wärte ja leichter nur 1 nehmen zu müssen.
  Mit Zitat antworten Zitat
Benutzerbild von RavenIV
RavenIV

Registriert seit: 12. Jan 2005
Ort: Waldshut-Tiengen
2.875 Beiträge
 
Delphi 2007 Enterprise
 
#6

Re: Vereinfachung/Verkürzen

  Alt 12. Sep 2007, 15:50
Als erstes solltest Du mal den Komponenten gescheite Namen geben.

ButtonX -> BuSchliessen
ButtonY -> BuNotAus

TimerA -> TiIrgendwas
TimerB -> TiWasAnderes
usw.

Dann ist mir aufgefallen, dass in den Timer-Funktionen nur die Zahlen anderst sind.
Das kann man sicher verallgemienern und die Zahlenwerte übergeben.

procedure Verschieben (Wert1: Integer, Wert2: Integer);
Wobei für Wert1 und Wert2 auch wieder schöne Namen verwendet werden sollten.
Klaus E.
Linux - das längste Text-Adventure aller Zeiten...
Wer nie Linux mit dem vi konfiguriert hat, der hat am Leben vorbei geklickt.
  Mit Zitat antworten Zitat
stexxy

Registriert seit: 12. Sep 2007
15 Beiträge
 
#7

Re: Vereinfachung/Verkürzen

  Alt 13. Sep 2007, 07:20
danke für die tips aber das sagt mir nichts.
ich habe keine ahnung wie ich anders rangehen soll.
aber die befehle lerne ich bestimmt noch kennen.
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#8

Re: Vereinfachung/Verkürzen

  Alt 13. Sep 2007, 08:07
Herzlich willkommen in der Delphi-PRAXiS, stexxy.

Deine Schwierigkeiten - und nicht nur deine - fangen eigentlich schon vor der Kodierung an: Der Quellcode reflektiert die Qualität des Konzeptes und vor einem guten Konzept steht eine möglichst vollständige Problemanalyse.

Du fragst nach Vereinfachungsmöglichkeiten für deinen Quellcode, aber die vielen Timer, die dich (und mich) stören, können nur eliminiert werden, wenn du deine Aufgabenstellung und dein Konzept vorstellst. Danach können erfahrene Entwickler dir schnell sagen, ob es einen besseren Ansatz gibt, oder ob dein Ansatz besser umgesetzt werden kann. Ohne das Hintergrundwissen kannst du von Profis keine konkrete Hilfe erhalten.

Freundliche Grüße
  Mit Zitat antworten Zitat
stexxy

Registriert seit: 12. Sep 2007
15 Beiträge
 
#9

Re: Vereinfachung/Verkürzen

  Alt 13. Sep 2007, 08:19
Aufgabenstellung is die einen Fahrstuhl zu realisieren.
Er soll über 6 Stockwerke gesteuert werden können und sollte natürlich realistisch mit der Türöffnung usw sein.
Da ich mich natürlich noch nicht gut genug auskennen habe ich für jede bewegung einen extra timer genommen.
Jedoch ist es natürlich für mich wünschenswert dieses möglichst zu reduzieren.
Also nur noch 1 Timer wo die Formel für die bewegung steht.
Die anderen anweisungen welchen stockwerken er wann stoppen soll sind ja immer ähnlich aber trotzdem hab ich keine idee das zu verkürzen.

lg stexxy
  Mit Zitat antworten Zitat
Benutzerbild von RavenIV
RavenIV

Registriert seit: 12. Jan 2005
Ort: Waldshut-Tiengen
2.875 Beiträge
 
Delphi 2007 Enterprise
 
#10

Re: Vereinfachung/Verkürzen

  Alt 13. Sep 2007, 08:24
Verkürzen:
Analysiere Deinen Code.
Teile, die mehr als einmal vorkommen, gehören in eine function oder procedure.
Auch ähnliche Teile kann man in eine Funktion packen, die Teile, die sich unterscheiden, übergibt man als Parameter.

Weitere Hilfe dazu:
Einsteiger-Tutorials und Delphi-Hilfe.
Klaus E.
Linux - das längste Text-Adventure aller Zeiten...
Wer nie Linux mit dem vi konfiguriert hat, der hat am Leben vorbei geklickt.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 13:21 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