Entwickler-Ecke

Sonstiges (Delphi) - IF-then funktioniert nicht


Fluffy19 - Mi 29.10.08 17:29
Titel: IF-then funktioniert nicht
Hi!

Ich wollte, um ein paar Noobs zu verarschen (nichts gegen Noobs, bin selbst ein Noob was Delphi angeht!) ein kleines Programm schreiben.
Wir haben in der Schule jetzt mit Delphi angefangen und deshlab habe ich noch nicht soviel Ahnung!

Also folgender Quellcode:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
procedure TForm1.Button1Click(Sender: TObject);
begin
Button1.Caption := 'Bitte warten!';
if Edit1 <0 then  Canvas.Textout(Form1.Width div 3,Form1.height div 4,'geben Sie eine IP Adresse ein!')
else
Canvas.Textout(Form1.Width div 3,Form1.height div 4,'Verbindung wird aufgebaut...');
Sleep(1 * 1000);
Canvas.Textout(Form1.Width div 4,Form1.height div 2,'Fehler: Die Verbindung wurde durch eine Firewall geblockt!');

end;

Wenn in Edit1 nichts eingetragen ist soll die Meldung geben sie eine Ip Adresse ein! angezeigt werden.
STeht in Edit 1 jedoch etwas soll die Fehlermeldung Verbindung geblockt kommen.

Es wäre nett wenn jemand einem Anfänger auf die Sprünge helfen könnte!

Fluffy

Moderiert von user profile iconChristian S.: Delphi-Tags hinzugefügt


Apollo - Mi 29.10.08 17:35

:welcome: im Forum!!

Würde ich so machen:

Delphi-Quelltext
1:
2:
3:
4:
5:
If edit1.text = '' then
Showmessage('geben sie eine Ip Adresse ein')
else
Sleep(1 * 1000); 
Showmessage('Verbindung geblockt');


habs nicht getestet müsste aber funtzen

Tipp: Stelle den code in Delphi-Tags, erhöht die lesbarkeit :wink:


Delete - Mi 29.10.08 17:36

Du schreibst alles direkt hintereinander, d.h. es sieht im laufenden Programm so aus, als würde alles gleichzeitig ausgeführt werden (stimmt ja auch beinahe). Und if Edit1 <0 macht keinen Sinn, wenn, dann z.B. mit if Length(Edit1.Text) = 0


Fluffy19 - Mi 29.10.08 17:37

danke!

funktioniert!


Delete - Mi 29.10.08 17:39

Du musst prüfen wie viele Zeichen im Edit stehen.Das geht mit length() :P

Edit: Das kommt davon wenn man mal kurz au Klo geht: 4 Minuten zu spät!


Apollo - Mi 29.10.08 17:48

Warum machst du es eigendlich mit TCanvas? Nim doch einfach label1.caption:= 'Dein Text'. Kann man dann besser positionieren und ist auch generel geläufiger als Buchstaben zu zeichnen :mrgreen:


Fluffy19 - Mi 29.10.08 17:53

gibt es die möglichkeit nach then Showmessage('Geben sie eine Ip Adresse ein!')
noch ein Close einzufügen obwohl danach elso kommt?


Delete - Mi 29.10.08 17:56


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
if Bedingung then
  begin
    MachWas;
    MachNochwas;
  end
else
  begin
    MachWasAnderes;
    MachNochwasAnderes;
  end;


Delete - Mi 29.10.08 18:00

@Apollo: Ich finde das durchaus nützlich.Man kann mit einem sachten Form1.repaint alles wieder wegbekommen.Mit nem Label geht das nicht.Dafür
bietet das Label aber andere Vorteile. 8)


Fluffy19 - Mi 29.10.08 18:01

if Bedingung then
begin
MachWas;
MachNochwas;

Machnochwas geht leider nicht -> ohne end -> ; nicht erlaubt vor else

mit end-> ; erwartet aber else gefunden ->Abbruch


Delete - Mi 29.10.08 18:02

Zeig mal Deinen Code.


Fluffy19 - Mi 29.10.08 18:05


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
procedure TForm1.Button1Click(Sender: TObject);
begin
Button1.Caption := 'Bitte warten!';
If edit1.text = 'Ip Adresse eingeben' then
Showmessage('Geben sie eine Ip Adresse ein!');
close;
end
else
begin
label2.caption:= 'Verbindung wird hergestellt...';
Sleep(21000);
Canvas.Textout(Form1.Width div 4,Form1.height div 2,'Fehler: Die Verbindung wurde durch eine Firewall geblockt!');

