Entwickler-Ecke

Sonstiges (Delphi) - Prüfen ob Zahl im Wertebereich zwischen 1001 und 1005 liegt


Danny87 - Sa 06.10.07 16:29
Titel: Prüfen ob Zahl im Wertebereich zwischen 1001 und 1005 liegt
Hey Leute,

ich bekam grad ne Frage wie man prüfen kann, ob eine Zahl in einem Edit-Feld in einem gewissen Wertebereich (1001 - 1005) liegt.
Ich wollte natürlich sofort mit meinem schier endlosen Wissen angeben (hatte sowas ja schließlich früher schon mal gemacht) und musste feststellen, dass mein Wissen scheinbar doch endlich ist :(
Ich hab ihm geschrieben, er solle mal

Delphi-Quelltext
1:
if zahl in [1001..1005then ...                    

probieren.
Das funktioniert so allerdings nicht.
Ich würde ja die Suche bemühen, aber die hat mir alles geliefert außer das was ich suche *g*

Wie ging das noch gleich?
Bitte helft mir dabei mein Wissen wieder endlos werden zu lassen ;)



Grüße
Daniel


Gausi - Sa 06.10.07 16:35


Delphi-Quelltext
1:
if (zahl >= 1001and (zahl <= 1005then                    


Oder suchst du was komplizierteres? :gruebel:


Danny87 - Sa 06.10.07 16:38

OH MEIN GOTT!! :shock: :lol: :oops: :autsch:
Peinlich, peinlich....hab ich mal wieder zu verwirrend gedacht^^
Danke xD


Kroko - Sa 06.10.07 16:47

user profile iconGausi hat folgendes geschrieben:

Delphi-Quelltext
1:
if (zahl >= 1001and (zahl <= 1005then                    


Oder suchst du was komplizierteres? :gruebel:


Vielleicht so,

Delphi-Quelltext
1:
  if (Zahl-1000in [1,2,3,4,5then                    
, :D


Lannes - Sa 06.10.07 17:13

Hallo,

dann so:

Delphi-Quelltext
1:
2:
if (Zahl-1000in [1..5then 
  //...

oder so:

Delphi-Quelltext
1:
2:
3:
case Zahl of
  1000..1005 : ShowMessage('im Wertebereich');
  end;


:D


GericasS - Sa 06.10.07 17:15

Hey,

ich danke vielmals dafür das es hier besprochen wurde !

EDIT :



Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
procedure TForm1.Button1Click(Sender: TObject);
begin
if (zahl >= 1001and (zahl <= 1005then 
begin
if edit1.text = '1001' then
begin
panel1.Caption := 'Monitor Fujitsu-Siemens' ;
panel2.Caption := '199,99€' ;
end;
if edit1.Text = '1002' then
begin
panel1.caption := 'Festplatte 250 GB' ;
panel2.caption := '89,50€' ;
end;
if edit1.Text = '1003' then
begin
panel1.caption := 'Motherboard mit CPU' ;
panel2.caption := '155,00€' ;
end;
if edit1.Text = '1004' then
begin
panel1.caption := 'DVD-Combolaufwerk' ;
panel2.Caption := '36,90€' ;
end;
if edit1.Text = '1005' then
begin
panel1.caption := 'PC Tower-Gehäuse' ;
panel2.caption := '44,80€' ;
end;
end;


end.


so wirklich funktionieren tut es noch nicht, wie soll ich die Meldung einbauen wenn die Zahl nicht vorhanden ist ?


jasocul - Sa 06.10.07 18:05

Ausgehend davon, dass Zahl ein Integer ist und den gleichen Wert hat, wie edit1.text:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
procedure TForm1.Button1Click(Sender: TObject);
begin
  if (zahl >= 1001and (zahl <= 1005then 
  begin
    case zahl of
      1001 : begin
        panel1.Caption := 'Monitor Fujitsu-Siemens' ;
        panel2.Caption := '199,99€' ;
      end;
      1002 : begin
        panel1.caption := 'Festplatte 250 GB' ;
        panel2.caption := '89,50€' ;
      end;
      1003 : begin
        panel1.caption := 'Motherboard mit CPU' ;
        panel2.caption := '155,00€' ;
      end;
      1004 : begin
        panel1.caption := 'DVD-Combolaufwerk' ;
        panel2.Caption := '36,90€' ;
      end;
      1005 : begin
        panel1.caption := 'PC Tower-Gehäuse' ;
        panel2.caption := '44,80€' ;
      end
      else
        ShowMessage('Eigentlich ein unmöglicher Fall');
    end;
  end
  else
  begin
    ShowMessage('Falsche Eingabe');
  end;
end.
An Deinen Einrückungen solltest Du arbeiten. :wink:


GericasS - Sa 06.10.07 23:39

Okay,

danke für dem Source werde mich morgen mal melden !


Danny87 - So 07.10.07 04:20

user profile iconGericasS hat folgendes geschrieben:
Okay,

danke für dem Source werde mich morgen mal melden !


Huch^^
da is ja der Fragesteller xD


GericasS - Di 09.10.07 08:07

Hey,

ich hab da doch noch eine Frage, hab das ganze jetzt mal weiter geführt, nur wie geb ich ihm zu verstehen das case ** of für das Edit Feld bestimmt ist bzw. vom edit Feld ausgeht, da "zahl" edit1.text sein soll !


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
procedure TForm1.Button1Click(Sender: TObject);
begin
  if (zahl >= 1001and (zahl <= 1005then
  begin
    case zahl of
      1001 : begin
        panel1.Caption := 'Monitor Fujitsu-Siemens' ;
        panel2.Caption := '199,99€' ;
      end;
      1002 : begin
        panel1.caption := 'Festplatte 250 GB' ;
        panel2.caption := '89,50€' ;
      end;
      1003 : begin
        panel1.caption := 'Motherboard mit CPU' ;
        panel2.caption := '155,00€' ;
      end;
      1004 : begin
        panel1.caption := 'DVD-Combolaufwerk' ;
        panel2.Caption := '36,90€' ;
      end;
      1005 : begin
        panel1.caption := 'PC Tower-Gehäuse' ;
        panel2.caption := '44,80€' ;
      end
      else
        ShowMessage('Eigentlich ein unmöglicher Fall');
    end;
  end
  else
  begin
    ShowMessage('Falsche Eingabe');
  end;
end;
end.


TProgger - Di 09.10.07 08:14

ganz am Anfang:
Zahl := StrToIntDef(Edit1.Text); ?


GericasS - Di 09.10.07 08:20

user profile iconTProgger hat folgendes geschrieben:
ganz am Anfang:
Zahl := StrToIntDef(Edit1.Text); ?


oh peinlich :oops:


GericasS - Di 09.10.07 08:40

Eine weitere Frage stellt sich dann noch für mich , wofür sind diese Zeilen ?


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
 end;
      1005 : begin
        panel1.caption := 'PC Tower-Gehäuse' ;
        panel2.caption := '44,80€' ;
      end
      else
       ShowMessage('Eigentlich ein unmöglicher Fall');
    end;
  end
  else
  begin


wenn das hier unten nocheinmal erscheint !


Delphi-Quelltext
1:
2:
3:
4:
5:
 else
  begin
    ShowMessage('Falsche Eingabe');
  end;
end;


Grüße

GericasS


TProgger - Di 09.10.07 08:43

Edit: Die erste (im case) ShowMessage ist überflüssig, würd ich sagen...


GericasS - Di 09.10.07 08:47

user profile iconTProgger hat folgendes geschrieben:
Edit: Die erste (im case) ShowMessage ist überflüssig, würd ich sagen...


das dachte ich mir nämlich auch, bewirken tun sie im Endeffekt doch beide das gleiche oder ?

Grüße


TProgger - Di 09.10.07 08:55

die im case würde ja nie aufgerufen, die zweite erscheint, wenn die Zahl nicht im Bereich ist.


GericasS - Di 09.10.07 09:01

user profile iconTProgger hat folgendes geschrieben:
die im case würde ja nie aufgerufen, die zweite erscheint, wenn die Zahl nicht im Bereich ist.


ja stimmt, dann mach ich die mal raus !


jasocul - Di 09.10.07 09:07

Ich habe mich schon gefragt, wann Dir das auffällt. :mrgreen:
Deswegen hatte ich ja schon geschrieben, dass das ein unmöglicher Fall ist.

Du kannst auch einfach diesen Teil rausschmeissen:

Delphi-Quelltext
1:
  if (zahl >= 1001and (zahl <= 1005then                    

inklusive dem passenden else. Das hat den Vorteil, dass Du bei einem veränderten Zahlen-Bereich nur das Case anpassen musst. Dafür muss natürlich das else für das case erhalten bleiben.


GericasS - Di 09.10.07 09:10

user profile iconjasocul hat folgendes geschrieben:
Ich habe mich schon gefragt, wann Dir das auffällt. :mrgreen:
Deswegen hatte ich ja schon geschrieben, dass das ein unmöglicher Fall ist.


Hey,

danke das du es noch auflöst :lol: aber ich hatte erst heute morgen so wirlich Zeit mir den Source mal anzuschauen.

Zitat:
inklusive dem passenden else. Das hat den Vorteil, dass Du bei einem veränderten Zahlen-Bereich nur das Case anpassen musst. Dafür muss natürlich das else für das case erhalten bleiben.


Danke :D

Grüße


Lannes - Di 09.10.07 09:13

Hallo,

und damit es übersichtlich wird noch die Panelbeschriftung in eine Prozedur auslagern:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
procedure TForm1.SetPanelCaption(sArtikel,sPreis: String);  
begin
  Panel1.Caption := sArtikel;  
  Panel2.Caption := sPreis;
end;

procedure TForm1.Button1Click(Sender: TObject);  
begin
    case zahl of  
      1001 : SetPanelCaption('Monitor Fujitsu-Siemens','199,99€');
      1002 : SetPanelCaption('Festplatte 250 GB','89,50€');
      //...  
      else ShowMessage('Falsche Eingabe');  
    end;
end;


GericasS - Di 09.10.07 09:32

Hey,

hat das noch einen tieferen Sinn außer, das es übersichtlicher wird ?
Also mir kommt es vor als wäre dann das hinzufügen von weiteren Artikeln einfach zu schreiben. Anyway danke dir für den Tipp werds gleich versuchen !

Grüße


Kroko - Di 09.10.07 10:59


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
procedure TframeLauf.TestClick(Sender: TObject);
const
  coArtikel: array[1001..1002of array[0..1of String
           = (('Monitor Fujitsu-Siemens','199,99€'),
              ('Festplatte 250 GB','89,50€')
             );
var
  Zahl: Integer;
begin
 Zahl := 1001;
  if (Zahl>=Low(coArtikel)) and (Zahl<=High(coArtikel)) then
    begin
      Panel1.Caption := coArtikel[Zahl,0];
      Panel2.Caption := coArtikel[Zahl,1];
    end
  else ShowMessage('Falsche Eingabe');
end;

so spart man noch eine Procedure und das Erweitern wird noch einfacher!


Gausi - Di 09.10.07 11:04

Das ist mal wieder so ein Optimierungs-Thread, was? Eine ganz triviale Frage, und zwei Seiten Diskussion. :lol:

Los jetzt - ich will noch ne Assembler-Variante sehen!


GericasS - Di 09.10.07 11:39

Oh,

ich danke ja schon recht herzlich für die ganzen Optimierungen aber ich kann das doch alles noch gar nicht anwenden xD ^^