AGB  ·  Datenschutz  ·  Impressum  







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

Effektiver machen

Ein Thema von FabianIBerlin · begonnen am 23. Nov 2005 · letzter Beitrag vom 23. Nov 2005
Antwort Antwort
FabianIBerlin

Registriert seit: 6. Mär 2005
43 Beiträge
 
#1

Effektiver machen

  Alt 23. Nov 2005, 15:56
hi, ich habe bei meinem Schulprojekt in einem Thread eine aktualisierung von mehrern Shapes und labels vrgenommen.
Jetz sind das aber ellen von Quelltext für die Selbe Sache und ich wollt fragen ob mir jemand sagen kann wie ich das mit ner schelife oder so schlanker machen könnte

(hier ein auschnit der aktualisiereung)

Delphi-Quellcode:
//Nonnendamm Visualisierung
  LeitrechnerForm.NdBetriebL.Caption := KreuzungInfos[1,5];
  LeitrechnerForm.NdStatusL.Caption := KreuzungInfos[1,6];

 //Nonnendamm Hauptstraße
 if KreuzungInfos[1,3] = 'offthen
    begin
      LeitrechnerForm.HsNdRShape.Brush.Color := clBtnFace;
      LeitrechnerForm.HsNdGrShape.Brush.Color := clBtnFace;
      LeitrechnerForm.HsNdGShape.Brush.Color := clBtnFace;
    end;
  if KreuzungInfos[1,3] = 'redthen
    LeitrechnerForm.HsNdRShape.Brush.Color := clRed;
  if KreuzungInfos[1,3] = 'yelthen
    LeitrechnerForm.HsNdGShape.Brush.Color := clYellow;
  if KreuzungInfos[1,3] = 'grethen
    LeitrechnerForm.HsNdGrShape.Brush.Color := clGreen;
  if KreuzungInfos[1,3] = 'ryethen
    begin
      LeitrechnerForm.HsNdRShape.Brush.Color := clred;
      LeitrechnerForm.HsNdGrShape.Brush.Color := clYellow;
    end;

  //Nonnendamm Nebenstrassse
  if KreuzungInfos[1,4] = 'offthen
    begin
      LeitrechnerForm.NsNdRShape.Brush.Color := clBtnFace;
      LeitrechnerForm.NsNdGrShape.Brush.Color := clBtnFace;
      LeitrechnerForm.NsNdGShape.Brush.Color := clBtnFace;
    end;
  if KreuzungInfos[1,4] = 'redthen
    LeitrechnerForm.NsNdRShape.Brush.Color := clred;
  if KreuzungInfos[1,4] = 'yelthen
    LeitrechnerForm.NsNdGShape.Brush.Color := clYellow;
  if KreuzungInfos[1,4] = 'grethen
    LeitrechnerForm.NsNdGrShape.Brush.Color := clGreen;
  if KreuzungInfos[1,4] = 'ryethen
    begin
      LeitrechnerForm.NsNdRShape.Brush.Color := clred;
      LeitrechnerForm.NsNdGrShape.Brush.Color := clYellow;
    end;

//Gartenfelder Visualisierung
  LeitrechnerForm.GFBetriebL.Caption := KreuzungInfos[2,5];
  LeitrechnerForm.GFStatusL.Caption := KreuzungInfos[2,6];

  //Gartenfelder Hauptstraße
  if KreuzungInfos[2,3] = 'offthen
    begin
      LeitrechnerForm.HsGfRShape.Brush.Color := clBtnFace;
      LeitrechnerForm.HsGfGrShape.Brush.Color := clBtnFace;
      LeitrechnerForm.HsGfGShape.Brush.Color := clBtnFace;
    end;
  if KreuzungInfos[2,3] = 'redthen
    LeitrechnerForm.HsGfRShape.Brush.Color := clRed;
  if KreuzungInfos[2,3] = 'yelthen
    LeitrechnerForm.HsGfGShape.Brush.Color := clYellow;
  if KreuzungInfos[2,3] = 'grethen
    LeitrechnerForm.HsGfGrShape.Brush.Color := clGreen;
  if KreuzungInfos[2,3] = 'ryethen
    begin
      LeitrechnerForm.HsGfRShape.Brush.Color := clred;
      LeitrechnerForm.HsGfGrShape.Brush.Color := clYellow;
    end;

  //Gartenfelder Nebenstrassse
  if KreuzungInfos[2,4] = 'offthen
    begin
      LeitrechnerForm.NsGfRShape.Brush.Color := clBtnFace;
      LeitrechnerForm.NsGfGrShape.Brush.Color := clBtnFace;
      LeitrechnerForm.NsGfGShape.Brush.Color := clBtnFace;
    end;
  if KreuzungInfos[2,4] = 'redthen
    LeitrechnerForm.NsGfRShape.Brush.Color := clred;
  if KreuzungInfos[2,4] = 'yelthen
    LeitrechnerForm.NsGfGShape.Brush.Color := clYellow;
  if KreuzungInfos[2,4] = 'grethen
    LeitrechnerForm.NsGfGrShape.Brush.Color := clGreen;
  if KreuzungInfos[2,4] = 'ryethen
    begin
      LeitrechnerForm.NsGfRShape.Brush.Color := clred;
      LeitrechnerForm.NsGfGrShape.Brush.Color := clYellow;
    end;
(so geht das noch 4 mal)
  Mit Zitat antworten Zitat
Benutzerbild von freak4fun
freak4fun

Registriert seit: 22. Sep 2004
Ort: Hannover
1.807 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#2

Re: Effektiver machen

  Alt 23. Nov 2005, 16:34
Hallo ,
hast du die Möglichkeit aus denmArray KreuzungInfos[x,y] das ein Array of String zu sein scheint ein Array of Color zu machen, dann könntest du die Farbe direkt zuweisen.

Statt:
Delphi-Quellcode:
if KreuzungInfos[1,3] = 'redthen
    LeitrechnerForm.HsNdRShape.Brush.Color := clRed;
So:
LeitrechnerForm.HsNdRShape.Brush.Color := KreuzungInfos[1,3]; Wäre jetzt so meine erste Idee. Oder schau dir mal Case ... of ... end; an. Das vereinfacht deine If-Bedingungen.

MfG
freak
Christian
IT: Schließen Sie bitte das Fenster. User: Die Tür auch?
i++; // zaehler i um 1 erhoehen
  Mit Zitat antworten Zitat
Benutzerbild von Sharky
Sharky

Registriert seit: 29. Mai 2002
Ort: Frankfurt
8.252 Beiträge
 
Delphi 2006 Professional
 
#3

Re: Effektiver machen

  Alt 23. Nov 2005, 16:36
Hai Fabian,

am effektivsten wäre es sicher sich gedanken über das gesamte Model zu machen
Da die Shapes ja alle einen anderen Namen haben ist da mit einer Schleife nicht viel zu holen. Du müsstest Dir also überlegen ob Du es so umstellen kannst damit Du auf die Shapes über einen Index zugreifen kannst.

BTW: Ist da nicht ein Fehler im Code? Wenn KreuzungInfos[1,3] = 'red' ist wird das zugehörige Shape rot. Aber wenn KreuzungInfos[1,3] danach zum beispiel 'yel' ist wird das erste Shape doch nicht in der Farbe geändert? Oder übersehe ich das eben im Code?

Ausserdem solltest Du versuchen für des Status (off,red,yel...) keine Strings zu verwenden sondern diese lieber in einem Byte zu speichern.
Stephan B.
"Lasst den Gänsen ihre Füßchen"
  Mit Zitat antworten Zitat
ichbins

Registriert seit: 9. Jul 2005
Ort: Hohenaltheim
1.001 Beiträge
 
Delphi 2005 Personal
 
#4

Re: Effektiver machen

  Alt 23. Nov 2005, 16:37
klar geht das.


