AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Frage zu if...then ... in Verbindung mit 2 oder mehrerern Co
Thema durchsuchen
Ansicht
Themen-Optionen

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

Ein Thema von TimmA · begonnen am 5. Jun 2003 · letzter Beitrag vom 5. Jun 2003
Antwort Antwort
TimmA

Registriert seit: 22. Mai 2003
Ort: Giessen
111 Beiträge
 
Delphi 7 Professional
 
#1

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

  Alt 5. Jun 2003, 12:13
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
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#2

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

  Alt 5. Jun 2003, 12:36
Hi,

also ich versteh da nur Bahnhof.

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.
Gruß
Hansa
  Mit Zitat antworten Zitat
mjenke

Registriert seit: 28. Mär 2003
Ort: Bonn
131 Beiträge
 
#3
  Alt 5. Jun 2003, 12:40
Hallo, Timm

Versuch es bei 1. mal mit
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]
Matthias Jenke
  Mit Zitat antworten Zitat
chris

Registriert seit: 24. Mai 2003
Ort: Düsseldorf
196 Beiträge
 
Delphi 2009 Professional
 
#4
  Alt 5. Jun 2003, 12: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

with edit1 do if length(trim(text)) > 0 then color := clwindow else color := clred
Chris
D2009.4 | Vista SP2 x32
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.117 Beiträge
 
Delphi 11 Alexandria
 
#5
  Alt 5. Jun 2003, 12: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.
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
TimmA

Registriert seit: 22. Mai 2003
Ort: Giessen
111 Beiträge
 
Delphi 7 Professional
 
#6
  Alt 5. Jun 2003, 12:54
OK danke an alle für die schnelle Antworten.

Ich werde jetzt gleich mal ausprobieren ob es bei mir funktioniert

viiielen Dank schonmal ...
  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 02:52 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