Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Frage zu if...then ... in Verbindung mit 2 oder mehrerern Co (https://www.delphipraxis.net/5413-frage-zu-if-then-verbindung-mit-2-oder-mehrerern-co.html)

TimmA 5. Jun 2003 11:13


Frage zu if...then ... in Verbindung mit 2 oder mehrerern Co
 
Hallo,

ich habe folgende 2 kleine Probleme :

1. Ich habe ein Formular, indem einige Eingabefelder u. Auswahlfelder (Edits, Memos und ComboBoxen) zur Eingabe in die Datenbank dienen. Die Eingabefelder sind teils Pflichtfelder teils Optionalfelder. Wenn man mit der Eingabe fertig ist wird gespeichert und falls ein oder mehrere Felder ausgelassen wurden und in ihnen nichts steht kommt eine Showmessage und die Felder werden Rot eingefärbt. Soweit kein Problem, aber wenn z.B. 3 Felder rot eingefärbt wurde da nichts eingetragen wurde und ich von diesen in 2 was schreibe und 1 noch leer lasse sollen die 2, in die geschrieben wurde beim Speicherversuch (der aber abgebrochen wird, da noch 1 Feld nicht ausgefüllt ist) wieder in „Normalfarbe“ clWindow gefärbt werden. Was in den Feldern stehen soll ist egal Minimal ist eine Zahl oder Buchstabe. Nur weiß ich jetzt nicht wie das gehen soll ich habe schon ein bisschen herumprobiert aber zu keinem erfolgreichen Ergebnis gekommen mein Versuch :
z.B.

Code:
if Memo1.Text ='*' then
  Memo1.Color clWindow;
Hat aber wie gesagt nicht geklappt

Wie mach ich das nun am besten ? Geht das evtl. mit größer als ? Also wenn der Text größer ist als 1 Buchstabe bzw. Zahl dann ist Ok und wird auf „normal “ clWindow gefärbt und wenn weniger als 1 Buchstabe bzw. Zahl dann ist nicht Ok und wird Rot gefärbt.





2. Ich habe Beispielsweise 2 ComboBoxen

In jeder ComboBox sind 3 einträge.

In der ersten ComboBox steht :

Wert 0 = FF
Wert 1 = EE
Wert 2 = DD

In der zweiten ComboBox steht :

Wert 0 = AA
Wert 1 = BB
Wert 2 = CC


Nun will ich mit if ..... then .... else …. Allen verschiedenen Kombinationen funktionen zuweisen

Also z.B. wenn aus ComboBox1 Wert 0 und aus ComboBox2 Wert 1 ausgewählt ist das funktion y ausgeführt wird.

Oder wenn z.B. aus ComboBox1 Wert 0 und aus ComboBox2 Wert 2 ausgewählt ist das funktion x ausgeführt wird.

Oder wenn z.B. aus ComboBox1 Wert 2 und aus ComboBox2 Wert 1 ausgewählt ist das funktion x ausgeführt wird.

Usw.


Geht das überhaupt so ? Also mit nur 1 Combobox ist das ja nicht das Problem, aber mit 2 oder mehreren ?



Danke schonmal im Voraus

Gruss TimmA

Hansa 5. Jun 2003 11:36

Re: Frage zu if...then ... in Verbindung mit 2 oder mehrerer
 
Hi,

also ich versteh da nur Bahnhof.

Zitat:

Zitat von TimmA
...Wie mach ich das nun am besten ? Geht das evtl. mit größer als ? Also wenn der Text größer ist als 1 Buchstabe bzw. Zahl dann ist Ok und wird auf „normal “ clWindow gefärbt und wenn weniger als 1 Buchstabe bzw. Zahl dann ist nicht Ok und wird Rot gefärbt.

leere Felder würde ich mit
Code:
if length (xyz) = 0
abfangen. Und für die anderen Sachen würde ich mir mal die logischen Operatoren anschauen (AND, OR, NOT usw.).

Moment: das CASE hab ich vergessen. Ab 3mal IF THEN ELSE verwende ich das wegen der Übersichtlichkeit.

mjenke 5. Jun 2003 11:40

Hallo, Timm

Versuch es bei 1. mal mit
Delphi-Quellcode:
if Memo1.Text <> '' then
Damit prüfst Du ab, ob überhaupt Text in diesem Feld vorhanden ist. Es wird allerdings keine Unterscheidung getroffen zwischen Zahl, Buchstabe oder was auch immer...
Zu 2.:

Du kannst für beide ComboBoxen OnChange-Methoden schreiben, in denen Du abfragst bestimmst, was passieren soll...
Beispielsweise:
Delphi-Quellcode:
var
  Eintrag1, Eintrag2: integer;
begin
  Eintrag1 := ComboBox1.ItemIndex;
  Eintrag2 := ComboBox2.ItemIndex;
  if (Eintrag1=-1) or (Eintrag2=-1) then exit;  // Aussteigen, wenn in einer ComboBox nichts ausgewählt wurde
  // Jetzt die Kombinationen abbilden
  if (Eintrag1 = 0) and (Eintrag2 = 0) then ...
  if (Eintrag1 = 1) and (Eintrag2 = 1) then ...
  [...]
Du kannst diesen Code auch in einer Case-Anweisung schachteln:
Delphi-Quellcode:
var
  Eintrag1, Eintrag2: integer;
begin
  Eintrag1 := ComboBox1.ItemIndex;
  Eintrag2 := ComboBox2.ItemIndex;

  if (Eintrag1=-1) or (Eintrag2=-1) then exit;  // Aussteigen, wenn in einer ComboBox nichts ausgewählt wurde

  // Jetzt die Kombinationen abbilden
  case Eintrag1 of
    0: begin
         case Eintrag2 of
           0: Funktion aufrufen...
           1: Funktion aufrufen...
           [...]
         end;
       end;
    [...]
  end;
  if (Eintrag1 = 0) and (Eintrag2 = 0) then ...
  if (Eintrag1 = 1) and (Eintrag2 = 1) then ...
  [...]
Diesen Code packst Du am besten in eine eigene Methode, die Du aus den OnChange-Methoden nur noch aufrufst. Dann hast Du den Code nur an einer Stelle zu ändern, falls sich Änderungen ergeben...

:)
Matthias

