Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - Codevereinfachung möglich?
D. Annies - Do 23.04.09 11:16
Titel: Codevereinfachung möglich?
Hi, Delpher,
ich habe das folgende Problem:
Die Groupbox6 nimmt, je nachdem, die Groupbox4, Splitter1 und Groupbox2 auf
oder
das tntStringgrid3 und die Groupbox12 auf.
Gesteuert wird das von dem Button49, wie man sieht.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22:
| procedure TForm1.Button49Click(Sender: TObject); begin if button49.Caption = 'klein' then begin groupbox2.Visible := false; splitter1.Visible := false; groupbox4.Visible := false; groupbox8.Parent := groupbox6; groupbox8.setbounds(0,0,groupbox6.Width,groupbox6.Height-95); tntstringgrid3.setbounds(0,37,groupbox8.Width,groupbox8.Height-40); groupbox12.Parent := groupbox6; groupbox12.setbounds(2,groupbox6.height-95,groupbox6.Width,90); button49.SetBounds(groupbox8.Width-65,8,36,25); button49.caption := 'groß'; end else if button49.Caption = 'groß' then begin groupbox8.Parent := form1; groupbox8.setbounds(0,0,form1.Width,form1.Height-135); tntstringgrid3.setbounds(0,37,form1.Width,form1.Height-170); groupbox12.Parent := form1; groupbox12.setbounds(2,form1.height-135,form1.Width,70); button49.SetBounds(groupbox8.Width-65,8,36,25); button49.caption := 'klein'; end; groupbox8.Visible := true; groupbox12.Visible := true; end; |
Ich möchte nun eigentlich den Button49 in die Groupbox6 legen, um damit auch die Groß/Klein- Möglichkeit für die Groupbox4, Splitter1 und Groupbox2 haben zu können.
@all_the_bastler: Wie kann man das "einfach" (elegant) gestalten?
Gruß, Detlef
BenBE - Do 23.04.09 11:29
Moderiert von
Narses: Komplett-Zitat des letzten Beitrags entfernt.
Als erstes sollten wir hierzu den Code umsortieren:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24:
| procedure TForm1.Button49Click(Sender: TObject); begin if button49.Caption = 'klein' then begin groupbox8.Parent := groupbox6; groupbox8.setbounds(0,0,groupbox6.Width,groupbox6.Height-95); tntstringgrid3.setbounds(0,37,groupbox8.Width,groupbox8.Height-40); groupbox12.Parent := groupbox6; groupbox12.setbounds(2,groupbox6.height-95,groupbox6.Width,90); button49.SetBounds(groupbox8.Width-65,8,36,25); button49.caption := 'groß';
groupbox2.Visible := false; splitter1.Visible := false; groupbox4.Visible := false; end else if button49.Caption = 'groß' then begin groupbox8.Parent := form1; groupbox8.setbounds(0,0,form1.Width,form1.Height-135); tntstringgrid3.setbounds(0,37,form1.Width,form1.Height-170); groupbox12.Parent := form1; groupbox12.setbounds(2,form1.height-135,form1.Width,70); button49.SetBounds(groupbox8.Width-65,8,36,25); button49.caption := 'klein'; end;
groupbox8.Visible := true; groupbox12.Visible := true; end; |
Nach dem Markieren der Unterschiede fällt auf: Da unterscheided sich nicht viel ;-)
Also, vereinfachen wir das mal mit IIf (Trinär-Operator unter C):
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20:
| procedure TForm1.Button49Click(Sender: TObject); var Klein: Boolean; TargetCtrl : TWinControl; begin Klein := button49.Caption = 'klein'; if Klein then Begin groupbox2.Visible := false; splitter1.Visible := false; groupbox4.Visible := false; end; TargetCtrl := TWinControl(IIf(klein, groupbox6, Form1));
groupbox8.Parent := TargetCtrl; groupbox8.setbounds(0,0,TargetCtrl.Width,TargetCtrl.Height-IIf(klein,95,135)); tntstringgrid3.setbounds(0,37,groupbox8.Width,groupbox8.Height-IIf(klein,40,170)); groupbox12.Parent := TargetCtrl; groupbox12.setbounds(2,TargetCtrl.height-IIf(klein,95,135),TargetCtrl.Width,IIf(Klein,70,90)); button49.SetBounds(groupbox8.Width-65,8,36,25); button49.caption := IIf(klein, 'groß', 'klein');
groupbox8.Visible := true; groupbox12.Visible := true; end; |
Tipp: Benenn mal deine Komponenten besser!
Edit: Vergessen paar Magic Numbers anzupassen ...
D. Annies - Do 23.04.09 19:17
Hi, Benny,
komme erst jetzt dazu, wieder "rein" zu gucken - da hätte ich ja fast drauf warten können, auf deine Antwort...
Eine Anleihe bei C - sehr interessant!
Danke erstmal für deine Mühe,
Detlef
Tastaro - Fr 24.04.09 10:43
Und warum ist der Code dadurch einfacher?
Einfacher zu lesen ist er auf keinen Fall.
Wobei er schon am Anfang nicht sehr leserlich war, weil mehrere Anweisungen in eine Zeilen gestopft wurden.
Beste Grüße
Tastaro
BenBE - Fr 24.04.09 11:04
Tastaro hat folgendes geschrieben : |
| Und warum ist der Code dadurch einfacher? |
Weil, wo es möglich ist, Verzweigungen entfernt und Code-Dopplungen vermieden wurden.
Tastaro hat folgendes geschrieben : |
| Einfacher zu lesen ist er auf keinen Fall. |
Darüber lässt sich streiten. War außerdem nicht Kernpunkt der Frage :P
Tastaro hat folgendes geschrieben : |
Wobei er schon am Anfang nicht sehr leserlich war, weil mehrere Anweisungen in eine Zeilen gestopft wurden.
Beste Grüße
Tastaro |
Da muss ich Dir Recht geben. Zudem erschwert man auf diese Weise eine Reihe sinnvoller Überarbeitungen. Als erstes sollte der Quelltext vor solch einer Aktion immer an z.B. die Regeln des Econos Coding Standards (oder ähnlicher Dokumente) angepasst werden, da mit denen die Übersicht als erstes gegeben ist. Danach die Kürze herzustellen fällt dann umso einfacher.
Einen 20-Zeilen-Source zu optimieren, der lediglich linear abgearbeitet wird (ohne Schleifen), bringt eh meist nichts. Außer Übersichtlichkeit gewinnt man da oftmals nicht viel.
D. Annies - Sa 25.04.09 09:29
Ich habe doch wirklich nur mehrere Anweisungen in eine Zeile geschrieben, wenn diese seehr harmlos sind.
Gruß, Detlef
jaenicke - Sa 25.04.09 10:08
D. Annies hat folgendes geschrieben : |
| Ich habe doch wirklich nur mehrere Anweisungen in eine Zeile geschrieben, wenn diese seehr harmlos sind. |
Harmlos oder nicht, es macht den Code unübersichtlich und schlechter lesbar.
D. Annies - So 26.04.09 22:06
Hi Robert,
und Benny oder jaenicke zeigen mir auf, was man beachten sollte - das hilft wirklich weiter, so dass man es beim nächsten Mal besser macht / machen kann.
in diesem Sinne danke
Detlef
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!