aber ich tus mir jetzt nicht an, den ganzen Code abzuschreiben.

wir sind hier ja kein hausaufgaben.de.

Nur ein paar Gedankenanstöße:

du speicherst alle Objekte in einem solchen Array.

Delphi-Quellcode:
const
objs:array[1..4,1..3] of object=((HsNdRShape,HsNdGrShape,HsNdGSShape),(nsNdRShape,nsNdGrShape,nsNdGSShape),(HsNdRShape,HsNdGrShape,HsNdGSShape),(HsNdRShape,HsNdGrShape,HsNdGSShape)...
Dann kannst du in einer Schleife die Widerholungen durchgehen.
Michael Enßlin
Ich, der ich weiß, mir einzubilden, dass ich weiß, nichts zu wissen, weiß, dass ich nichts weiß.
Sokrates
  Mit Zitat antworten Zitat
Benutzerbild von Sharky
Sharky

Registriert seit: 29. Mai 2002
Ort: Frankfurt
8.252 Beiträge
 
Delphi 2006 Professional
 
#5

Re: Effektiver machen

  Alt 23. Nov 2005, 16:41
Zitat von ichbins:
... wir sind hier ja kein hausaufgaben.de. ...
Unterlasse bitte solche Unterstellungen!
Nur weil es ein Schulprojekt ist bedeutet es nicht das er hier keine Hilfe bekommt.
Stephan B.
"Lasst den Gänsen ihre Füßchen"
  Mit Zitat antworten Zitat
FabianIBerlin

Registriert seit: 6. Mär 2005
43 Beiträge
 
#6

Re: Effektiver machen

  Alt 23. Nov 2005, 16:51
Zitat von Sharky:
Hai Fabian,
BTW: Ist da nicht ein Fehler im Code? Wenn KreuzungInfos[1,3] = 'red' ist wird das zugehörige Shape rot. Aber wenn KreuzungInfos[1,3] danach zum beispiel 'yel' ist wird das erste Shape doch nicht in der Farbe geändert? Oder übersehe ich das eben im Code?
Ah stimmt du hast recht, habe das nach einer änderung wieder rückgängig gemacht...


Zitat von ichbins:
wir sind hier ja kein hausaufgaben.de.
Es ist nicht wirklich eine Hausaufgabe ich wollte es nur machen um meinen Quellcode zu verbessern.

Aber thx an alle
  Mit Zitat antworten Zitat
Robert Marquardt
(Gast)

n/a Beiträge
 
#7

Re: Effektiver machen

  Alt 23. Nov 2005, 17:51
Sharky, ichbins hat durchaus recht. Vollstaendig geloeste Hausaufgaben sollte es hier nicht geben.
Es ist wirklich besser Denkanstoesse zu geben.

Um jetzt nochmals die Vorschlaege zu beschreiben:
Das Basisproblem kommt vom unguenstigen Typ der Elemente von KreuzungInfos.
Ein String ist kein ordinaler Typ und daher kann man ihn nicht als Arrayindex benutzen.
Man sollte also ein Enum fuer die Zustaende nehmen, da man damit dan ein Hilfsarray mit Farbwerten indizieren kann.
Direkt Farben zu nehmen ist nicht gut fuer das Design des Programms.
  Mit Zitat antworten Zitat
Benutzerbild von Sharky
Sharky

Registriert seit: 29. Mai 2002
Ort: Frankfurt
8.252 Beiträge
 
Delphi 2006 Professional
 
#8

Re: Effektiver machen

  Alt 23. Nov 2005, 17:58
Zitat von Robert Marquardt:
Sharky, ichbins hat durchaus recht. Vollstaendig geloeste Hausaufgaben sollte es hier nicht geben. ...
Es ist zwar OT. Aber Fabian hat an keiner Stelle geschrieben das er einen fertigen Code möchte. Darum spach ich ja auch von einer "Unterstellung"
Stephan B.
"Lasst den Gänsen ihre Füßchen"
  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 10:22 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