• Miércoles 6 de Noviembre de 2024, 00:34

Mostrar Mensajes

Esta sección te permite ver todos los posts escritos por este usuario. Ten en cuenta que sólo puedes ver los posts escritos en zonas a las que tienes acceso en este momento.


Mensajes - Hodoacro

Páginas: [1]
1
C++ Builder / Re: Pregunta
« en: Martes 14 de Septiembre de 2004, 14:03 »
Perdona pero he visto algun bichito en el código.

Te lo paso de nuevo:

Código: Text
  1. // control de encendido
  2. if (TimerLuces->Enabled==false) // la cambiada
  3.   if (HoraEncendido->Hour<=HoraActual->Hour)
  4.      if (HoraEncendido->Minutes=HoraActual->Minute)
  5.         if (HoraEncendido->Secon<=HoraActual->Secon){
  6.            Outport(FrmDireccion->PDirOut,2);
  7.            TimerLuces->Enabled = true;
  8.         }
  9.  
  10.  
  11. // control de apagado
  12. if (TimerLuces->Enabled==true) // otra mas
  13.   if (HoraApagado->Hour>=HoraActual->Hour)
  14.     if (HoraApagado->Minute>=HoraActual->Minute)
  15.        if (HoraApagado->Secon>=HoraActual->Secon){
  16.             Outport(FrmDireccion->PDirOut,0);
  17.              TimerLuces->Enabled = false;
  18.        }
  19.  

Ahora creo que está bien

2
C++ Builder / Re: Pregunta
« en: Martes 14 de Septiembre de 2004, 13:58 »
Eso es lo que te pasa, no puedes comparar datos complejos (la hora lo es), como si fueran datos simples (con un '=='). Bueno, existe esa posiblidad, pero pasa por crearte tu propio objeto THora y sobracargar operadores, etc..

Pregúntate qué es el objeto TTime. No sé exactamente su naturaleza pero nomarmente será una estructura o clase que tendrá propiedades como TTimer->Hour, TTimer->Minutes, etc...

Las comparaciones serían más o menos así (suponiendo que TTime tengan propidades como las que te he referido anteriormente):

Código: Text
  1. // control de encendido
  2. if (TimerLuces->Enabled=false)
  3.    if (HoraEncendido->Hour<=HoraActual->Hour)
  4.       if (HoraEncendido->Minutes=HoraActual->Minute)
  5.          if (HoraEncendido->Secon<=HoraActual->Secon){
  6.             Outport(FrmDireccion->PDirOut,2);
  7.             TimerLuces->Enabled = true;
  8.          }
  9.  
  10.  
  11. // control de apagado
  12. if (TimerLuces->Enabled=false)
  13.    if (HoraApagado->Hour>=HoraActual->Hour)
  14.      if (HoraApagado->Minute>=HoraActual->Minute)
  15.         if (HoraApagado->Secon>=HoraActual->Secon){
  16.              Outport(FrmDireccion->PDirOut,0);
  17.               TimerLuces->Enabled = false;
  18.         }
  19.  

Échale un vistazo a la estructura TTime.

3
C++ Builder / Re: Pregunta
« en: Jueves 9 de Septiembre de 2004, 09:55 »
Efectivamente tienes que utilizar un objeto TTimer que sea visitado cada cierto tiempo, Si quieres ser muy exacto podría ponerle un intervalo de menos de un segundo, pero puedes ponerlo que se visite cada 5 segundos, por ejemplo (TTimer->Interval=5000).

create dos variables del formato de hora, existe gran canitidad de tipos de estas variables, una de ellas, que esta definida en "dos.h" es :

struct time {
   unsigned char ti_min;      /* minutes */
   unsigned char ti_hour;     /* hours */
   unsigned char ti_hund;     /* hundredths of seconds */
   unsigned char ti_sec;      /* seconds */
};

esta estrucutura es usada por funciones como :

