Zwei Fehlerchen:
1. Du rufst WSACleanup() sowohl im Destroy- als auch im Close-Ereignis der Form auf. Ist nicht schlimm, aber unnötig.
2. und ungleich schlimmer. Du schreibst:
SockAddrIn.sin_addr.S_addr := inet_addr(PChar(EditScanPorts));
Das heißt du übergibst einen Pointer auf den Pointer, der auf das Editfeld zeigt. AUTSCH! Du musst einen Zeiger auf EditScanPorts.Text übergeben