![]() |
Nutzer zwingen etwas zu wiederholen(mit If)?
Hey Leute, ich steh vor dem Problem:
Ich hab ein Bildverkleinerungsprogramm gemacht. Ich habs soweit geschafft einen OpenDialog einzubauen. Doch nun möchte ich, wenn der Nutzer nichts in die 2 EditBoxen eingibt(die die neuen X und Y Größen der Bilder haben sollen), er so oft gezwungen wird etwas einzugeben, bis es eine Zahl ist. Mein Code sieht bisher so aus:
Delphi-Quellcode:
Er meckert auch, das GrX und GrY keine Integerzahlen sind und bricht das ganze Programm ab.
var
TempJPeg: TJPegImage; TempBitmap: TBitmap; x,y:string; begin TempJPeg:=TJPegImage.Create; If OpenPictureDialog1.Execute then x:= OpenPictureDialog1.Filename; TempJPeg.LoadFromFile(x); TempBitmap:=TBitmap.Create; TempBitmap.PixelFormat:=pf24Bit; TempBitmap.Width :=StrToInt(GrX.Text); TempBitmap.Height :=StrToInt(GrY.Text); If (GrX.Text='') and (GrY.Text='') then ShowMessage('Gibt etwas ein.'); TempBitmap.Canvas.StretchDraw(Rect(0,0,TempBitmap.Width,TempBitmap.Height),TempJPeg); TempJPeg.Assign(TempBitmap); If SaveDialog1.Execute then y:=SaveDialog1.Filename; TempJPeg.SaveToFile(y); Showmessage('Ihr Bild wurde gespeichert!'); TempBitmap.Free; TempJPeg.Free; Wie könnt ich das beheben und den Nutzer zwingen die Eingabe zu wiederholen, bis er was eingibt? Freue mich auf Hilfe!! Mfg P.s. bin ein Delphi Anfänger |
Re: Nutzer zwingen etwas zu wiederholen(mit If)?
Versuch mal das hier...
Delphi-Quellcode:
Gruß Jens
if not (key in [#48..#57, #8]) then key := #0
|
Re: Nutzer zwingen etwas zu wiederholen(mit If)?
Schau dir mal
Delphi-Quellcode:
an.
repeat
OK := meinString = 'ABC'; //... weitere anweisungen until (OK); |
Re: Nutzer zwingen etwas zu wiederholen(mit If)?
Könntest du mir vielleicht erklären was die Rauten und Zahlen zu bedeuten haben?
ich kenn nur #12 für einen Zeilenumbruch :/ |
Re: Nutzer zwingen etwas zu wiederholen(mit If)?
Ähnlich, wie ich es dir
![]()
Delphi-Quellcode:
Wenn du die Exe aus Delphi startest, kann es sein, dass dir dennoch ein Fehler angezeigt wird. In den Debugger-Optionen kannst du das jedoch abstellen oder die Exe aus dem Explorer starten.
try
i := StrToInt(Edit1.Text); except // kein Integer end; Jens' Lösung ist ok, berücksichtigt aber keine Eingaben, die per Copy&Paste eingefügt werden. Sein Code gehört übrigens ins OnKeyPress-Ereignis. Grüße, Matze Edit: Ein Zeilenumbruch (+ Zeilenvorschub) wäre #13#10 und nicht #12. Das sind alles ASCII-Codes. Jedes ASCII-Zeichen hat einen. Backspace ist #8, die Ziffern 0 - 9 liegen auf #48 bis #57 |
Re: Nutzer zwingen etwas zu wiederholen(mit If)?
@Daywalker
Ich will aber nicht, dass der Nutzer einen bestimmten String schreibt, es soll überhaupt was schreiben(also Integer mein ich damit) |
Re: Nutzer zwingen etwas zu wiederholen(mit If)?
Da du uns nur ein Fragment von deinem Code gibst, kann ich auch nur versuchen in deinem Code-Fragment etwas zu ändern.
Heißt also, meine Antwort kann durchaus nicht vollständig sein. Ich setze jetzt mal voraus, dass der Benutzer Zahlen eingeben soll, die > 0 sind. - Neu benutzte Befehle ![]() - try .. finally für Object-Instanzen gesetzt - überflüssige Variablen entfernt - Öffnen und speichern erfolgt nur, wenn der Benutzer auch eine Datei auswählt!
Delphi-Quellcode:
var
TempJPeg: TJPegImage; TempBitmap: TBitmap; begin // Wir prüfen ob die Eingaben akzeptiert werden können if ( StrToIntDef( GrX.Text, 0 ) > 0 ) and ( StrToIntDef( GrY.Text, 0 ) > 0 ) then begin TempJPeg := TJPegImage.Create; try If OpenPictureDialog1.Execute then begin TempJPeg.LoadFromFile( OpenPictureDialog1.Filename ); TempBitmap := TBitmap.Create; try TempBitmap.PixelFormat := pf24Bit; TempBitmap.Width := StrToInt( GrX.Text ); TempBitmap.Height := StrToInt( GrY.Text ); TempBitmap.Canvas.StretchDraw( Rect( 0, 0, TempBitmap.Width, TempBitmap.Height ), TempJPeg ); TempJPeg.Assign( TempBitmap ); If SaveDialog1.Execute then begin TempJPeg.SaveToFile( SaveDialog1.Filename ); Showmessage( 'Ihr Bild wurde gespeichert!' ); end; finally TempBitmap.Free; end; end; finally TempJPeg.Free; end; end else ShowMessage( 'Die Eingaben für X und Y sind ungültig!' ); |
Re: Nutzer zwingen etwas zu wiederholen(mit If)?
Vielen Sir Rufo!!!
Habs auch verstanden durch die Beitrage der anderen! Dadurch, dass x und y keine Zahlen über 0 sind werden sie nicht aktzeptiert und der Nutzer muss die Eingabe nochmal machen.Oder? Vielen dank an die anderen:) Nur eine Frage: Was bedeutet die 0 in der Klammer also hier if ( StrToIntDef( GrX.Text, 0 ) > 0 ) and ( StrToIntDef( GrY.Text, 0 ) > 0 ) Edit: Mehr Quelltext als den hab ich net, nur noch
Delphi-Quellcode:
Aber das ist ja hier unwichtig, jpeg hab ich deklariert unter uses
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, JPeg, ExtCtrls, Menus, ExtDlgs; type TForm1 = class(TForm) VerkleinernBtn: TButton; GroupBox1: TGroupBox; GrX: TLabeledEdit; GrY: TLabeledEdit; Label1: TLabel; OpenPictureDialog1: TOpenPictureDialog; SaveDialog1: TSaveDialog; procedure VerkleinernBtnClick(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; implementation {$R *.dfm} |
Re: Nutzer zwingen etwas zu wiederholen(mit If)?
Zitat:
![]() Das sind 2 wichtige Werkzeuge: ![]() ![]() |
Re: Nutzer zwingen etwas zu wiederholen(mit If)?
Zitat:
Also klick er mal hier auf den Links rechts von diesem Text da ->>> ![]() (und wenn die Seite mit dem Link auftaucht, dann ist da eine deutsche Flagge, die anklicken und es wird in deutsch erklärt) |
Re: Nutzer zwingen etwas zu wiederholen(mit If)?
Laut der Wiki ist das die Standart Zahl, wenn die Zahl eine falsche Eingabe war, oder liege ich da falsch?
Ich versteh immernoch net so ganz wofür die 0 in der ersten Klammer ist:/ |
Re: Nutzer zwingen etwas zu wiederholen(mit If)?
Zitat:
|
Re: Nutzer zwingen etwas zu wiederholen(mit If)?
Okey vielen Dank, den Fehler kannste behalten ;)
Der Fred kann geschlossen werden! Frage 101% beantwortet! |
Alle Zeitangaben in WEZ +1. Es ist jetzt 18: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