Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   If Abfrage mit or und and kombinieren (https://www.delphipraxis.net/188449-if-abfrage-mit-und-kombinieren.html)

Luckner 4. Mär 2016 16:17

If Abfrage mit or und and kombinieren
 
Hallo, habe folgende if-Anfrage;
Delphi-Quellcode:
if (JvComboMaschine2.Text = 'TT') and (JvEditRohwareNr.Text = '') then
     begin
       Messagedlg('Rohwaren-Nr. eintragen!', mtwarning, [mbok], 0);
       JvEditRohwareNr.SetFocus;
     end
  else if (JvComboMaschine2.Text = 'TT / Cutter') and (JvEditRohwareNr.Text = '') then
     begin
       Messagedlg('Rohwaren-Nr. eintragen!', mtwarning, [mbok], 0);
       JvEditRohwareNr.SetFocus;
     end
  else if (JvComboMaschine2.Text = 'TT600') and (JvEditRohwareNr.Text = '') then
     begin
       Messagedlg('Rohwaren-Nr. eintragen!', mtwarning, [mbok], 0);
       JvEditRohwareNr.SetFocus;
     end
  else if (JvComboMaschine2.Text = 'Laser') and (JvEditRohwareNr.Text = '') then
     begin
       Messagedlg('Rohwaren-Nr. eintragen!', mtwarning, [mbok], 0);
       JvEditRohwareNr.SetFocus;
     end
  else if (JvComboMaschine2.Text = 'Primera') and (JvEditRohwareNr.Text = '') then
     begin
       Messagedlg('Rohwaren-Nr. eintragen!', mtwarning, [mbok], 0);
       JvEditRohwareNr.SetFocus;
     end
  else
    begin
      PanelSpeichern.Visible := True;
      JvHTButtonspeichernOK.SetFocus;
    end;
Läßt sich das durch eine If-Abfrage beschreiben, so wie:
Delphi-Quellcode:
if ((JvComboMaschine2.Text = 'TT') or (JvComboMaschine2.Text = 'TT / Cutter') or (JvComboMaschine2.Text = 'TT600') or (JvComboMaschine2.Text = 'Laser') or (JvComboMaschine2.Text = 'Memjet') or (JvComboMaschine2.Text = 'Primera')) and (JvEditRohwareNr.Text = '') then
     begin
       Messagedlg('Rohwaren-Nr. eintragen!', mtwarning, [mbok], 0);
       JvEditRohwareNr.SetFocus;
     end
 else
    begin
      PanelSpeichern.Visible := True;
      JvHTButtonspeichernOK.SetFocus;
    end;
Habe schon verschiedene versuche gemacht, jedoch ohne Erfolg. Könnte ich ich einen Schubser von Euch bekommen?

Danke, Luckner

Zacherl 4. Mär 2016 16:49

AW: If Abfrage mit or und and kombinieren
 
Was genau ist das Problem? Sieht auf den ersten Blick korrekt aus.

Luckner 4. Mär 2016 17:07

AW: If Abfrage mit or und and kombinieren
 
Habe ich auch gedacht, aber auch wenn im "JvEditRohwareNr.Text = '123456'" was drin steht, springt das Programm in die if-Abfrage.

Luckie 4. Mär 2016 17:20

AW: If Abfrage mit or und and kombinieren
 
Kannst du die Combobox JvComboMaschine2.Text nicht erst aktivieren, wenn in JvEditRohwareNr was eingetragen wurde? Dann sparst du dir die ganze Abfrage.

Luckner 4. Mär 2016 17:30

AW: If Abfrage mit or und and kombinieren
 
Nein, weil (Die der Name der Combobox schon sagt, bei einigen Maschinen (eingetragen in der Combobox) kein Eintrag in JvEditRohwareNr sein darf.

Bjoerk 4. Mär 2016 17:31

AW: If Abfrage mit or und and kombinieren
 
Kann es sein daß du bur das brauchst?
Delphi-Quellcode:
  if JvComboMaschine2.Items.IndexOf(JvEditRohwareNr.Text) < 0 then
  begin
    Messagedlg('Rohwaren-Nr. eintragen!', mtwarning, [mbok], 0);
    JvEditRohwareNr.SetFocus;
  end
  else
  begin
    PanelSpeichern.Visible := True;
    JvHTButtonspeichernOK.SetFocus;
  end;

gb0 4. Mär 2016 17:37

AW: If Abfrage mit or und and kombinieren
 
Wenn ich es richtig verstanden habe, ist das nicht zielführend, weil JvEditRohwareNr.Text ja doch kein ComboBox-Eintrag sein soll - oder??

gb0 4. Mär 2016 17:38

AW: If Abfrage mit or und and kombinieren
 
@Luckner - an der Logik finde ich auch nichts.

Helmi 4. Mär 2016 17:39

AW: If Abfrage mit or und and kombinieren
 
Hallo,

Zitat:

Zitat von Luckner (Beitrag 1332094)
Delphi-Quellcode:
if ((JvComboMaschine2.Text = 'TT') or (JvComboMaschine2.Text = 'TT / Cutter') or (JvComboMaschine2.Text = 'TT600') or (JvComboMaschine2.Text = 'Laser') or (JvComboMaschine2.Text = 'Memjet') or (JvComboMaschine2.Text = 'Primera')) and (JvEditRohwareNr.Text = '') then
     begin
       Messagedlg('Rohwaren-Nr. eintragen!', mtwarning, [mbok], 0);
       JvEditRohwareNr.SetFocus;
     end
 else
    begin
      PanelSpeichern.Visible := True;
      JvHTButtonspeichernOK.SetFocus;
    end;

bist du dir sicher, dass der Code nicht funktioniert?

Vielleicht noch
Delphi-Quellcode:
and (trim(JvEditRohwareNr.Text) = '') then
um die Eingabe von nur Leerzeichen auch als leere Eingabe anzusehen

bernau 4. Mär 2016 22:48

AW: If Abfrage mit or und and kombinieren
 
Wie wäre es damit?

Delphi-Quellcode:
   
  if MatchText(JvComboMaschine2.Text, ['TT', 'TT / Cutter', 'TT600', 'Laser', 'Primera']) and (JvEditRohwareNr.Text = '') then
      begin
        Messagedlg('Rohwaren-Nr. eintragen!', mtwarning, [mbok], 0);
        JvEditRohwareNr.SetFocus;
      end
    else
      begin
        PanelSpeichern.Visible := True;
        JvHTButtonspeichernOK.SetFocus;
      end;

Luckner 6. Mär 2016 16:27

AW: If Abfrage mit or und and kombinieren
 
Hallo Bernau,
diese Funktion kannte ich bis heute nicht, aber sie sieht elegant aus für mein Problem. Werde es gleich ausprobieren.

Danke!
Luckner

nahpets 6. Mär 2016 18:00

AW: If Abfrage mit or und and kombinieren
 
Mein Delphi 7 kennt Matchtext nicht.

Wäre dashier eventuell ein Lösungsansatz (nur ungetestet so hingedaddelt)?
Delphi-Quellcode:
procedure TForm1.irgendwas;
var
  sl      : TStringList;
begin
  sl := TStringList.Create;
  // Dashier eventuell aus einer Datei laden, damit bei Änderungen in der Liste
  // das Programm nicht geändert werden muss.
  sl.Add('TT');
  sl.Add('TT / Cutter');
  sl.Add('TT600');
  sl.Add('Laser');
  sl.Add('Primera');
  if (sl.IndexOf(JvComboMaschine2.Text) > -1)
  and (Trim(JvEditRohwareNr.Text) = '') then begin
    Messagedlg('Rohwaren-Nr. eintragen!', mtwarning, [mbok], 0);
    JvEditRohwareNr.SetFocus;
  else begin
    PanelSpeichern.Visible := True;
    JvHTButtonspeichernOK.SetFocus;
  end;
  sl.Free;
end;

Luckner 6. Mär 2016 18:09

AW: If Abfrage mit or und and kombinieren
 
Habe auch Delphi 7 Ent. und es kennt auch kein MatchText. Schade. Dann lasse ich es mit den vielen elseif's.

Danke für die Hilfe

Luckner 6. Mär 2016 18:12

AW: If Abfrage mit or und and kombinieren
 
Hallo nahpets,

ja, mit einer Strinlist, das wäre auch eine Lösung. Besser als die vielen else's.

Sir Rufo 6. Mär 2016 18:42

AW: If Abfrage mit or und and kombinieren
 
So eine
Delphi-Quellcode:
MatchText
Funktion bekommt man scheinbar ausschließlich mit neueren Versionen.

Gut, man könnte sich die programmieren, aber dazu müsste man wohl Programmierer sein :roll:

Mal im Ernst gefragt:

Habt ihr keine eigene Bibliothek wo ihr solche Standard-Routinen/Klassen sammelt? Wenn Nein, warum nicht?

Gerade hier würde sich z.B. die Funktion
Delphi-Quellcode:
IndexText( const s: string; const v: array of string ): Integer
aufdrängen die man dann in
Delphi-Quellcode:
MatchText
verwendet.

Sowas braucht man idR alle Naselang

Und weil es gerade so viel Spaß macht, schiebt man
Delphi-Quellcode:
IndexStr
und
Delphi-Quellcode:
MatchStr
gleich noch hinterher.

Luckner 6. Mär 2016 19:02

AW: If Abfrage mit or und and kombinieren
 
Hallo Sir Rufo,

dazu müsste man Programmieren sein:) und dann die Zeit dazu haben, neben seinen eigenen Routinen auch noch allgemeine zu etwickeln. Aber ich bin auch ehrlich und glaube nicht, dass ich da Was vernüftiges programmieren könnte. Bin schon froh, wenn Andere das können und hier im Forum mal helfen.

Gruß, Luckner

Sir Rufo 6. Mär 2016 19:20

AW: If Abfrage mit or und and kombinieren
 
Zugegeben es gibt da immer schwer und leicht, aber hier geht man einfach durch ein Array vergleicht die Werte mit
Delphi-Quellcode:
CompareText
und gibt den Array-Index oder -1 zurück =>
Delphi-Quellcode:
IndexText
.

Delphi-Quellcode:
MatchText
ist dann einfach
Delphi-Quellcode:
Result := IndexText( s, v ) > -1;

nahpets 7. Mär 2016 08:12

AW: If Abfrage mit or und and kombinieren
 
Unter Delphi 7 gibt es u. a. AnsiMatchText, damit könnte es in etwa so funktionieren:
Delphi-Quellcode:
uses StrUtils;
...
procedure TForm1.irgendwas;
begin
  if AnsiMatchText(JvComboMaschine2.Text,['TT','TT / Cutter','TT600','Laser','Primera'])
  and (Trim(JvEditRohwareNr.Text) = '') then begin
    Messagedlg('Rohwaren-Nr. eintragen!', mtwarning, [mbok], 0);
    JvEditRohwareNr.SetFocus;
  else begin
    PanelSpeichern.Visible := True;
    JvHTButtonspeichernOK.SetFocus;
  end;
end;

Luckner 7. Mär 2016 09:54

AW: If Abfrage mit or und and kombinieren
 
Danke nahpets,

es funktioniert und es läßt sich für die Zukunft gut erweitern.

Gruß, Luckner


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