AGB  ·  Datenschutz  ·  Impressum  







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

Das 'IF AND IF THEN'-Ding

Ein Thema von Amnon82 · begonnen am 6. Feb 2006 · letzter Beitrag vom 8. Feb 2006
Antwort Antwort
Benutzerbild von Amnon82
Amnon82

Registriert seit: 5. Jan 2005
186 Beiträge
 
FreePascal / Lazarus
 
#1

Das 'IF AND IF THEN'-Ding

  Alt 6. Feb 2006, 22:58
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.
  Mit Zitat antworten Zitat
Benutzerbild von dahead
dahead

Registriert seit: 16. Mai 2005
620 Beiträge
 
#2

Re: Das 'IF AND IF THEN'-Ding

  Alt 6. Feb 2006, 23:13
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.
  Mit Zitat antworten Zitat
Benutzerbild von Flocke
Flocke

Registriert seit: 9. Jun 2005
Ort: Unna
1.172 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#3

Re: Das 'IF AND IF THEN'-Ding

  Alt 7. Feb 2006, 07:15
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]
Volker
Besucht meine Garage
Aktuell: RtfLabel 1.3d, PrintToFile 1.4
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#4

Re: Das 'IF AND IF THEN'-Ding

  Alt 7. Feb 2006, 09:12
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
  Mit Zitat antworten Zitat
Benutzerbild von Amnon82
Amnon82

Registriert seit: 5. Jan 2005
186 Beiträge
 
FreePascal / Lazarus
 
#5

Re: Das 'IF AND IF THEN'-Ding

  Alt 8. Feb 2006, 21:14
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.
  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 15:40 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