Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Das 'IF AND IF THEN'-Ding (https://www.delphipraxis.net/62584-das-if-if-then-ding.html)

Amnon82 6. Feb 2006 22:58


Das 'IF AND IF THEN'-Ding
 
Also ich hab folgendes Problem:

Ich hab 3 Edits und 3 Knöpfe. Ich möchte gerne folgendes erreichen.

Es soll in allen 3 Edits der String ':\' erscheinen erst dann sollen die 3 Knöpfe enabled sein.
Sprich wenn eine Edit ':\' nicht enthält sollen sie disabled sein.

Ich dachte an:

Delphi-Quellcode:
if pos(':\', Edit1.text) > 0 and if pos(':\', Edit2.text) > 0 and if pos(':\', Edit3.text) > 0
then
begin
Button1.enabled:=true;
Button2.enabled:=true;
Button3.enabled:=true;
end
else
Button1.enabled:=false;
Button2.enabled:=false;
Button3.enabled:=false;
end;
Aber der Code ist nicht so machbar.

Den Code wollte ich dann in alle 3 EditXChange einfügen, damit es klappt.

Natürlich gibts auch folgendes:

Delphi-Quellcode:
if pos(':\', Edit1.text) > 0 then if pos(':\', Edit2.text) > 0 then if pos(':\', Edit3.text) > 0 then
...
if pos(':\', Edit2.text) > 0 then if pos(':\', Edit3.text) > 0 then if pos(':\', Edit1.text) > 0 then
...
if pos(':\', Edit3.text) > 0 then if pos(':\', Edit1.text) > 0 then if pos(':\', Edit2.text) > 0 then
...
... oder so ähnlich damits klappt.

Aber so ne Funktion wie 'Wenn A=D und B=D und C=D dann' währe am einfachsten.

dahead 6. Feb 2006 23:13

Re: Das 'IF AND IF THEN'-Ding
 
da gibt es egtl. mehrere möglichkeiten.

1. funktion schreiben, die das für einen erledigt.

Delphi-Quellcode:
function CheckForDriveString(const aString: String): Boolean;
begin
  Result := Pos(':\', aString) > 0;
end;

procedure xxx;
var
  AllOK: Boolean;
begin
  AllOK := CheckForDriveString(Edit1.Text) and CheckForDriveString(Edit2.Text) and CheckForDriveString(Edit3.Text);
  Button1.Enabled := AllOK;
  Button2.Enabled := AllOK;
  Button3.Enabled := AllOK;
end;
2. direkt prüfen (wie du es in deinem post getan hast):

Delphi-Quellcode:
procedure xxx;
var
  AllOK: Boolean;
begin
  AllOK := (pos(':\', Edit1.text) > 0) and (pos(':\', Edit2.text) > 0) and (pos(':\', Edit3.text) > 0);
  Button1.enabled := AllOK;
  Button2.enabled := AllOK;
  Button3.enabled := AllOK;
end;
den obigen code einmal unter Edit1OnChange eintragen. In den anderen Edits dann einfach die selbe OnChange Prozedur verwenden (also im Objektinspektor unter der Reiterseite Events/Ereignisse im Feld "OnChange" dieses auswählen).

ps: wäre schreibt man ohne h.

Flocke 7. Feb 2006 07:15

Re: Das 'IF AND IF THEN'-Ding
 
Zitat:

Zitat von Amnon82
Ich dachte an:

Delphi-Quellcode:
if pos(':\', Edit1.text) > 0 and if pos(':\', Edit2.text) > 0 and if pos(':\', Edit3.text) > 0
then
begin
Button1.enabled:=true;
Button2.enabled:=true;
Button3.enabled:=true;
end
else
Button1.enabled:=false;
Button2.enabled:=false;
Button3.enabled:=false;
end;
...

Aber so ne Funktion wie 'Wenn A=D und B=D und C=D dann' währe am einfachsten.

Dahead hat die Lösung ja schon geschrieben, ich wollte dich aber noch einmal genau auf deinen (Denk-)Fehler hinweisen:

Natürlich geht es so wie du in deinem letzten Satz schreibst, du musst nur einfach "and" statt "and if" benutzen. Außerdem sollten die Operatoren von "and" oder "or" geklammert werden, da Delphi dafür eine etwas andere Operatorpräzedenz benutzt als andere Programmiersprachen.

Also:
Code:
[b]if[/b] [color=red]([/color]pos(':\', Edit1.text) > 0[color=red])[/color] [b]and[/b] [s][b]if[/b][/s] [color=red]([/color]pos(':\', Edit2.text) > 0[color=red])[/color] [b]and[/b] [s][b]if[/b][/s] [color=red]([/color]pos(':\', Edit3.text) > 0[color=red])[/color]

marabu 7. Feb 2006 09:12

Re: Das 'IF AND IF THEN'-Ding
 
Abgesehen vom syntaktischen sehe ich noch ein funktionelles Problem. Wenn auf einen absoluten Pfad inklusive Laufwerk geprüft werden soll, dann besser so:

Delphi-Quellcode:
uses
  SysUtils // ExtractFileDrive(), PathDelim
;

function CheckAbsoluteDrivePath(fn: TFileName): Boolean;
var
  drive: String;
begin
  drive := ExtractFileDrive(fn);
  Delete(fn, 1, Length(drive));
  Result := (drive <> '') and (Copy(fn, 1, 1) = PathDelim);
end;
Grüße vom marabu

Amnon82 8. Feb 2006 21:14

Re: Das 'IF AND IF THEN'-Ding
 
Danke an alle.

Sie schon gesagt es sollte nur überprüft werden, ob ':\' in der Edit steht oder nicht und die Knöpfe erst dann freischalten.
Ich hab bis jetzt so ein 'if then'-Dingsbums im Programm das mir manchmal Probleme bereitet.

Ich hatte einfach 'if and and then' nicht ausprobiert, da ich zur Zeit fast nicht am PC bin. Euere Codes erleichern mir vieles und mein Programm wird cleaner und professioneller in hinsicht des Codes.


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