[edit=Daniel B]Delphi-Tags eingefügt. MfG Daniel B.[/edit]

chris 5. Jun 2003 11:48

hi,

zu deinem ersten problem würde ich dir dies hier vorschlagen.
der vorteil von trim() ist das dann leerzeichen nicht als eingabe
gelten

Delphi-Quellcode:
with edit1 do if length(trim(text)) > 0 then color := clwindow else color := clred

Christian Seehase 5. Jun 2003 11:53

Moin Timm,

als erstes:
Bitte künftig unbedingt beachten:
Zwei Fragen => Zwei Threads.

Das verhindert ein Durcheinander im Thread, und erleichtert anderen die Suche.

Nun zu Deinem ComboBox-Problem.
Das liesse sich recht einfach lösen.
Du kannst einfach die Indizes beider ausgewählten Einträge in einen Wert zusammenrechnen, und dann, mit Hilfe einer Case Anweisung ermitteln, welche Funktion ausgeführt wird.

Beispiel:

Delphi-Quellcode:
const
  _Function1 = $0000;
  _Function2 = $0100;
  //...
var
  wFunction : WORD;

begin
  // Kein Eintrag gewählt, nichts zu tun
  if ComboBox1.ItemIndex = -1 then exit;
  if ComboBox2.ItemIndex = -1 then exit;
  // Durch shl 8, wird der Index in das höherwertige Byte verschoben
  wFunction := (ComboBox1.ItemIndex shl 8) or (ComboBox2.ItemIndex);
  case wFunction of
    _Function1 : begin
      // 1. Funktion ausführen
    end;
    _Function2 : begin
      // 2. Funktion ausführen
    end;
    // ...
  end;
end;
Das Beispiel geht von maximal 255 Einträgen je ComboBox aus.
Falls der Index nicht sicher auf einen bestimmten ComboBox Eintrag schliessen lässte, kann man die Items auch mit AddObject hinzufügen, und als "Objekt" den entsprechenden Wert speichern.

TimmA 5. Jun 2003 11:54

OK danke an alle für die schnelle Antworten.

Ich werde jetzt gleich mal ausprobieren ob es bei mir funktioniert

viiielen Dank schonmal ...


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