end;


Delete - Mi 29.10.08 18:07

Da fehlt das begin nach dem ersten then.

Edit: Versuche mal deinen Code zu strukturieren.

So:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
begin
  if ich.hunger < 0 then ich.goto(Kuehlschrank) 
  else 
   begin
    ich.siton(stuhl);
    ich.play_or_programming;
   end;
end;


€:Am Ende fehlt auch noch ein end!


Marc. - Mi 29.10.08 18:07

user profile iconFluffy19 hat folgendes geschrieben Zum zitierten Posting springen:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
procedure TForm1.Button1Click(Sender: TObject);
begin
Button1.Caption := 'Bitte warten!';

If edit1.text = 'Ip Adresse eingeben' then
begin
   Showmessage('Geben sie eine Ip Adresse ein!');
   close;
 end
 else
 begin
    label2.caption:= 'Verbindung wird hergestellt...';
    Sleep(21000);
    Canvas.Textout(Form1.Width div 4,Form1.height div 2,'Fehler: Die Verbindung wurde durch eine Firewall geblockt!');
 end;
end;

Da fehlt ein Begin und ein End;

€: Komplett eingerückte Version einen Post unter diesem.


Delete - Mi 29.10.08 18:07


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
procedure TForm1.Button1Click(Sender: TObject);
begin
  Button1.Caption := 'Bitte warten!';
  If edit1.text = 'Ip Adresse eingeben' then
    begin //<-- fehlte
      Showmessage('Geben sie eine Ip Adresse ein!');
      close;
    end
  else
    begin
      label2.caption:= 'Verbindung wird hergestellt...';
      Sleep(21000);
      Canvas.Textout(Form1.Width div 4,Form1.height div 2,'Fehler: Die Verbindung wurde durch eine Firewall geblockt!');
    end; //<-- fehlte auch
end;


[edit] Gewöhn Dir am besten sofort eine anständige Einrückung an, dann sieht man so etwas gleich auf den ersten Blick [/edit]


Fluffy19 - Mi 29.10.08 18:12

Jetzt geht alles wie ichs gern hätte!
Einrückung werd ich mir angewöhnen ;-)

Ich bin echt erstaunt, dass man hier so schnell Antworten bekommt!
In anderen Foren wartet man Tage...


Delete - Mi 29.10.08 18:14

user profile iconFluffy19 hat folgendes geschrieben Zum zitierten Posting springen:

Ich bin echt erstaunt, dass man hier so schnell Antworten bekommt!
In anderen Foren wartet man Tage...


Delphi-Forum eben. :D Schön ,dass es dir bei uns gefällt! :beer:


Apollo - Mi 29.10.08 18:15

user profile iconj.klugmann hat folgendes geschrieben Zum zitierten Posting springen:
@Apollo: Ich finde das durchaus nützlich.Man kann mit einem sachten Form1.repaint alles wieder wegbekommen.Mit nem Label geht das nicht.Dafür
bietet das Label aber andere Vorteile. 8)


Klar geht das: Label1.caption:= ''. Ist zwar noch da aber trotzdem sieht man nichs.


Marc. - Mi 29.10.08 18:15

