Me alegro de que te funcionara, ahora vamos a ver si puedo ayudarte con tus preguntas. Como tu bien dices, si lo que se quiere encender es una luz, lo ideal es una función que lo encienda y otra que lo apague. Pues bien lo primero que tenemos que hacer es declarar la variable hPort como global, y separar la función de arriba en 4:
Código Delphi
[-]
var
hPort: Thandle;
procedure AbrirPuerto(Puerto: String);
var
DCB: TDCB;
begin
Puerto:= Uppercase(Puerto);
if (Puerto<>'COM1') and (Puerto<>'COM2') then
exit;
hPort:= CreateFile(PChar('\\.\'+Puerto), GENERIC_READ or GENERIC_WRITE,0, nil,
OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0);
if hPort<>INVALID_HANDLE_VALUE then
begin
DCB.DCBlength:= sizeof(DCB);
if GetCommState(hPort,DCB) then
begin
with DCB do
begin
BaudRate := CBR_9600;
ByteSize := 8;
Parity := NOPARITY;
StopBits := ONESTOPBIT;
Flags := $01;
end;
if SetCommState(hPort, DCB) then
Exit;
end;
CloseHandle(hPort);
hPort:= INVALID_HANDLE_VALUE;
end;
end;
procedure CerrarPuerto;
begin
if hPort <> INVALID_HANDLE_VALUE then
begin
CloseHandle(hPort);
hPort:= INVALID_HANDLE_VALUE;
end;
end;
procedure ActivarRTS;
begin
if hPort <> INVALID_HANDLE_VALUE then
EscapeCommFunction(hPort,SETRTS);
end;
procedure DesactivarRTS;
begin
if hPort <> INVALID_HANDLE_VALUE then
EscapeCommFunction(hPort,CLRRTS);
end;
Antes de usar el puerto tienes que llamar la función AbrirPuerto y cuando dejes de usarlo CerrarPuerto. Las funciones ActivarRTS y DesactivarRTS hacen lo que parece activar y desactivar RTS, para que funcionen el puerto tiene que estar abierto.
En cuanto a lo de encender mas de una luz podemos utilizar además de la salida RTS la DTR con lo cual ya podemos encender 2 luces utilizando 2 circuitos como el anterior. Utilizando una combinación de ambas podríamos controlar hasta 3, pero si necesitas controlar mas ya seria necesario utilizar algún circuito que pueda establecer una comunicación serie, quizá con un microcontrolador PIC.