Autor Beitrag
D. Annies
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1843

windows 7
D6 Enterprise, D7 Pers und TD 2006
BeitragVerfasst: Do 23.04.09 11:16 
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.

ausblenden 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

_________________
ut vires desint, tamen est laudanda voluntas
BenBE
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: Do 23.04.09 11:29 
Moderiert von user profile iconNarses: Komplett-Zitat des letzten Beitrags entfernt.

Als erstes sollten wir hierzu den Code umsortieren:

ausblenden 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):

ausblenden 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 ...

_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
D. Annies Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1843

windows 7
D6 Enterprise, D7 Pers und TD 2006
BeitragVerfasst: 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

_________________
ut vires desint, tamen est laudanda voluntas
Tastaro
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 414
Erhaltene Danke: 23



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: Fr 24.04.09 11:04 
user profile iconTastaro hat folgendes geschrieben Zum zitierten Posting springen:
Und warum ist der Code dadurch einfacher?

Weil, wo es möglich ist, Verzweigungen entfernt und Code-Dopplungen vermieden wurden.

user profile iconTastaro hat folgendes geschrieben Zum zitierten Posting springen:
Einfacher zu lesen ist er auf keinen Fall.

Darüber lässt sich streiten. War außerdem nicht Kernpunkt der Frage :P

user profile iconTastaro hat folgendes geschrieben Zum zitierten Posting springen:
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.

_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
D. Annies Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1843

windows 7
D6 Enterprise, D7 Pers und TD 2006
BeitragVerfasst: Sa 25.04.09 09:29 
Ich habe doch wirklich nur mehrere Anweisungen in eine Zeile geschrieben, wenn diese seehr harmlos sind.

Gruß, Detlef

_________________
ut vires desint, tamen est laudanda voluntas
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19346
Erhaltene Danke: 1754

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Sa 25.04.09 10:08 
user profile iconD. Annies hat folgendes geschrieben Zum zitierten Posting springen:
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.
Robert.Wachtel
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 895
Erhaltene Danke: 7

Windows 7 Ultimate x64
D5 Ent, D7 Arch, RAD Studio 2010 Pro, VS 2008
BeitragVerfasst: Sa 25.04.09 11:41 
user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
user profile iconD. Annies hat folgendes geschrieben Zum zitierten Posting springen:
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.

Full ACK! Ganz klassischer Fall von Spaghetticode. Das noch garniert mit den unmöglichen Komponentenbezeichnern sorgt bei mir z.B. dafür, mich nicht eine Sekunde mit dem Code zu beschäftigen.
D. Annies Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1843

windows 7
D6 Enterprise, D7 Pers und TD 2006
BeitragVerfasst: 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

_________________
ut vires desint, tamen est laudanda voluntas