AGB  ·  Datenschutz  ·  Impressum  







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

if Abfragen; eine kleine Herausforderung

Ein Thema von Daniel B · begonnen am 29. Okt 2002 · letzter Beitrag vom 30. Okt 2002
Antwort Antwort
Daniel B
(Gast)

n/a Beiträge
 
#1

if Abfragen; eine kleine Herausforderung

  Alt 29. Okt 2002, 19:43
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

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];
  Mit Zitat antworten Zitat
DrDangerous

Registriert seit: 5. Okt 2002
17 Beiträge
 
#2
  Alt 29. Okt 2002, 20: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.



Greeeeeeeeeeeeeetz,
DrDangerous
  Mit Zitat antworten Zitat
Daniel B
(Gast)

n/a Beiträge
 
#3
  Alt 29. Okt 2002, 20:14
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
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.105 Beiträge
 
Delphi 11 Alexandria
 
#4
  Alt 29. Okt 2002, 22:30
Moin Daniel B,

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

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.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
MathiasSimmack
(Gast)

n/a Beiträge
 
#5
  Alt 30. Okt 2002, 07: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?
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.105 Beiträge
 
Delphi 11 Alexandria
 
#6
  Alt 30. Okt 2002, 09: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.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  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 21:32 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