Bueno, me voy a meter a estudiar el code

Salud OS
Escrito 09 enero 2009 - 03:16
Escrito 09 enero 2009 - 03:26
MiThread:= TThreadCom.Create(2); // Se abre el COM2
Escrito 09 enero 2009 - 03:41
Escrito 09 enero 2009 - 03:48
Me alegro de que te funcione bien
![]()
Por cierto ¿que aplicación usaste para enviar los datos al puerto virtual?, o le enviaste directamente un archivo de texto
Escrito 09 enero 2009 - 03:54
C:\>type archivo.txt > com2
Escrito 09 enero 2009 - 04:03
Escrito 09 enero 2009 - 09:50
FPort := APort;
Escrito 10 enero 2009 - 05:07
Tienes razón, lo añadí por si mas adelante necesitaba saber que puerto se había abierto, pero por ahora no lo uso. Al igual que los parámetros de la comunicación que los fijo en el código y deberían pasarse como parámetros, pero esos detalles ya se pulirán mas adelante.sin embargo en ningun lado usas FPort. ¿?
Escrito 11 enero 2009 - 12:34
Hola, ha decir verdad yo no se nada de multihilos mas que solo teoria, nunca los he puesto en practica, pero he investigado mucho anteriormente y llegue a descargarme unos componentes para manejar los hilos que pintan muy bien.
Muchas gracias MasterXP les voy a dar un vistazo, debo comentar que he replicado algunas de las soluciones que he encontrado en internet pero mi problema realmente es que no logro entender el concepto, quiero decir, he creado multihilos pero sigo sin poder hacerlo en mi desarrollo, no logro conceptualizar como de una applicación ya hecha, hacerla multihilos.
Salud OS
Escrito 13 enero 2009 - 12:29
Escrito 03 febrero 2009 - 03:43
Tienes razón, lo añadí por si mas adelante necesitaba saber que puerto se había abierto, pero por ahora no lo uso. Al igual que los parámetros de la comunicación que los fijo en el código y deberían pasarse como parámetros, pero esos detalles ya se pulirán mas adelante.
{ TThreadCom } constructor TThreadCom.Create(APort: Integer; Bauds, LengthData, Parity, StopBit: DWORD); var DCB: TDCB; begin FPort:= APort; FHandle:= CreateFile(PChar('\\.\COM' + IntToStr(APort)), GENERIC_READ or GENERIC_WRITE, 0, nil, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0); if FHandle = INVALID_HANDLE_VALUE then raise EThreadCom.Create('No puedo abrir el puerto COM' + IntToStr(APort)); DCB.DCBlength:= Sizeof(DCB); if not GetCommState(FHandle,DCB) then begin raise EThreadCom.Create('Error al configurar el puerto'); Form1.PortOpen := False; end else Form1.PortOpen := True; // Aqui esta la configuracion del puerto. Se la podriamos pasar por parametros ... //Se pasaron parámetros desde el constructor Create with DCB do begin BaudRate := Bauds; ByteSize := LengthData; Parity := Parity; StopBits := StopBit; Flags := $01; end; if not SetCommState(FHandle, DCB) then begin raise EThreadCom.Create('Error al configurar el puerto'); Form1.PortOpen := False; end else Form1.PortOpen := True; inherited Create(FALSE); end;
procedure TForm1.AbrePuerto1Click(Sender: TObject); begin MiThread:= TThreadCom.Create(Puerto,Velocidad,LongDatos,Paridad,BitStop); AbrePuerto1.Enabled := false; end; procedure TForm1.ConfiguraPuerto1Click(Sender: TObject); var ConfPuerto: TfrmConfPort; //esta es la forma donde obtengo los valores begin ConfPuerto := TfrmConfPort.Create(nil); if ConfPuerto.ShowModal = mrOK then begin //Se obtiene el número de COM Puerto := strtoint(StringReplace(ConfPuerto.CBPorts.Text,'COM','',[rfReplaceAll])); //Se configura la velocidad en Bauds case ConfPuerto.RGBaudsSMDR.ItemIndex of 0: Velocidad := BAUD_1200; 1: Velocidad := BAUD_2400; 2: Velocidad := BAUD_4800; 3: Velocidad := BAUD_9600; 4: Velocidad := BAUD_38400; 5: Velocidad := BAUD_56K; 6: Velocidad := BAUD_115200; end; //Se configura la longitud de datos case ConfPuerto.RGDataSMDR.ItemIndex of 0: LongDatos := DATABITS_7; 1: LongDatos := DATABITS_8; end; //Se configura la paridad case ConfPuerto.RGParitySMDR.ItemIndex of 0: Paridad := PARITY_NONE; 1: Paridad := PARITY_ODD; 2: Paridad := PARITY_EVEN; 3: Paridad := PARITY_MARK; 4: Paridad := PARITY_SPACE; end; //Se configura el bit de stop case ConfPuerto.RGStopSMDR.ItemIndex of 0: BitStop := STOPBITS_10; 1: BitStop := STOPBITS_20; end; AbrePuerto1.Enabled := true; end else begin AbrePuerto1.Enabled := false; ShowMessage('Proceso Cancelado'); end; ConfPuerto.Free; end;
procedure TfrmConfPort.FormShow(Sender: TObject); var i: integer; begin { Obtiene Puertos Seriales disponibles } Reg := TRegistry.Create; try Reg.RootKey := HKEY_LOCAL_MACHINE; if Reg.OpenKey('HARDWARE\DEVICEMAP\SERIALCOMM', false) then begin Reg.GetValueNames(CBPorts.Items); for I := 0 to CBPorts.Items.Count - 1 do CBPorts.Items[i] := Reg.ReadString(CBPorts.Items[i]); end; finally Reg.Free; end; CBPorts.Sorted := true; end;
Escrito 03 febrero 2009 - 04:43