Willkommen ~Gast!
Registrieren || Einloggen || Hilfe/FAQ || Staff
Probleme mit der Registrierung im Forum? Melde dich unter registerEin Bild.
Autor Beitrag
000
01.05.2002, 19:43
snoopdog



Moin hab hier son kleines Problem mit Delphi.
Also kann es sein das man Wenn man nen Wert der in ner EditBox steht erst auf die Variabeln übertragen muss. In C muss man das mit UpdateData(True); machen. Bei mir meckert der immer ist kein Gültiger integer.
naja hier mal der code
Quellcode:
procedure TTest.Button1Click(Sender: TObject);
begin
Edit1.Text:=str_v_Port;
Edit2.Text:=str_b_Port;


v_Port:=strtoint(str_v_Port);
b_Port:=strtoint(str_b_Port);


for port:= v_Port to b_Port do      //anfang forschelife
begin
cs.Port:=port;
str_port:=inttostr(port);
cs.Active:=true;
delay(1000);
if result = 1 then ListBox1.Items.Add('connectet'+str_port)
else ListBox1.Items.add('nicht connectet'+str_port);

result:=0;



end;       //ende forschleife


end;

vielleicht könnt ihr mir helfen

--

Visit our 500er Gamer Lan
@ www.evil-lanparty.de or
@ www.evil-havoc.com
Visit the HaVoc Lanparty Community
@ www.havoc-lanparty.com

zum Seitenanfang zum Seitenende Profil || Suche
001
01.05.2002, 19:52
Retro



Erm, du musst einfach darauf achten dass in den Editboxen auch nur Zahlen stehen. Ein Integer darf keine Kommatas oder Punte (usw..) enthalten. Eine For-Schleife nimmt sowas schließlich auch nicht an. Für den genauen Gültigkeitsbereich eines Integers musst du mal Googlen, hier der Optimierte Code:

Quellcode:
[b]procedure[/b] TTest.Button1Click(Sender: TObject);
[b]begin[/b]
  v_Port      := StrToInt(Edit1.Text);
  b_Port      := StrToInt(Edit2.Text);


  [b]for[/b] port := v_Port [b]to[/b] b_Port [b]do[/b]
  [b]begin[/b]
    cs.Port   := port;
    str_port  := IntToStr(port);
    cs.Active :=true;
    Delay(1000);

    [b]if[/b] (Result = 1) [/b]then[/b]
      ListBox1.Items.Add('connectet' + str_port)
    [b]else[/b]
      ListBox1.Items.Add('nicht connectet' + str_port);

  Result := 0;
[b]end[/b];

[b]end[/b];

Saubere schreibweise ist auch ein wichtiger Teil des ganzen! ThW-Code ist übrigens immer lowercase =)

P.S.: Schön das man Codeeinrückung hat, aber wiso funktionieren keine Leerreihen im Codetag?! =|

--

shielding people from their own stupidity is an evolutionary step backwards anyway.

/* God is dead!............Nietzsche */
/* Nietzsche is dead!......God */
/* Nietzsche is God!.......The Dead */


Dieser Beitrag wurde am 01.05.2002 um 19:55 von Retro bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche
002
01.05.2002, 19:54
Killermachine



@Retro
kurz: integer ist einfach ne ganze Zahl.

--

Kommen Sie näher, kommen Sie ran, hier werden Sie genauso beschissen wie nebenan
Entities
Tutorials

zum Seitenanfang zum Seitenende Profil || Suche
003
01.05.2002, 19:55
Retro



Hm, stimmt, kurz und bündig =)

--

shielding people from their own stupidity is an evolutionary step backwards anyway.

/* God is dead!............Nietzsche */
/* Nietzsche is dead!......God */
/* Nietzsche is God!.......The Dead */

zum Seitenanfang zum Seitenende Profil || Suche
004
01.05.2002, 19:55
snoopdog



ja nun da stehen nur zahlen drin also genauergesagt eine 1 mehr net. Kann man das denn unterbinden bei den Eigenschaften von so ner EditBox das man N U R Zahlen eingeben kann???

--

Visit our 500er Gamer Lan
@ www.evil-lanparty.de or
@ www.evil-havoc.com
Visit the HaVoc Lanparty Community
@ www.havoc-lanparty.com

zum Seitenanfang zum Seitenende Profil || Suche
005
01.05.2002, 20:02
snoopdog



hmm also ich hab es nun hin bekommen hab einfach nen Schreibfehelr letzte Nacht gemacht.

nicht Edit1.Text:=str_v_port sondern
str_v_port:=Edit1.Text naja ok trotzdem danke

--

Visit our 500er Gamer Lan
@ www.evil-lanparty.de or
@ www.evil-havoc.com
Visit the HaVoc Lanparty Community
@ www.havoc-lanparty.com

zum Seitenanfang zum Seitenende Profil || Suche
006
01.05.2002, 20:03
Retro



Klar geht das, musst mal per Google suchen.

--

shielding people from their own stupidity is an evolutionary step backwards anyway.

/* God is dead!............Nietzsche */
/* Nietzsche is dead!......God */
/* Nietzsche is God!.......The Dead */

zum Seitenanfang zum Seitenende Profil || Suche
007
01.05.2002, 20:10
feigling



Zitat:
snoopdog postete
Quellcode:
if result = 1 then ListBox1.Items.Add('connectet'+str_port)
else ListBox1.Items.add('nicht connectet'+str_port)

