Avatar billede jhald Nybegynder
27. august 2001 - 14:22 Der er 19 kommentarer og
3 løsninger

3 spørgsmål, async, bip, ...

Jeg har lige et par spørgsmål, deler point mellem dem der besvarer de forskellige spørgsmål...


1) Async error 10061
Denne kommer når jeg forbinder til en server der ikke er online (eller også er den ved at starte op, altså ingen forbindelse tilladt på det tidspunkt)
Ved hjælp af on error (i ClientSocket events) ka\' jeg få den til at skrive at der er sket en fejl, men ikke stoppe den fra at komme med den fejl-dialogboks..
Hva\' skal jeg gøre for at forhindre den i af komme med den fejl-dialogboks, og kun gøre det jeg selv beder den om (f.eks. skrive et serveren ikke er tilgængelig i et editfelt eller noed)

2) biplyd ved enter
Lille ting, bare irri at den siger bip når jeg taster enter i et editfelt, jeg har en 
if Key = VK_Return then Edit123.Setfocus;
under KeyPress

3) fjerne fejlbesked ved forkert indtastning i editfelt.
Her mener jeg at når jeg indtaster et/flere bogstaver i et editfelt og bruger det til at regne med.. altså som int .. ka\' man så ikke gøre noed i proceduren så den skriver at det er forkert format man indtaster, i stedet for en fejlboks... og jeg kender godt idéen med at bruge Val, men synes det er en klodset løsning.. Jeg så noed kode der virkede brugbart i et andet spørgsmål, noed med en except (så ikke lige hvilket spørgsmål det var, sorry) - men der kom den også med en af delphi\'s indbyggede fejl-dialogbokse... (at den ikke ku\' regne med strings)
Avatar billede morten_s Nybegynder
27. august 2001 - 14:30 #1
Spørgsmål 2:

Prøv med
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
  if key=char(VK_Return)
  then key:=#0;

end;

Avatar billede morten_s Nybegynder
27. august 2001 - 14:31 #2
Spørgsmål 3
Har du prøvet med en MaskEdit, der kan du sætte op så du kun får tal ind ?

En anden mulighed er at bruge SpinEdit
Avatar billede jhald Nybegynder
27. august 2001 - 14:34 #3
Har overvejet det.. men ville gerne have af vide om det andet ka\' lade sig gøre... det er jeg ikke sikker på om det kan... hvis ikke så er der ikke noed at gøre ved det... men ville være rart :)
Avatar billede jhald Nybegynder
27. august 2001 - 14:39 #4
Kan lige komme med en ting til til det første...

Ville være rart hvis man kunne sige at den skulle forbinde til sted1.com .. og hvis det så ikke virker så skulle den forbinde til sted2.com i stedet.. igen.. uden den async error..

Morten_S .. det du skrev vedr. 2 virkede ikke hos mig at least, ka\' du uddybe det ?
(det var en inkomp. error i compileren)
Avatar billede morten_s Nybegynder
27. august 2001 - 14:42 #5
Klik på keyPress uder events for dit editfelt og indsæt

if key=char(VK_Return)
  then key:=#0;

Avatar billede jhald Nybegynder
27. august 2001 - 14:45 #6
øhm, hva\' tror du jeg gjorde?

og den (compileren) brokker sig over inkomp. types (word og char) og hva\' er  #0 anyway?
Avatar billede ziron Nybegynder
27. august 2001 - 14:51 #7
jhald >> jeg kan ikke helt forstå hvorfor den siger en lyd??? har du ikke selv tilføjet noget kode for at få den til det???

/ZIRON
Avatar billede jhald Nybegynder
27. august 2001 - 14:56 #8
Nopes, jeg har intet andet kode under mit editfelt end:

procedure TForm1.edtNickKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  if Key = VK_Return then edtPass.SetFocus;
end;


Ikke mig der har tilføjet noed overhovedet der har med lyd at gøre....

Men den gør det også når jeg trykker enter i andre editfelter...
Avatar billede martinlind Nybegynder
27. august 2001 - 14:56 #9
# = char

Hvis du skal fange en StrToInt error kan du enten bruge en try..except eller du kan vælge at konvertere på en anden måde... Du kan bruge VAL den har en variable med som angiver om der var fejl, den er meget hurtigere en try except men kræver altså en extra var.

Din TCP/IP conn. er der vist ikke umidelbar noget at gøre ved, ( løsningen er at bruge WinAPI og selv lave din socket, en større historie ), så bruge try except til den.

