Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Anzeige bringt fatalen Fehler (https://www.delphipraxis.net/55845-anzeige-bringt-fatalen-fehler.html)

Bloodfire 27. Okt 2005 20:40


Anzeige bringt fatalen Fehler
 
Liste der Anhänge anzeigen (Anzahl: 2)
Hi!

Folgendes:

Es wird auf den BtnNew geklickt und eine Info wird per TCP versandt:

Delphi-Quellcode:
procedure TBoardForm.BtnNewClick(Sender: TObject);
begin
   SendText('Info','NewGame');
end;
Delphi-Quellcode:
procedure TBoardForm.SendText(FKind, FTxt: String);
var
  ASendText: String;
begin
   //{
   try
    if TcpClient.Connect then
      begin
         ASendText:=FKind+'#'+FTxt;
         TcpClient.Sendln(ASendText);
      end;
   finally
     TcpClient.Disconnect;
   end;
   //}
end;

Dann wird sie empfangen, 'zerstückelt', ausgewertet und es wird je nach Info darauf reagiert:

Delphi-Quellcode:
procedure TBoardForm.TcpServerAccept(Sender: TObject;
  ClientSocket: TCustomIpClient);
var
  RecievedLn: String;
  i,j: Integer;
  RecievedKind: String;
  RecievedInfo: String;
begin
   RecievedLn:=ClientSocket.Receiveln;

   //{
   i:=0;
   while not(RecievedLn[i]='#')
     do inc(i);
   RecievedKind:=Copy(RecievedLn,0,i-1);

   if (RecievedKind = 'Info') then
     begin
        inc(i);
        j:=i;
        while not(length(RecievedLn)=i)
          do inc(i);
        RecievedInfo:=Copy(RecievedLn,j,i-j+1);

        if RecievedInfo = 'NewGame'
          then ShowMessage('Test!');
        //CheckInfo(RecievedInfo);
     end;
     //}
end;

Grundsätzlich passiert folgendes:
Die ShowMessage wird gezeigt, aber danach zickt das Programm. Wenn ich die Form beenden will meldet Delphi eine EAccessViolation (screenshot anbei: error1.jpg)

Ab und zu ist auch folgendes passiert:
Vor, bzw. während dem Anzeigen der ShowMessage (sie wird nicht mehr gezeichnet) tickt der PC komplett aus. Es hängt alles - jeder Task (auch Taskmanager). Jeder Bearbeitungsschritt (zb. Taskmngr öffnen / Task anklicken / etc.) braucht ca 20-30 Sekunden!!

Hin und wieder gab's vorher von Delphi eine Fehlermeldung -> anbei(error2.jpg)

Ich hoffe, mir kann jemand weiterhelfen!
Danke!

marabu 27. Okt 2005 21:08

Re: Anzeige bringt fatalen Fehler
 
Probier mal so:

Delphi-Quellcode:
procedure TBoardForm.TcpServerAccept(Sender: TObject;
  ClientSocket: TCustomIpClient);
var
  ReceivedLn: String;
  i, j: Integer;
  ReceivedKind: String;
  ReceivedInfo: String;
begin
  RecievedLn := ClientSocket.ReceiveLn;
  i := Pos('#', ReceivedLn);
  ReceivedKind := Copy(ReceivedLn, 1, Pred(i));
  if ReceivedKind = 'Info') then
  begin
    ReceivedInfo := Copy(ReceivedLn, Succ(i), Length(ReceivedKind) - i);
    if ReceivedInfo = 'NewGame'
      then ShowMessage('Test!');
      // CheckInfo(ReceivedInfo);
  end;
end;
Grüße vom marabu

glkgereon 27. Okt 2005 21:14

Re: Anzeige bringt fatalen Fehler
 
Noch ein kleiner Tipp:

eine AccessViolation heisst in 99% der Fälle, das du ein Objekt benutzt, welches du noch nicht erstellt hast (Create) und deren Instanz (ein Pointer) folglich noch nil ist (also nach 000... zeigt)

danach solltest du mal genau gucken


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:33 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