AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Nutzer zwingen etwas zu wiederholen(mit If)?
Thema durchsuchen
Ansicht
Themen-Optionen

Nutzer zwingen etwas zu wiederholen(mit If)?

Ein Thema von Haxx0r79 · begonnen am 3. Mär 2010 · letzter Beitrag vom 4. Mär 2010
Antwort Antwort
Seite 1 von 2  1 2      
Haxx0r79

Registriert seit: 9. Okt 2009
12 Beiträge
 
#1

Nutzer zwingen etwas zu wiederholen(mit If)?

  Alt 3. Mär 2010, 20:33
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
  Mit Zitat antworten Zitat
Benutzerbild von Jens Hartmann
Jens Hartmann

Registriert seit: 11. Jan 2009
Ort: Wilnsdorf
1.439 Beiträge
 
Delphi XE2 Professional
 
#2

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

  Alt 3. Mär 2010, 20:41
Versuch mal das hier...

if not (key in [#48..#57, #8]) then key := #0 Gruß Jens
Jens Hartmann
Das Leben selber ist zu kurz, also nutze jeden Tag wie er kommt.
  Mit Zitat antworten Zitat
daywalker9

Registriert seit: 1. Jan 2010
Ort: Leer
594 Beiträge
 
Delphi XE3 Professional
 
#3

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

  Alt 3. Mär 2010, 20:42
Schau dir mal

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

until (OK);
an.
Lars
  Mit Zitat antworten Zitat
Haxx0r79

Registriert seit: 9. Okt 2009
12 Beiträge
 
#4

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

  Alt 3. Mär 2010, 20:43
Könntest du mir vielleicht erklären was die Rauten und Zahlen zu bedeuten haben?
ich kenn nur #12 für einen Zeilenumbruch :/
  Mit Zitat antworten Zitat
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#5

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

  Alt 3. Mär 2010, 20:45
Ä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
  Mit Zitat antworten Zitat
Haxx0r79

Registriert seit: 9. Okt 2009
12 Beiträge
 
#6

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

  Alt 3. Mär 2010, 20:45
@Daywalker

Ich will aber nicht, dass der Nutzer einen bestimmten String schreibt, es soll überhaupt was schreiben(also Integer mein ich damit)
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#7

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

  Alt 3. Mär 2010, 21:01
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!' );
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Haxx0r79

Registriert seit: 9. Okt 2009
12 Beiträge
 
#8

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

  Alt 3. Mär 2010, 21:11
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
  Mit Zitat antworten Zitat
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#9

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

  Alt 3. Mär 2010, 21:14
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
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#10

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

  Alt 3. Mär 2010, 21:17
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)
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:56 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz