![]() |
Befehl kürzen
moin zusammen,
kennt jemand ne möglichkeit diesen code:
Delphi-Quellcode:
is eine procedure oder sowas zu stecken um ihn kürzer zu machen?! ^^
if (gb19.Caption = Fahrzeug1.fkennung) and ((btbg19.Caption <> '4') or (falscherstatus = false) or (btbg19.Caption <> '6') or (btbg19.Caption <> '7') or (btbg19.Caption <> '8') or (btbg19.Caption <> '3') ) then btbg19.Caption := '3' else if (gb20.Caption = Fahrzeug4.fkennung) and (btbg19.Caption = '1') or (btbg19.Caption = '2') or (btbg19.Caption = '5') then falscherstatus := true;
if (gb19.Caption = Fahrzeug2.fkennung) and ((btbg19.Caption <> '4') or (falscherstatus = false) or (btbg19.Caption <> '6') or (btbg19.Caption <> '7') or (btbg19.Caption <> '8') or (btbg19.Caption <> '3') ) then btbg19.Caption := '3' else if (gb20.Caption = Fahrzeug4.fkennung) and (btbg19.Caption = '1') or (btbg19.Caption = '2') or (btbg19.Caption = '5') then falscherstatus := true; if (gb19.Caption = Fahrzeug3.fkennung) and ((btbg19.Caption <> '4') or (falscherstatus = false) or (btbg19.Caption <> '6') or (btbg19.Caption <> '7') or (btbg19.Caption <> '8') or (btbg19.Caption <> '3') ) then btbg19.Caption := '3' else if (gb20.Caption = Fahrzeug4.fkennung) and (btbg19.Caption = '1') or (btbg19.Caption = '2') or (btbg19.Caption = '5') then falscherstatus := true; if (gb19.Caption = Fahrzeug4.fkennung) and ((btbg19.Caption <> '4') or (falscherstatus = false) or (btbg19.Caption <> '6') or (btbg19.Caption <> '7') or (btbg19.Caption <> '8') or (btbg19.Caption <> '3') ) then btbg19.Caption := '3' else if (gb20.Caption = Fahrzeug4.fkennung) and (btbg19.Caption = '1') or (btbg19.Caption = '2') or (btbg19.Caption = '5') then falscherstatus := true; if (gb20.Caption = Fahrzeug1.fkennung) and ((btbg20.Caption <> '4') or (falscherstatus = false) or (btbg20.Caption <> '6') or (btbg20.Caption <> '7') or (btbg20.Caption <> '8') or (btbg20.Caption <> '3') ) then btbg20.Caption := '3' else if (gb20.Caption = Fahrzeug4.fkennung) and (btbg20.Caption = '1') or (btbg20.Caption = '2') or (btbg20.Caption = '5') then falscherstatus := true; if (gb20.Caption = Fahrzeug2.fkennung) and ((btbg20.Caption <> '4') or (falscherstatus = false) or (btbg20.Caption <> '6') or (btbg20.Caption <> '7') or (btbg20.Caption <> '8') or (btbg20.Caption <> '3') ) then btbg20.Caption := '3' else if (gb20.Caption = Fahrzeug4.fkennung) and (btbg20.Caption = '1') or (btbg20.Caption = '2') or (btbg20.Caption = '5') then falscherstatus := true; if (gb20.Caption = Fahrzeug3.fkennung) and ((btbg20.Caption <> '4') or (falscherstatus = false) or (btbg20.Caption <> '6') or (btbg20.Caption <> '7') or (btbg20.Caption <> '8') or (btbg20.Caption <> '3') ) then btbg20.Caption := '3' else if (gb20.Caption = Fahrzeug4.fkennung) and (btbg20.Caption = '1') or (btbg20.Caption = '2') or (btbg20.Caption = '5') then falscherstatus := true; if (gb20.Caption = Fahrzeug4.fkennung) and ((btbg20.Caption <> '4') or (falscherstatus = false) or (btbg20.Caption <> '6') or (btbg20.Caption <> '7') or (btbg20.Caption <> '8') or (btbg20.Caption <> '3') ) then btbg20.Caption := '3' else if (gb20.Caption = Fahrzeug4.fkennung) and (btbg20.Caption = '1') or (btbg20.Caption = '2') or (btbg20.Caption = '5') then falscherstatus := true; schonmal danke im vorraus mfg markus |
Re: Befehl kürzen
Entschuldigung, aber HÄ? :stupid:
In dem Code versteht man echt nichts... beschreib mal bitte, was der tut. |
Re: Befehl kürzen
Du kannst ja erst mal die identischen Vergleich durchführen und dann nur noch die Unterschiede
|
Re: Befehl kürzen
Lagere doch erstmal die ganzen wiederkehrenden Abfragen in eine eigene Funktion aus. Bsp:
Delphi-Quellcode:
(btbg19.Caption <> '4') or (falscherstatus = false) or (btbg19.Caption <> '6') or (btbg19.Caption <> '7') or (btbg19.Caption <> '8') or (btbg19.Caption <> '3')
|
Re: Befehl kürzen
Wenn man sich mal die Mühe macht und diese Textwüste ordentlich einrückt...
Delphi-Quellcode:
dann kann man vielleicht schon mehr erkennen.
if (gb19.Caption = Fahrzeug1.fkennung)
and ( (btbg19.Caption <> '4') or (falscherstatus = false) or (btbg19.Caption <> '6') or (btbg19.Caption <> '7') or (btbg19.Caption <> '8') or (btbg19.Caption <> '3') ) then begin btbg19.Caption := '3'; end else if (gb20.Caption = Fahrzeug4.fkennung) and (btbg19.Caption = '1') or (btbg19.Caption = '2') or (btbg19.Caption = '5') then begin falscherstatus := true; end; if (gb19.Caption = Fahrzeug2.fkennung) and ( (btbg19.Caption <> '4') or (falscherstatus = false) or (btbg19.Caption <> '6') or (btbg19.Caption <> '7') or (btbg19.Caption <> '8') or (btbg19.Caption <> '3') ) then begin btbg19.Caption := '3'; end else if (gb20.Caption = Fahrzeug4.fkennung) and (btbg19.Caption = '1') or (btbg19.Caption = '2') or (btbg19.Caption = '5') then begin falscherstatus := true; end; if (gb19.Caption = Fahrzeug3.fkennung) and ( (btbg19.Caption <> '4') or (falscherstatus = false) or (btbg19.Caption <> '6') or (btbg19.Caption <> '7') or (btbg19.Caption <> '8') or (btbg19.Caption <> '3') ) then begin btbg19.Caption := '3'; end else if (gb20.Caption = Fahrzeug4.fkennung) and (btbg19.Caption = '1') or (btbg19.Caption = '2') or (btbg19.Caption = '5') then begin falscherstatus := true; end; if (gb19.Caption = Fahrzeug4.fkennung) and ( (btbg19.Caption <> '4') or (falscherstatus = false) or (btbg19.Caption <> '6') or (btbg19.Caption <> '7') or (btbg19.Caption <> '8') or (btbg19.Caption <> '3') ) then begin btbg19.Caption := '3'; end else if (gb20.Caption = Fahrzeug4.fkennung) and (btbg19.Caption = '1') or (btbg19.Caption = '2') or (btbg19.Caption = '5') then begin falscherstatus := true; end; if (gb20.Caption = Fahrzeug1.fkennung) and ( (btbg20.Caption <> '4') or (falscherstatus = false) or (btbg20.Caption <> '6') or (btbg20.Caption <> '7') or (btbg20.Caption <> '8') or (btbg20.Caption <> '3') ) then begin btbg20.Caption := '3'; end else if (gb20.Caption = Fahrzeug4.fkennung) and (btbg20.Caption = '1') or (btbg20.Caption = '2') or (btbg20.Caption = '5') then begin falscherstatus := true; end; if (gb20.Caption = Fahrzeug2.fkennung) and ( (btbg20.Caption <> '4') or (falscherstatus = false) or (btbg20.Caption <> '6') or (btbg20.Caption <> '7') or (btbg20.Caption <> '8') or (btbg20.Caption <> '3') ) then begin btbg20.Caption := '3'; end else if (gb20.Caption = Fahrzeug4.fkennung) and (btbg20.Caption = '1') or (btbg20.Caption = '2') or (btbg20.Caption = '5') then begin falscherstatus := true; end; if (gb20.Caption = Fahrzeug3.fkennung) and ( (btbg20.Caption <> '4') or (falscherstatus = false) or (btbg20.Caption <> '6') or (btbg20.Caption <> '7') or (btbg20.Caption <> '8') or (btbg20.Caption <> '3') ) then begin btbg20.Caption := '3'; end else if (gb20.Caption = Fahrzeug4.fkennung) and (btbg20.Caption = '1') or (btbg20.Caption = '2') or (btbg20.Caption = '5') then begin falscherstatus := true; end; if (gb20.Caption = Fahrzeug4.fkennung) and ( (btbg20.Caption <> '4') or (falscherstatus = false) or (btbg20.Caption <> '6') or (btbg20.Caption <> '7') or (btbg20.Caption <> '8') or (btbg20.Caption <> '3') ) then begin btbg20.Caption := '3'; end else if (gb20.Caption = Fahrzeug4.fkennung) and (btbg20.Caption = '1') or (btbg20.Caption = '2') or (btbg20.Caption = '5') then begin falscherstatus := true; end; Allerdings nur vielleicht, in Wirklichkeit wird einem dann erst das ganze schreckliche Ausmaß klar und man sollte sich diesem Code vermutlich doch nicht weiter annähren als, naja, sagen wir mal 1km. Was mich besonders stutzig macht, sind diese komischen...
Delphi-Quellcode:
AND- und OR-Verknüpfungen. Fehlt da nicht eventuell noch ein Klammerpaar?
else if (gb20.Caption = Fahrzeug4.fkennung)
and (btbg20.Caption = '1') or (btbg20.Caption = '2') or (btbg20.Caption = '5') then Also so...
Delphi-Quellcode:
?
else if (gb20.Caption = Fahrzeug4.fkennung)
and ((btbg20.Caption = '1') or (btbg20.Caption = '2') or (btbg20.Caption = '5')) then Ich sehe da noch viel mehr Problemstellen, lass es aber jetzt mal dabei. Sorry, aber da vergeht einem ja echt jeglicher Spass am Programmieren. Traurige Grüsse Thorsten |
Re: Befehl kürzen
Hier doch nochmal ein Vorschlag...
Delphi-Quellcode:
Nicht schön, aber selten...
type
TMyResult = (_None, _True, _False); function Test(FahrzeugkennungA, FahrzeugkennungB, CaptionA, CaptionB, CaptionC:string; falscherstatus:boolean):TMyResult; begin Result:=_None; if (CaptionA = FahrzeugkennungA) and ( (CaptionB <> '4') or (CaptionB <> '6') or (CaptionB <> '7') or (CaptionB <> '8') or (CaptionB <> '3') or not falscherstatus) then begin Result:=_True; end else if (CaptionC = FahrzeugkennungB) and ((CaptionA = '1') or (CaptionA = '2') or (CaptionA = '5')) then begin Result:=_False; end; end; procedure TForm.Proc(var status:boolean); var F4K, CapA, CapC:string; begin F4K:=Fahrzeug4.fkennung; CapA:=gb19.Caption; CapC:=gb20.Caption; case Test(Fahrzeug1.fkennung, F4K, CapA, btbg19.Caption, CapC, status) of _True: btbg19.Caption:='3'; _False: status:=true; end; case Test(Fahrzeug2.fkennung, F4K, CapA, btbg19.Caption, CapC, status) of _True: btbg19.Caption:='3'; _False: status:=true; end; case Test(Fahrzeug3.fkennung, F4K, CapA, btbg19.Caption, CapC, status) of _True: btbg19.Caption:='3'; _False: status:=true; end; case Test(Fahrzeug4.fkennung, F4K, CapA, btbg19.Caption, CapC, status) of _True: btbg19.Caption:='3'; _False: status:=true; end; CapA:=gb20.Caption; CapC:=gb20.Caption; case Test(Fahrzeug1.fkennung, F4K, CapA, btbg20.Caption, CapC, status) of _True: btbg20.Caption:='3'; _False: status:=true; end; case Test(Fahrzeug2.fkennung, F4K, CapA, btbg20.Caption, CapC, status) of _True: btbg20.Caption:='3'; _False: status:=true; end; case Test(Fahrzeug3.fkennung, F4K, CapA, btbg20.Caption, CapC, status) of _True: btbg20.Caption:='3'; _False: status:=true; end; case Test(Fahrzeug4.fkennung, F4K, CapA, btbg20.Caption, CapC, status) of _True: btbg20.Caption:='3'; _False: status:=true; end; end; |
Re: Befehl kürzen
Zitat:
|
Re: Befehl kürzen
Naja, schau dir den Quellcode oben mal an. Da hier leider schreibend auf die Komponenten der Form zugegriffen wird und das leider mit TCaption über einen Referenzparameter nicht geht, musste ich mir hier etwas anderes einfallen lassen.
Bin aber auf andere Lösungen auch sehr gespannt... |
Re: Befehl kürzen
[ot]
Sag mal, wir das ein BOS-Funk-Tool :stupid: [/ot] |
Re: Befehl kürzen
Ich weiss, deine Frage geht nicht an mich. Aber meine geht an dich.
Hört sich ja wirklich spannend an. Was ist das? Habe nur dies gefunden ![]() Sorry, bin eben zu blöd dafür. |
Re: Befehl kürzen
Hier ist ein interessanter Artikel zum Thema "IF THEN ELSE Knoten auflösen" :-D
![]() Schöne Grüße, Jens :hi: |
Re: Befehl kürzen
Eigentlich sollte man sich schämen, so einen Code erst zu verbrechen und dann auch noch der Öffentlichkeit anzubieten. Grenzt schon fast an Frechheit ... Ganz nach dem Motto: "Kann mir das hier mal jemand entstricken? Ich blick da nicht mehr durch." :mrgreen:
|
Re: Befehl kürzen
ja also es geht mir eigentl darum den prog-code was übersichtlicher zu machen
durchblicken tuh ich da schon falls jmd eine erklärung des progs will kann er das ja äußern dann mach ich mir die mühe ich wusste nur nich ob es möglich ist dieses monster zu kürzen da ich ca 20 buttons mit der gleichen abfrage habe und ich aber nicht weiß wie man zb im namen von button per for schleife oder sowas ne zahl erhöht...ihr versteht was ich meine?! und ja in der tat dieser teil ist häßlich - aber hey er funzt :D ahja und wegen der klammer, ja die hab ich iwie net mitkopiert ^^ aber so wies aussieht kann man nich wirklich ne kürzere sache draus zu machen!? - danke für die antworten!! *EDIT*: Und ja es wird ein BOS-Tool - zumindeste ein einsatztagebuchtool ohne funkanbindung ;) |
Re: Befehl kürzen
Zitat:
Zitat:
|
Re: Befehl kürzen
Zitat:
steh gerade aufm schlauch sory ^^ und was liefert mir dann .fincomponent()?! müsste ja prinzipiell sowas geben:
Delphi-Quellcode:
nur das prob is halt das 'X' ;)
procedure form1.blub(komponente : "buttonX.caption")
begin for X := 1 to 20 do begin blablabla buttonX.Caption blabla end; end; |
Re: Befehl kürzen
Moin,
das Hauptproblem an dem gezeigten Code ist, dass Benutzeroberfläche und Regelwerk eng miteinander verwoben sind. Man "rechnet" doch nicht mit Captions, sondern entwirft geeignete Datenstrukturen. Insofern gehen für mich alle Hilfestellungen hier in eine Richtung, die mir nicht gefallen kann. Eine weitere Sünde sind die unübersichtlichen Ausdrücke, die man unter Anwendung der Moore'schen Gesetze vereinfachen kann. Ausdrücke wie (falscherstatus = false) formuliert man wartungsfreundlicher als (not falscherstatus). Momentan werden scheinbar Fahrzeug-Eigenschaften in UI-Controls festgehalten, die Zuordnung zu einem konkreten Fahrzeug geschieht über eine GruppenBox-Caption. Dieses Programm wird mehr Kummer als Freude machen - versprochen. Ich würde zuerst mal eine Datenanalyse vorschlagen: Entitäten (Fahrzeug, Fahrer, ...) und Attribute (Fahrzeugkennung, Fahrername, ...) ermitteln und geeignet zusammenfassen. Grüße vom marabu |
Re: Befehl kürzen
Zitat:
Zitat:
Delphi-Quellcode:
but := Form.FindComponent('Button'+IntTostr( i));
|
Re: Befehl kürzen
Zitat:
|
Re: Befehl kürzen
Zitat:
und viele der worte aus deinem text machen mir ein wenig angst xD nee spaß bei seite...es wäre sicher günstiger hier mit klassen und ähnlichem zu handtieren aber da ich nicht vor hatte mir den kopf zu zermatern sondern eigentl so simpel wie möglich schreiben wollte (also für mich is das simpel ^^) habe ich versucht es so zu machen... ich danke euch recht herzlich und viellt versuch ichs mal mit dem vorschlag von mkinzler :P will jmd viellt das prog so haben?! :thumb: |
Re: Befehl kürzen
Sorry,
aber dann auch noch: Zitat:
Hast du in der Schule nicht aufgepasst oder willst du uns ärgern? Grüsse Rainer |
Re: Befehl kürzen
poste doch mal dein menü dazu, damit man sich etwas vorstellen kann und ggf. was dein progy damit machen will...
denke, top down kommen wir eher zum ziel als per buttom up... ausserdem solltest dir mal überlegen 'n struktogramm für deine logik zu entwerfen und dies ggf. gleich mit dranhängen. so sieht man viel schneller was das ganze sein soll ... |
Re: Befehl kürzen
Ist nicht geprüft, sollte aber stimmen:
Delphi-Quellcode:
Zuletzt ist der Code nur noch wegen der langen Namen so ausführlich. Wahrscheinlich kann man das noch mehr kürzen, aber zu mehr habe ich keine Lust ;)
procedure TForm1.Button1Click(Sender: TObject);
function Abfrage(gbStr, gb20Str, btbgStr, fkennungXStr, fkennung4Str: String; var falscherstatus: Boolean): Integer; begin if (gbStr = fkennungXStr) and ( (btbgStr <> '4') or (falscherstatus = false) or (btbgStr <> '6') or (btbgStr <> '7') or (btbgStr <> '8') or (btbgStr <> '3') ) then Result := '3' else falscherstatus := (gb20Str = fkennung4Str) and (btbgStr = '1') or (btbgStr = '2') or (btbgStr = '5'); end; begin btbg19.Caption := Abfrage(gb19.Caption, gb20.Caption, btbg19.Caption, Fahrzeug1.fkennung, Fahrzeug4.fkennung, falscherstatus); btbg19.Caption := Abfrage(gb19.Caption, gb20.Caption, btbg19.Caption, Fahrzeug2.fkennung, Fahrzeug4.fkennung, falscherstatus); btbg19.Caption := Abfrage(gb19.Caption, gb20.Caption, btbg19.Caption, Fahrzeug3.fkennung, Fahrzeug4.fkennung, falscherstatus); btbg19.Caption := Abfrage(gb19.Caption, gb20.Caption, btbg19.Caption, Fahrzeug4.fkennung, Fahrzeug4.fkennung, falscherstatus); btbg20.Caption := Abfrage(gb20.Caption, gb20.Caption, btbg20.Caption, Fahrzeug1.fkennung, Fahrzeug4.fkennung, falscherstatus); btbg20.Caption := Abfrage(gb20.Caption, gb20.Caption, btbg20.Caption, Fahrzeug2.fkennung, Fahrzeug4.fkennung, falscherstatus); btbg20.Caption := Abfrage(gb20.Caption, gb20.Caption, btbg20.Caption, Fahrzeug3.fkennung, Fahrzeug4.fkennung, falscherstatus); btbg20.Caption := Abfrage(gb20.Caption, gb20.Caption, btbg20.Caption, Fahrzeug4.fkennung, Fahrzeug4.fkennung, falscherstatus); end; Allerdings scheint der Code unsinnig zu sein, da sich die Werte permanent überschreiben. EDIT: Leider weiß ich nicht ob Fahrzeug1 bis Fahrzeug4 Komponenten sind, sonst könnte man es noch kürzen:
Delphi-Quellcode:
Aber wie gesagt, je mehr man es kürzt, umso mehr sieht der Code nach Unsinn aus.
procedure TForm1.Button2Click(Sender: TObject);
function Abfrage(gbStr, gb20Str, btbgStr, fkennungXStr, fkennung4Str: String; var falscherstatus: Boolean): Integer; begin if (gbStr = fkennungXStr) and ( (btbgStr <> '4') or (falscherstatus = false) or (btbgStr <> '6') or (btbgStr <> '7') or (btbgStr <> '8') or (btbgStr <> '3') ) then Result := '3' else falscherstatus := (gb20Str = fkennung4Str) and (btbgStr = '1') or (btbgStr = '2') or (btbgStr = '5'); end; var i: Integer; begin for i := 1 to 4 do btbg19.Caption := Abfrage(gb19.Caption, gb20.Caption, btbg19.Caption, TAbc(FindComponent('Fahrzeug'+IntToStr(i)).fkennung, Fahrzeug4.fkennung, falscherstatus); for i := 1 to 4 do btbg20.Caption := Abfrage(gb20.Caption, gb20.Caption, btbg20.Caption, TAbc(FindComponent('Fahrzeug'+IntToStr(i)).fkennung, Fahrzeug4.fkennung, falscherstatus); end; |
Re: Befehl kürzen
Liste der Anhänge anzeigen (Anzahl: 1)
hey das sieht echt so aus wie das was ich mir
vorgestellt hatte :D Danke popov! ich werds mal versuchen das zweite wird denk ich net funzen aber ich werds ja sehen hab ma die exe angehangen ahja und nein es ist nich sinnlos was ich da schreibe die abfrage die ihr seht regelt, dass kein fahrzeug was im status 4/3/6/7/8 in einen einsatz gezogen werden kann - oder dass zumindest eine ausgabe kommt die dem user sagt dass ein fahrzeug nich einsatzbereit ist. wie schon gesagt das prog is so meine eigene bastelei - also nich dazu gedacht dass sich jmd ohne "einweisung" damit beschäftigt und bis jetzt waren die rückmeldungen immer recht gut - mal abgesehen von den üblichen kinderkrankheiten (bugs) also dann herzlichen dank! PS: @ WS1976 - kurze durchsage nich aufn sack gehn ;) |
Re: Befehl kürzen
Zitat:
|
Re: Befehl kürzen
Hallo
dümmlich kann ich da nur sagen. Rainer |
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:44 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz