![]() |
If Then Problem
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo
Habe ein Problem ich bin gerade (immer noch) beim Löschprogramm, und das "then begin" stellt mir ein unerklährliches Problem in den weg. siehe Screenshot (Fotomontage, merkt man an der uhr ;) ) sry, es bezieht sich aber nicht darauf dass ich zwei Mal
Delphi-Quellcode:
geschrieben habe
if edit1.text:='' and edit1.text:=''
|
Re: If Then Problem
Zitat:
Delphi-Quellcode:
if (edit1.text = '') and (edit1.text = '') then ...
:zwinker: |
Re: If Then Problem
Da sind gleich zwei (eigentlich drei oder vier oder fünf) Fehler drin versteckt.
a) es heisst nicht if a := 3 then ... sondern if a = 3 then <Doppelpunkt><Gleich> ist eine Zuweisung <Gleich> ist ein Vergleich. b) wenn mehrere Konditionen angegeben werden mit AND oder OR, dann muss jede Kondition geklammert werden if (a = 3) and (b = 4) then ... c) Und ein Style-Guide Fehler ist auch noch dabei. - das then gehört in die gleiche Zeile wie das if - das begin kommt in eine neue Zeile und wird eingerückt. d) Man prüft nie eine boolsche Variable auf True ab. Anstelle von if XY.Checked = True then ... schreibt man if XY.Checked then ... e) Wenn Dich der Rückgabewert der Funktion DeleteFile nicht interessiert, dann lass das if komplett weg. |
Re: If Then Problem
Liste der Anhänge anzeigen (Anzahl: 1)
gut danke ihr beiden
habe jetzt nur noch ein Problem mit einer Fehlermeldung die ich ausblenden will. @RavenIV: Wie meinst du das mit dem Rückgabewert (e) |
Re: If Then Problem
Zitat:
|
Re: If Then Problem
Guten Abend,
alles in try -except einpacken.
Delphi-Quellcode:
Grüße
try
deleteFile(...) except on E:Exception do begin end; end; Klaus |
Re: If Then Problem
DeleteFile ist eine API-Funktion, sie wirft keine Exception. Die müsste man schon selber werfen.
|
Re: If Then Problem
:gruebel: :gruebel: ich stehe auf der Leitung, wie soll man es werfen??
mit dem Weglassen funktioniert es auch nicht, das heißt er zeigt die Meldung immer noch an |
Re: If Then Problem
Zitat:
/EDIT: RaiseLastOSError anscheinend nicht in allen Delphi Versionen! |
Re: If Then Problem
Ich sehe gerade, die Fehlermeldung ist gar nicht von dir. Ich nehme mal an sie kommt von Windows (Wenn du ein englisches Windows hast.) Um was für Dateien handelt es sich? Hast du die nötigen Rechte? Existieren die Dateien?
PS: Man kann den Code auch hier reinkopieren und mit Delphi-Tags sogar mit Code-Hervorhebung. :zwinker: |
Re: If Then Problem
ja ich habe ein englisches Betriebssystem, aber was hat das damit zu tun?
ich weiß, dass ich den Code auch hineinkopieren kann, habe es aber als screenshot eingefügt, damit man weiß, welcher Fehler auftaucht. hier
Delphi-Quellcode:
unit loeschprogramm;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ToolWin, ComCtrls, Menus; type TForm1 = class(TForm) Button1: TButton; Button2: TButton; Edit1: TEdit; Button3: TButton; Label1: TLabel; Edit2: TEdit; CheckBox1: TCheckBox; CheckBox2: TCheckBox; procedure CheckBox2Click(Sender: TObject); procedure CheckBox1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure Button1Click(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; implementation {$R *.dfm} uses ShellAPI; function DeleteFile(const AFile: string): boolean; var sh: SHFileOpStruct; begin ZeroMemory(@sh, sizeof(sh)); with sh do begin Wnd := Application.Handle; wFunc := fo_Delete; pFrom := PChar(AFile +#0); fFlags := fof_Silent or fof_NoConfirmation; end; result := SHFileOperation(sh) = 0; end; procedure TForm1.Button1Click(Sender: TObject); begin if (checkbox1.checked) and (checkbox2.checked) then begin deletefile(edit1.text) ; deletefile(edit2.text) ; end else if checkbox1.Checked then begin deletefile(edit1.text) ; end else if checkbox2.checked then begin deletefile(edit2.text) ; end; if (edit1.enabled=true) and (edit1.text='') then begin Showmessage('Gib bitte einen Pfad an!'); end; if (edit2.Enabled=true) and (edit2.text='') then begin showmessage('Gib bitte einen Pfad an!'); end; end; procedure TForm1.Button2Click(Sender: TObject); begin close end; procedure TForm1.CheckBox1Click(Sender: TObject); begin if checkbox1.checked then edit1.enabled:=true else edit1.enabled:=false; end; procedure TForm1.CheckBox2Click(Sender: TObject); begin if checkbox2.checked then edit2.enabled:=true else edit2.enabled:=false; end; end. |
Re: If Then Problem
Hi,
also mal aufgeräumt: checkbox2 ist angemarkert, aber in edit2 steht nix drin. Daraus folgt es wird ein deletefile mit eimen leeren string als Filename versucht. Jetzt soll die Fehlermeldung unterdrückt werden ? :wiejetzt: Es wäre ja wohl sinnvoller stattdessen zu prüfen, ob gültige Eingabedaten vorliegen, also ob der Dateiname nicht leer ist und ob die Datei existiert. Gruss [Edit] und noch was: es handelt sich hierbei sicherlich nicht um ein IfThen Problem [/Edit] |
Re: If Then Problem
Zitat:
du hast schon recht, dass das nicht mehr zum "if then Problem" gehört, aber es ist finde ich zu wenig um einen neuen Thread auzumachen ;) |
Re: If Then Problem
Delphi-Quellcode:
function DeleteFile(const AFile: string): boolean;
var sh: SHFileOpStruct; begin Result := FileExists(AFile); if Result then begin ZeroMemory(@sh, sizeof(sh)); with sh do begin Wnd := Application.Handle; wFunc := fo_Delete; pFrom := PChar(AFile +#0); fFlags := fof_Silent or fof_NoConfirmation; end; result := SHFileOperation(sh) = 0; end; end;
Delphi-Quellcode:
procedure TForm1.CheckBox1Click(Sender: TObject);
begin edit1.enabled := checkbox1.checked; end; Zitat:
|
Re: If Then Problem
super, jetzt zeigt er die Fehlermeldung nicht mehr an.
Delphi-Quellcode:
das ist eigentlich nur eine kürzere Version aber danke.
edit1.enabled := checkbox1.checked;
stimmt, an der Abfrage muss ich noch arbeiten aber sonnst funktioniert es :firejump: |
Re: If Then Problem
hi, es genügt doch:
Delphi-Quellcode:
if checkbox1.Checked then deletefile(edit1.text) ;
if checkbox2.checked then deletefile(edit2.text) ; |
Re: If Then Problem
Ja eben, deshalb hatte ich nach dem Sinn gefragt ;)
|
Re: If Then Problem
:wall: :wall: :wall: :wall: :wall:
sooo nahh und doch so fern (die programmierung eines einfachen Delphiprogramms mit einfachen Methoden) :wall: :wall: :wall: :wall: :wall: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:34 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