Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi if Abfragen; eine kleine Herausforderung (https://www.delphipraxis.net/1188-if-abfragen%3B-eine-kleine-herausforderung.html)

Daniel B 29. Okt 2002 20:43


if Abfragen; eine kleine Herausforderung
 
Hallöchen,

ich hab hier in einer Prozedur "einige" if-Abfragen. Ich finde einfach keinen Weg um die Proz. zu kürzen, es ist doch viel zum Scrollen und etwa die hälfte kommt noch dazu.
Vielen Dank.

Grüsse, Daniel :hi:

Code:
[b]procedure[/b] TMainFormMC2004.Check;
[i]//Überprüfen ob Items in Listviews < = > als die Konstanten sind
//um entsprechende Buttons/RadioButtons auf Enabled/Disabled zu setzen[/i]
[b]begin[/b]
  [b]if[/b] ListViewKKLok.Items.Count >= MaxLok -1 [b]then[/b]
  [b]begin[/b]
    ButtonKKLokOK.Enabled := False;
  [b]end[/b];
  [b]if[/b] ListViewKKFkt.Items.Count >= MaxFkt -1 [b]then[/b]
  [b]begin[/b]
    ButtonKKFktOK.Enabled := False;
  [b]end[/b];
  [b]if[/b] ListViewKKWei.Items.Count >= MaxWei -1 [b]then[/b]
  [b]begin[/b]
    ButtonKKWeiOK.Enabled := False;
  [b]end[/b];
  [b]if[/b] ListViewKKMtr.Items.Count >= MaxMtr -1 [b]then[/b]
  [b]begin[/b]
    ButtonKKMtrOK.Enabled := False;
  [b]end[/b];
  [b]if[/b] ListViewKKWei.Items.Count = 0 [b]then[/b]
  [b]begin[/b]
    ButtonKKWeiTrigger.Enabled := False;
    ButtonKKWeiSchalt.Enabled := False;
  [b]end[/b];
  [b]if[/b] ListViewKKMtr.Items.Count = 0 [b]then[/b]
  [b]begin[/b]
    ButtonKKMtrLoks.Enabled := False;
    RadioButtonKKMtrAktivJa.Checked := False;
    RadioButtonKKMtrAktivNein.Checked := False;
  [b]end[/b];
  [b]if[/b] ListViewKKWei.Items.Count > 0 [b]then[/b]
  [b]begin[/b]
    ButtonKKWeiTrigger.Enabled := True;
    ButtonKKWeiSchalt.Enabled := True;
  [b]end[/b];
  [b]if[/b] ListViewKKMtr.Items.Count > 0 [b]then[/b]
  [b]begin[/b]
    ButtonKKMtrLoks.Enabled := True;
  [b]end[/b];
  [b]if[/b] ListViewKKLok.Items.Count = 0 [b]then[/b]
  [b]begin[/b]
    ButtonKKLokLoeschen.Enabled := False;
  [b]end[/b]
  [b]else[/b] [b]if[/b] ListViewKKLok.Items.Count > 0 [b]then[/b]
  [b]begin[/b]
    ButtonKKLokLoeschen.Enabled := True;
  [b]end[/b];
  [b]if[/b] ListViewKKFkt.Items.Count = 0 [b]then[/b]
  [b]begin[/b]
    ButtonKKFktLoeschen.Enabled := False;
  [b]end[/b]
  [b]else[/b] [b]if[/b] ListViewKKFkt.Items.Count > 0 [b]then[/b]
  [b]begin[/b]
    ButtonKKFktLoeschen.Enabled := True;
  [b]end[/b];
  [b]if[/b] ListViewKKWei.Items.Count = 0 [b]then[/b]
  [b]begin[/b]
    ButtonKKWeiLoeschen.Enabled := False;
  [b]end[/b]
  [b]else[/b] [b]if[/b] ListViewKKWei.Items.Count > 0 [b]then[/b]
  [b]begin[/b]
    ButtonKKWeiLoeschen.Enabled := True;
  [b]end[/b];
  [b]if[/b] ListViewKKMtr.Items.Count = 0 [b]then[/b]
  [b]begin[/b]
    ButtonKKMtrLoeschen.Enabled := False;
  [b]end[/b]
  [b]else[/b] [b]if[/b] ListViewKKMtr.Items.Count > 0 [b]then[/b]
  [b]begin[/b]
    ButtonKKMtrLoeschen.Enabled := True;
  [b]end[/b];
  [b]if[/b] MultitraktionLoks.ListViewEingefuegt.Items.Count > MaxMtrLoks -1 [b]then[/b]
  [b]begin[/b]
    MultitraktionLoks.ButtonEinfuegen.Enabled := False;
  [b]end[/b]
  [b]else[/b] [b]if[/b] MultitraktionLoks.ListViewEingefuegt.Items.Count <= MaxMtrLoks -1 [b]then[/b]
  [b]begin[/b]
    MultitraktionLoks.ButtonEinfuegen.Enabled := True;
  [b]end[/b];
[b]end[/b];

DrDangerous 29. Okt 2002 21:09

Hallo Daniel,

Code:
if ListViewKKLok.Items.Count >= MaxLok -1 then
  begin
    ButtonKKLokOK.Enabled := False;
  end;
kann zu folgender Form gebracht werden:

Code:
ButtonKKLokOK.Enabled := (ListViewKKLok.Items.Count < MaxLok -1);
Alternativ legst Du Deine Komponenten alle auf ein gemeinsames Panel und deaktivierst nur dieses Panel, wenn die Situation es erfordert. Alle auf dem Panel befindlichen Komponenten werden dann ebenfalls deaktiviert.

:firejump:

Greeeeeeeeeeeeeetz,
DrDangerous

Daniel B 29. Okt 2002 21:14

Zitat:

Zitat von DrDangerous
Alternativ legst Du Deine Komponenten alle auf ein gemeinsames Panel und deaktivierst nur dieses Panel, wenn die Situation es erfordert. Alle auf dem Panel befindlichen Komponenten werden dann ebenfalls deaktiviert.

Hallo DrDangerous,

das fällt aus. Das Programm ist schon zu etwa 80% fertig und optisch kann ich da nichts mehr ändern. Vor allem hat das Design was mit der Hardware zutun, wozu das Programm gehört. Ich hab auf dem Hauptformular 5 TabSheets, worum auf jeder Seite ein paar Button, Edits sind. No Way.

Grüsse, Daniel :hi:

Christian Seehase 29. Okt 2002 23:30

Moin Daniel B,

nur noch ein kleiner, allgemeiner, struktureller Tip (jawohl, ich ignoriere die Rechtschreibreform :mrgreen:)

Bei Konstruktionen

Code:
[b]if[/b] ListView.Items.Count = 0 [b]then[/b]
[b]begin[/b]
[b]end[/b]
[b]else[/b]
[b]begin[/b]
  [b]if[/b] ListView.Items.Count > 0 [b]then[/b]
  [b]begin[/b]
  [b]end[/b];
[b]end[/b];
kannst Du Dir das zweite if sparen.
Ein Count kann nur grösser oder gleich 0 sein. Wenn er nicht gleich null ist muss er grösser als 0 sein.

MathiasSimmack 30. Okt 2002 08:23

Hi Chris (Seehase).

Die von dir angesprochene Verkürzung bei "Count"-Konstruktionen lässt sich durch den Vorschlag von Dr. Evi ... äh, Dangerous noch weiter verkürzen.
Code:
ButtonKKLokLoeschen.Enabled := (ListViewKKLok.Items.Count > 0);
Insofern spart man auch hier noch jede Menge Code-Zeilen.

Außerdem vermisse ich bei den ersten Prüfungen irgendwie das "else", z.B.:
Code:
if ListViewKKLok.Items.Count >= MaxLok -1 then
  begin
    ButtonKKLokOK.Enabled := False;
  end;
Wenn die Listview jetzt weniger Items als gefordert hat, dürfte der Button IMHO nicht aktiviert werden, weil die Berücksichtigung dieses Zweiges fehlt. (Es sei denn, ich habe die Zeile vielleicht übersehen, oder die steckt in einem anderen Teil des Programms.)

So, und wo war jetzt die Herausforderung?

Christian Seehase 30. Okt 2002 10:49

Moin Mathias,

deshalb schrieb ich auch "allgemeiner Tip".
Wenn Du nicht gerade boolesche Werte setzen, sondern Befehlssequenzen ablaufen lassen willst, wirst Du wohl kaum um so eine If-Konstruktion herumkommen.
;-)


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:51 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 by Thomas Breitkreuz