void gettime(struct time *timep);
void settime(struct time *timep);

Create dos variables de este tipo, por ejemplo, HoraComienzo y HoraFin, que sean rellenadas en las dos funciones asociadas a los botones hora comienzo y hora final.

create una función que tendrás que asociar al evento OnTimer del Objeto TTimer, que es la que va a comparar la hora actual con estos dos variables:

FuncionXxx(){

struct time TActual;

GetTime (&TActual); // pilla la hora actual del sistema

// ---- a partir de aquí compara los datos TActual con los de HoraComienzo y HoraFin

..
..
..
}

Espero que te sirva.

4
C++ Builder / Re: Manejar Bmp
« en: Miércoles 8 de Septiembre de 2004, 10:01 »
De momento sólo sé que existen, pero no los conozco, de todas formas veré si puedo encontrar información de alguno.

Una pregunta, ¿porque quieres simplificar el color?.

5
C++ Builder / Re: Pregunta
« en: Miércoles 8 de Septiembre de 2004, 09:43 »
La verdad es que no tengo idea de donde puedes encontrar información de este tema, yo me ayudo de un libro de Anaya multimedia llamado Programación en C++ Builder. Te doy los datos ya que es el libro es español, que yo conozca, que tiene la información más extensa sobre este y otros temas. Es para el Builder 1 pero te sirve para cualquier otra versión.

Nombre: Programación en C++ Builder (adquiera los fundamentos básicos de programación).
Editorial : Anaya Multimedia.
Autor: Francisco Charte.
ISBS : 84-415-0203-X

El problema es que es del 1997 y no sé si seguiran vendiéndolo.

De todas formas utilizar TTimer no es nada complicado:

Create un Objeto TTimer, bien insertandolo desde el editor (desde la pestaña System) o creandolo en tiempo de ejecucion.

El objeto tiene dos propiedades significativas.

Interval: Que determina cada cuantos milisegundo será visitado el objeto.
Enabled: Que activa y/o desactiva el objeto.

Tiene un sólo evento :

OnTimer: La función asociada a este evento será la que se ejecutará cada "Interval" milisegundos.

A partir de la función asociada a OnTimer puedes llamar a cualquier otra función o funciones del mismo programa. Las funciones que se ejecutan desde TTimer no tienen nada de especial, son funciones normales, solo tienen la salvedad de ser ejecutadas cada cierto tiempo.

Para activar/desactivar el objeto usa TTimer->Enabled=true o false.

Espero que te sirva.

6
C++ Builder / Re: Extern Y New :s
« en: Martes 7 de Septiembre de 2004, 20:50 »
Las variable extern son tipo global por lo que es el programa el que la inicializa, siempre no que no sea un puntero, claro. Si es un puntero, el programa inicializara y alocatara memoria para un puntero y tendrás que buscar memoria en uno de los dos hilos de ejecucion, nunca en los dos, ya que el puntero es global al declararlo como extern y por lo tanto, su contenido publico.

7
C++ Builder / Re: Valor Del La Tecla De Borrar
« en: Martes 7 de Septiembre de 2004, 17:37 »
Ahí van algunos códigos interesantes.

8= borrar.
13 = enter.
27 = Esc.
33= Repag.
34 = Avpag.
37 = flecha a la izquierda.
38 = fecha arriba.
39 = flecha a la derecha.


para saber cualquier tecla. imprime en modo int el valor de Key en la misma funcion OnKeyPress, por ejemplo con

ShowMessage ("La tecla tiene el valor :"+AnsiString((int)Key);

8
C++ Builder / Re: Mapimensages
« en: Martes 7 de Septiembre de 2004, 12:41 »
Creo que la forma más adecuada de agregar lineas sería:

....
RichEdit1->Lines->Add (Edit2->Text);
RichEdit1->Lines->Add (Edit3->Text);
......

Cada función Add (..) agrega una linea nueva a Lines

9
C++ Builder / Re: Validar Edit O Maskedit
« en: Martes 7 de Septiembre de 2004, 12:20 »
Tienes que activar el evento OnKeyUp del Edit

y así quedaría la función:


void __fastcall XXXX::Edit1KeyUp(TObject *Sender, WORD &Key,TShiftState Shift)
{
     char Cadena[200];
    strcpy (Cadena,ZRes->Text.c_str());
   if (Key=='+' || Key=='-'){
        if (strlen (Cadena)>0)
           Key=0; // solo deja los signos al principio
           else return;
    }else if (Key!='.' && Key!=','){ // admite el punto y la coma como comienzo del decimal
           char *p;
          p=strchr(Cadena,','); // busca una coma en el escrito
         Key=(p)?(char)0:','; // si hay una coma no admite otra
    }else{
       if (Key<'0' || Key>'9') // solo admite caracteres numericos
                 Key=0;
      }
}

Intentala y lo verás más claro

10
C++ Builder / Re: Imprimir Listbox En C++builder
« en: Martes 7 de Septiembre de 2004, 12:03 »
Intenta esto:

int IAltoFuente;
int t;
TPrinter Prntr = Printer();

// determina el alto en pixels de la fuente usada
IAltoFuente=Prntr->Canvas->TextHeight ("X");

Prntr->BeginDoc();

// Imprime las lineas una por una
for (t=0;t<lisbox1->Items->Count;t++)
    Printer ()->Canvas->TextOut (0,t*IAltoFuente,listmox1->Items->Strings[t]);

Prntr->EndDoc();

No lo he probado pero creo que por ahí van los tiros

11
C++ Builder / Texto En Formato Rtf
« en: Martes 7 de Septiembre de 2004, 11:50 »
Alguien me puede indicar dónde puedo encontrar una descripción detallada del formato interno de textos en RTF.

Gracias

12
C++ Builder / Re: Manejar Bmp
« en: Martes 7 de Septiembre de 2004, 11:37 »
Las variables de tipo TColor tienen el formato:

Variable TColor = PAVR

Paleta = P
Intensidad de Azul = A
Intensidad de Verde=V
Intensidad de Rojo =R

Como verás cada color primario ocupa 1 Byte por lo que veo un poco dificil poder simplificar 3 Bytes de informacion de información en 1. Sé que existe algoritmos de simplificación de paletas de 24 Bit a paletas de 8 Bit (que es lo que quieres) pero todos pasan por perder gran cantidad de información de color.

En el API existen funciones como GetPixel (...) que puede sustituir a Canvas->Pixels(x,y) y son más rápidas. Esta función te devuelve un dato de tipo COLORREEF, pero vas a tener el mismo problema ya que este tipo de datos es del mismo formato que TColor.
 &lt;_&lt;

13
C++ Builder / Re: Pregunta
« en: Martes 7 de Septiembre de 2004, 11:16 »
Creo que la solución que te ha dado nuestro colega no te va a servir, ya que mientras que esté en ejecución cualquier bucle (no solo el While) de tu programa los eventos de los diferente controles no están en activo, de hecho, el programa parecerá colgado y no hará nada.

Si deseas que un buque este en activo mientras que el usuario no pulse algún botón (me imagino que eso es lo que quieres), una de las soluciones es  incluir un objeto TTimer. Este objeto activa una hilo paralelo de ejecución que es visitado cada cierto tiempo.  A partir de este objeto se puede ejecutar cualquier función para hacer lo que sea. Lo bueno de este objeto es que no para la ejecución del hilo principal del programa y los eventos de los controles estarán en activo. De esta forma puedes usar una variable bool que se active cuando pulses el botón deseado. Sólo tienes que consultar esta variable en la función o funciones asociadas al hilo de ejecución generado por TTimer....., y ya lo tienes.

Revisa la información de TTimer, puede ser la solución.

Páginas: [1]