![]() |
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) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:05 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