Zum Thema Einrücken: Schau Dir diesbezüglich mal das Tool DelForExp [http://www.aew.wur.nl/UK/Delforexp/] an.
Damit kann jedenfalls nichts mehr schief gehen. :zwinker:


Delete - Mi 29.10.08 18:18

user profile iconMarc. hat folgendes geschrieben Zum zitierten Posting springen:
Zum Thema Einrücken: Schau Dir diesbezüglich mal das Tool DelForExp [http://www.aew.wur.nl/UK/Delforexp/] an.
Damit kann jedenfalls nichts mehr schief gehen. :zwinker:

Geniales Ding!Das wird mein neuer Standart-Post sein , für Leute die nicht einrücken.

@Apollo:Das ist aber viel aufwendiger! :wink:


Apollo - Mi 29.10.08 18:24

user profile iconj.klugmann hat folgendes geschrieben Zum zitierten Posting springen:


@Apollo:Das ist aber viel aufwendiger! :wink:


Jaja, jedem das seine. Finde Label einfach prakticher.
@Marc. Nettes Tool, vergess auch öffters mal einrücken, ist am Anfang noch nicht so schlimm aber wenn deine Texte größer werden verglierst du den Durchblick. Echt nützlich :zustimm:


Delete - Mi 29.10.08 18:31

Ich finde Labels auch praktischer ,allerdings in diesem Fall nicht. :lol:


Apollo - Mi 29.10.08 18:41

Und warum nicht? In dem Fall sehe ich keinen Grund mit TCanvas zu arbeiten, es macht noch mehr Arbeit die exakte position zu ermitteln wo man hin zeichnen muss. Labels kann man einfach verschieben.


Delete - Mi 29.10.08 18:45

Es hat ja keinen tieferen Sinn.Es soll einfach nur da stehen ,mehr nicht.Ich finde es ehrlich gesagt
ziemlich egal was man auwählt.


Apollo - Mi 29.10.08 18:47

Stimmt, soll ja eh nur andere verappeln und nich Microsoft konkurenz machen.


Hidden - Mi 29.10.08 21:02
Titel: Re: IF-then funktioniert nicht
Hi,

user profile iconFluffy19 hat folgendes geschrieben Zum zitierten Posting springen:
Ich wollte, um ein paar Noobs zu verarschen (nichts gegen Noobs, bin selbst ein Noob was Delphi angeht!) ein kleines Programm schreiben.
Na das ist ja mal eine ehrenhafte Einstellung :roll: Das Schreiben sogenannter 'Spaßprogramme' wird übrigens durch dieses Forum nicht unterstützt.

Nebenbei wüsste ich nicht, warum dein Programm nur neulinge 'verarschen' kann. Auch ein Experte wird sich wohl erst die Netzwerkaktivitäten deines Programmes ansehen müssen, um das festzustellen :!:


Dude566 - Mi 29.10.08 21:30

Ich würde auch besser Label.Caption verwenden ist am Anfang leichter zu verstehen, bin schon eine Weile Anfänger und mir ging es so.


Delete - Mi 29.10.08 21:39

Das finde ich nicht.Bin zwar kein Anfänger mehr aber trotzdem.Es scheint so als wenn Fluffy19
es verstanden hat mit Funktionen und Prozeduren umzugehen. :shock:


Apollo - Do 30.10.08 15:52

user profile iconDude566 hat folgendes geschrieben Zum zitierten Posting springen:
Ich würde auch besser Label.Caption verwenden ist am Anfang leichter zu verstehen, bin schon eine Weile Anfänger und mir ging es so.


Endlich einer der mich versteht :flehan:



user profile iconHidden hat folgendes geschrieben Zum zitierten Posting springen:
Hi,

user profile iconFluffy19 hat folgendes geschrieben Zum zitierten Posting springen:
Ich wollte, um ein paar Noobs zu verarschen (nichts gegen Noobs, bin selbst ein Noob was Delphi angeht!) ein kleines Programm schreiben.
Na das ist ja mal eine ehrenhafte Einstellung :roll: Das Schreiben sogenannter 'Spaßprogramme' wird übrigens durch dieses Forum nicht unterstützt.

Nebenbei wüsste ich nicht, warum dein Programm nur neulinge 'verarschen' kann. Auch ein Experte wird sich wohl erst die Netzwerkaktivitäten deines Programmes ansehen müssen, um das festzustellen :!:


Warum wird es nicht unterstützt? Solange es kein Virus werden soll, und er nur seine Freunde etwas "verarschen" will, ist das doch nichts schlimmes, oder?


Delete - Do 30.10.08 15:57

Das Label hat btw. noch einen anderen Vorteil: es bleibt auch nach Neuzeichnen des Fensters sichtbar ;)


Hidden - Do 30.10.08 18:29

user profile iconApollo hat folgendes geschrieben Zum zitierten Posting springen:
Warum wird es nicht unterstützt? Solange es kein Virus werden soll, und er nur seine Freunde etwas "verarschen" will, ist das doch nichts schlimmes, oder?
Fällt trotzdem unter 'Spaßprogramme'. Und dafür, dass das unter Freunden bleibt, gibt es ja wohl nur sein Wort auf unseren Bildschirmen :mrgreen:

Aber: Überzeugt. Wenn wir dieses Spaßprogramm verhindern wollten, müssten wir ja verhindern, dass jemals elementare Programmierkenntnisse erworben werden :D

Trotzdem: Such' dir 'was Vernünftiges :mahn: ein eigener Taschenrechner oder so etwas ist z.B. immer praktisch, wenn man es dann ab und zu weiterentwickelt ;)

mfG,