/Martin
Avatar billede slowaterz Nybegynder
28. august 2001 - 09:02 #10
Spm 1 & 3: exception handling.
Strukturen er :

...
try
  SomeServer.Connect;
except on ESockError do
  MessageDlg(\'Tough luck.\', mtError, [mbOK], 0);
end;
...
try
  MyNumber := StrToInt(Edit1.Text);
except on EConvertError do
  MessageDlg(\'Only numbers.\', mtError, [mbOK], 0);
end;
Avatar billede slowaterz Nybegynder
28. august 2001 - 11:05 #11
Spm. 3 : rettelse.
...
try
  MyNumber := StrToInt(Edit1.Text);
except on EConvertError do
  begin
    Edit1.Text := \'\';  // Glemte at rydde den
    MessageDlg(\'Only numbers.\', mtError, [mbOK], 0);
  end;
end;
...

Spm. 2 :
Delphi forventer, at en eller anden knap, hvis Default property er sat til True (virker derfor kun for knapper), tager sig af dit <ENTER> tryk. Når det er en TEdit, der har fokus og ingen af dine knapper har Default sat til True, kommer der en fejlmelding - et bip.
Jeg har \"snydt\" - jeg har lavet en knap, sat dens Default property til True og den bredde til 0 og nu får jeg ikke nogen bip.
Avatar billede slowaterz Nybegynder
28. august 2001 - 11:25 #12
Nåh, ja ... Edit123.SetFocus kaldet skal så flyttes til snydeknappens OnClick event - <ENTER> trykket bliver ikke opfattet som en karakter, der skal tilføjes til edit-box\'ens streng, når man har en Default knap
Avatar billede jhald Nybegynder
29. august 2001 - 09:06 #13
slowaterz .. det ser meget fornuftigt ud... jeg har dog kun lige haft et par minutter med delphi, så har ikke prøvet andet end den med socket.. men det er et klientprogram jeg har gang i, der når jeg connecter skal jeg da ikke andet end at smide
ClientSocket.Active := true vel?
Hvordan vender jeg det du skrev så det kommer til at passe med det?
Avatar billede slowaterz Nybegynder
29. august 2001 - 09:18 #14
Umiddelbart vil jeg nok foreslå :

try
  ClientSocket.Active := True;
except on ESockError do
  MessageDlg(\'Tough luck.\', mtError, [mbOK], 0);
end;
Avatar billede jhald Nybegynder
29. august 2001 - 22:06 #15
Hmm, det virker ikke helt.. den brokker sig over at ESockError er en undeclared identifier... :/
Avatar billede slowaterz Nybegynder
30. august 2001 - 07:57 #16
Tjaeh ...
I mit eksempel havde jeg \"Uses Psock;\", men det kan være, du skal bruge \"Uses scktcomp;\" - deri er der en exception, der hedder ESocketError - den passer måske bedre til din situation.
Avatar billede jhald Nybegynder
30. august 2001 - 10:51 #17
Jeg har uses scktcomp med, opdagede selv at jeg skulle ha\' den lavet om til ESocketError ... men ... den kommer stadig med den samme fejl som hele tiden....

\'Project Project1.exe raised exception class ESocketError with message \'Async. socket error 10049\'. Process stopped. Use step or... bla bla..

Avatar billede martinlind Nybegynder
30. august 2001 - 11:00 #18
Du skal sætte delphi til IKKE at stoppe på Delphi Exception eller tilføje ESocketError i din Exclude liste, hvis du vil ungå din exception når du runner
/Martin
Avatar billede slowaterz Nybegynder
30. august 2001 - 11:18 #19
Hvis du kører programmet fra Delphi, vil du få den exception fejl, men når du nu har skrevet en handler, vil der ikke komme fejl, når du kører programmet i Windows
Avatar billede martinlind Nybegynder
30. august 2001 - 11:20 #20
Som jeg lige har beskevet *S*, kan du teste det inde fra delphi også.
Avatar billede jhald Nybegynder
09. september 2001 - 23:21 #21
sorry, har været lidt væk, har dog lige fået testet.. og du havde ret Slowaterz...
points til dig :p
Avatar billede jhald Nybegynder
09. september 2001 - 23:22 #22
sorry, har været lidt væk, har dog lige fået testet.. det virker sådan cirka.. :=)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester