![]() |
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! |
Re: Anzeige bringt fatalen Fehler
Probier mal so:
Delphi-Quellcode:
Grüße vom marabu
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; |
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:40 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz