![]() |
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:
Aber der Code ist nicht so machbar.
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; Den Code wollte ich dann in alle 3 EditXChange einfügen, damit es klappt. Natürlich gibts auch folgendes:
Delphi-Quellcode:
... oder so ähnlich damits klappt.
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 ... Aber so ne Funktion wie 'Wenn A=D und B=D und C=D dann' währe am einfachsten. |
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:
2. direkt prüfen (wie du es in deinem post getan hast):
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;
Delphi-Quellcode:
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).
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; ps: wäre schreibt man ohne h. |
Re: Das 'IF AND IF THEN'-Ding
Zitat:
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]
|
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:
Grüße vom marabu
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; |
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 23:49 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