Ich versteh nur eins nicht an dem Code.
Woher kommt das result ?
Erst wird wohl nen Clientsocket mit nem Server verbunden und dann wird für eine Sekunde gestoppt. Danach wird geprüft, ob result 1 oder 0 ist.
Woher kommt denn result ?
Ist result ne globale Integervariable, die du mit 1 oder 0 beschreibst, wenn du vom ne Antwort z.B. beim ClientSocket bei OnConnect ein Zeichen vom Server bekommst ?
Irgendwie versteh ich das jetzt nicht so richtig, was result da macht.
Vielleicht habe ich auch nur ne Denkblokade und es ist alles ganz einfach.
Nur irgendwie komme ich da nicht drauf :D

--


Dieser Beitrag wurde am 01.05.2002 um 20:11 von feigling bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche
008
01.05.2002, 20:16
Retro



Nene feigling, merkwürdig ist das schon =)

Wenn es eine solche, von feigling beschriebene, Variable handelt würde ich ihr einen anderen Namen geben. Denn "Result" wird von Delphi als Rückgabe einer Funktion verwendet...

Quellcode:
function Test(var I: Integer): Boolean;
begin
  if (I < 10) then
    Result := True;
  else
    Result := False;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  if (Test(StrToInt(Edit1.Text)) = True) then
    ShowMessage('Der eingegebene Wert ist kleiner als 10!')
  else
    ShowMessage('Der eingegebene Wert ist größer als 10!');
end;
Kapisch? =)

--

shielding people from their own stupidity is an evolutionary step backwards anyway.

/* God is dead!............Nietzsche */
/* Nietzsche is dead!......God */
/* Nietzsche is God!.......The Dead */


Dieser Beitrag wurde am 01.05.2002 um 20:17 von Retro bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche
009
01.05.2002, 20:27
feigling



Genau und das kam mir so komisch vor, da es oben garkeine Funktion war.

Was ich mich aber auch frage ist, warum gibt Delphi keine Fehlermeldung aus, wenn man result als Integervariable deklariert ?
Irgendwie finde ich das sehr komisch, da ja eigentlich durch sowas alles durcheinander kommen "könnte".

--


Dieser Beitrag wurde am 01.05.2002 um 20:31 von feigling bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche
010
01.05.2002, 21:43
snoopdog



jo result ist ne integer variable und ich habe die global deklariert. Denn in der Funktion ClinetSocket.Error wird result auf 0 gestellt und in der Funktion OnConnect auf 1 so geht es jedenfalls das Programm läuft nun wunderbar. Soll nen Portscanner sein ist nur zum üben von Delphi. Jedenfalls is mir das in C viel einfacher vorgekommen. Naja nun geht es..
NAch was sollte man den bei google suchen?? EditBox oder nru Zeichen ??

--

Visit our 500er Gamer Lan
@ www.evil-lanparty.de or
@ www.evil-havoc.com
Visit the HaVoc Lanparty Community
@ www.havoc-lanparty.com

zum Seitenanfang zum Seitenende Profil || Suche
011
01.05.2002, 22:09
feigling



naja, machs doch einfach so:

Quellcode:
var j: integer;
.
.
begin
  for j := 1 to length(edit1.text) do
  begin
    if (ord(edit1.text[j]) < 48) or (ord(edit1.text[j]) > 57) then
    begin
      exit;
    end;
  end;
  [b]deinen Code hier rein[/b]
end;

Du kannst die Schleife auch nochmal einfügen für edit2.
Du musst dann nur andere Variablen nehmen (i statt j)
Das sollte eigentlich funzen, ohne das du deinen Code verändern musst.
Einfach deinen Code nur an die Stelle einfügen, wo deinen Code hier rein steht.

€dit:
Hoffentlich habe ich jetzt nicht noch irgendwo ein i stehen. Hab sie alle durch J ersetzt, da das Forum die [.i.] als Forumtag angesehen hat und die dann weggelassen hat. Falls irgendwo noch ein i in meinem Code stehen sollte, dann einfach dafür ein j nehmen.

--


Dieser Beitrag wurde am 01.05.2002 um 22:16 von feigling bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche
012
01.05.2002, 22:17
Retro



Hm, schön aber falscher ansatz! =)

Guck dir mal "OnKeyDown" an... dort hast du die Variable "Key"... einfach gucken ob "Key" Backspace oder eine Zahl ist. Ansonsten "Key := #0".

--

shielding people from their own stupidity is an evolutionary step backwards anyway.

/* God is dead!............Nietzsche */
/* Nietzsche is dead!......God */
/* Nietzsche is God!.......The Dead */

zum Seitenanfang zum Seitenende Profil || Suche
013
01.05.2002, 22:22
feigling



:P
Nix falscher Ansatz :)
Klar kann man das auch gleich beim OnKeyDown Ereignis machen, aber warum =)

Is ja letztendlich auch egal, wo man es reinsetzt.
Bei meinem wäre nur das Problem, dass man die Editbox nach falschen Sachen durchsuchen müsste. Das fällt bei Retros Vorschlag weg, weil der nur die gültigen Keys überhaupt reinschreibt.
Daher ist Retros Methode die Bessere :D

--

zum Seitenanfang zum Seitenende Profil || Suche
014
02.05.2002, 00:12
Another1



wie wärs mit ExceptionHandlern zum Filtern beim converten? Dazu sind die ja schließlich da
(Beispiel:)
Quellcode:
     try
        begin
           i := StrToInt(Edit1.Text);
        end;
     except
          on EConvertError do ShowMessage('Please enter a valid integer value');
     end;

(p.s. StrToIntDef is auch recht nützlich)

--

Another1

...relaxing..atm =)
... und Schweiz suckt!

zum Seitenanfang zum Seitenende Profil || Suche