Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Nutzer zwingen etwas zu wiederholen(mit If)? (https://www.delphipraxis.net/148534-nutzer-zwingen-etwas-zu-wiederholen-mit-if.html)

Haxx0r79 3. Mär 2010 20:33


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:
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;
Er meckert auch, das GrX und GrY keine Integerzahlen sind und bricht das ganze Programm ab.


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

Jens Hartmann 3. Mär 2010 20:41

Re: Nutzer zwingen etwas zu wiederholen(mit If)?
 
Versuch mal das hier...

Delphi-Quellcode:
if not (key in [#48..#57, #8]) then key := #0
Gruß Jens

daywalker9 3. Mär 2010 20:42

Re: Nutzer zwingen etwas zu wiederholen(mit If)?
 
Schau dir mal

Delphi-Quellcode:
repeat
   
   OK := meinString = 'ABC';
   //... weitere anweisungen

until (OK);
an.

Haxx0r79 3. Mär 2010 20:43

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 :/

Matze 3. Mär 2010 20:45

Re: Nutzer zwingen etwas zu wiederholen(mit If)?
 
Ähnlich, wie ich es dir hier geschrieben habe. Mit TryStrToInt kannst du z.B. ungültige Eingaben prüfen oder auch so:

Delphi-Quellcode:
try
  i := StrToInt(Edit1.Text);
except
  // kein Integer
end;
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.

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

Haxx0r79 3. Mär 2010 20:45

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)

Sir Rufo 3. Mär 2010 21:01

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 Delphi-Referenz durchsuchenStrToIntDef
- 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!' );

Haxx0r79 3. Mär 2010 21:11

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:
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}
Aber das ist ja hier unwichtig, jpeg hab ich deklariert unter uses

Matze 3. Mär 2010 21:14

Re: Nutzer zwingen etwas zu wiederholen(mit If)?
 
Zitat:

Zitat von Haxx0r79
Nur eine Frage: Was bedeutet die 0 in der Klammer also hier

if
( StrToIntDef( GrX.Text, 0 ) > 0 ) and
( StrToIntDef( GrY.Text, 0 ) > 0 )

Kennst du F1? Kennst du die Delphi-Reference?

Das sind 2 wichtige Werkzeuge: Delphi-Referenz durchsuchenStrToIntDef -> StrToIntDef

Sir Rufo 3. Mär 2010 21:17

Re: Nutzer zwingen etwas zu wiederholen(mit If)?
 
Zitat:

Zitat von Haxx0r79
Nur eine Frage: Was bedeutet die 0 in der Klammer also hier

Delphi-Quellcode:
if
    ( StrToIntDef( GrX.Text, 0 ) > 0 ) and
    ( StrToIntDef( GrY.Text, 0 ) > 0 )

Wenn du nicht nur kopieren sondern auch lesen würdest, dann wüsstest du das jetzt schon.
Also klick er mal hier auf den Links rechts von diesem Text da ->>> Delphi-Referenz durchsuchenStrToIntDef <<<- nein zurück
(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.
Seite 1 von 2  1 2      

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