commit 52703a744167dd9d4b4399bc21fab370154d723f Author: jdg Date: Sun Sep 12 22:11:31 2021 +0200 First commit 25/07/1999 diff --git a/ActImg/Copia de actimg.cpp b/ActImg/Copia de actimg.cpp new file mode 100644 index 0000000..5afe21a --- /dev/null +++ b/ActImg/Copia de actimg.cpp @@ -0,0 +1,150 @@ +//--------------------------------------------------------------------------- +#include +#pragma hdrstop + +#include "actimg.h" + +#pragma package(smart_init) + +//--------------------------------------------------------------------------- +// ValidCtrCheck is used to assure that the components created do not have +// any pure virtual functions. +// +static inline TActiveImage *ValidCtrCheck() +{ + return new TActiveImage(NULL); +} +//--------------------------------------------------------------------------- +__fastcall TActiveImage::TActiveImage(TComponent* Owner) +// : TGraphicControl(Owner) +: TButton(Owner) +{ + mcaptured = false; + FGlyph = new Graphics::TCanvas; + FGlyph->Brush->Color = clNone; + FGlyph->Brush->Style = bsClear; + FGlyph->CopyMode = cmSrcCopy; + + GlyphNormal = new Graphics::TPicture; + GlyphOver = new Graphics::TPicture; + GlyphPress = new Graphics::TPicture; + + vAutoSize = false; +} +//--------------------------------------------------------------------------- +namespace Actimg +{ + void __fastcall PACKAGE Register() + { + TComponentClass classes[1] = {__classid(TActiveImage)}; + RegisterComponents("JD Soft.", classes, 0); + } +} +//--------------------------------------------------------------------------- +void __fastcall TActiveImage::CreateParams(TCreateParams &Params) +{ + TButton::CreateParams(Params); // La clase ascendente se ocupará de establecer los parámetros generales +// Params.ExStyle = Params.ExStyle | WS_EX_TRANSPARENT; + Params.Style = Params.Style | BS_OWNERDRAW; + TButton::ControlStyle = TControlStyle(); +} +//--------------------------------------------------------------------------- +void __fastcall TActiveImage::CNMeasureItem(TWMMeasureItem& Mensaje) +{ + Mensaje.MeasureItemStruct->itemWidth = Width; + Mensaje.MeasureItemStruct->itemHeight = Height; +} +//--------------------------------------------------------------------------- +// Cada vez que haya que dibujar el control se llamará a este método +void __fastcall TActiveImage::CNDrawItem(TWMDrawItem& Mensaje) +{ + Graphics::TBitmap *Bitmap; + + Bitmap = GlyphNormal->Bitmap; + + if (Mensaje.DrawItemStruct->itemState & ODS_SELECTED) // El botón está pulsado + Bitmap = GlyphPress->Bitmap; + else + // Si el botón está desactivado + if (! Enabled ) + Bitmap = GlyphPress->Bitmap; + else + if ( mcaptured ) + Bitmap = GlyphOver->Bitmap; + + FGlyph->Handle = Mensaje.DrawItemStruct->hDC; + + FGlyph->BrushCopy( ClientRect, Bitmap, Rect( 0, 0, Bitmap->Width-1, Bitmap->Height-1 ), Bitmap->TransparentColor ); + + // El Handle de FCanvas será el Hdc enviado en Mensaje.DrawItemStruct, + // lo que nos permitirá dibujar en la superficie del botón + FGlyph->Handle = 0; +} +//--------------------------------------------------------------------------- +// Al cambiar el estado del botón +void __fastcall TActiveImage::SetButtonStyle(bool ADefault) +{ + Refresh(); // simplemente redibujar +} +//--------------------------------------------------------------------------- +__fastcall TActiveImage::~TActiveImage() +{ + delete FGlyph; + delete GlyphNormal; + delete GlyphOver; + delete GlyphPress; +} +//--------------------------------------------------------------------------- +void __fastcall TActiveImage::MouseMove( Classes::TShiftState Shift, int X, int Y ) +{ + if( ! mcaptured ) + { + SetCapture( Handle ); + mcaptured = true; + Refresh(); + } + if( (X<0) || (Y<0) || (X>Width) || (Y>Height)) + { + ReleaseCapture(); + mcaptured = false; + Refresh(); + }else{ + TButton::MouseMove( Shift, X, Y ); + } +} +//--------------------------------------------------------------------------- +void __fastcall TActiveImage::Click( void ) +{ + TButton::Click(); + ReleaseCapture(); + mcaptured = false; +} +//--------------------------------------------------------------------------- +void __fastcall TActiveImage::SetGlyphOver( Graphics::TPicture *val ) +{ + GlyphOver -> Assign( val ); +} +//--------------------------------------------------------------------------- +void __fastcall TActiveImage::SetGlyphPress( Graphics::TPicture *val ) +{ + GlyphPress -> Assign( val ); +} +//--------------------------------------------------------------------------- +void __fastcall TActiveImage::SetGlyphNormal( Graphics::TPicture *val ) +{ + GlyphNormal -> Assign( val ); +} +//--------------------------------------------------------------------------- +void __fastcall TActiveImage::SetAutoSize( bool val ) +{ + vAutoSize = val; + // Facilitamos la anchura y altura del control + if ( vAutoSize && ! GlyphNormal->Graphic->Empty ) + { + Width = GlyphNormal->Width; + Height = GlyphNormal->Height; + } +} +//--------------------------------------------------------------------------- + + diff --git a/ActImg/Copia de actimg.h b/ActImg/Copia de actimg.h new file mode 100644 index 0000000..46486a1 --- /dev/null +++ b/ActImg/Copia de actimg.h @@ -0,0 +1,58 @@ +//--------------------------------------------------------------------------- +#ifndef ActImgH +#define ActImgH +//--------------------------------------------------------------------------- +#include +#include +#include +#include +#include + +//--------------------------------------------------------------------------- +class PACKAGE TActiveImage : // public TGraphicControl + public TButton +{ +private: + bool mcaptured; + void __fastcall MouseMove( Classes::TShiftState Shift, int X, int Y); + + TCanvas * FGlyph; // Para dibujar + // Mensaje de Windows solicitando el tamaño del control + void __fastcall CNMeasureItem(TWMMeasureItem& Mensaje); + // Mensaje de Windows solicitando que el control sea dibujado + void __fastcall CNDrawItem(TWMDrawItem& Mensaje); + BEGIN_MESSAGE_MAP + MESSAGE_HANDLER(CN_MEASUREITEM, TWMMeasureItem, CNMeasureItem); + MESSAGE_HANDLER(CN_DRAWITEM, TWMDrawItem, CNDrawItem); + END_MESSAGE_MAP(TButton); + +protected: + // Parámetros para la creación del control + void __fastcall CreateParams(TCreateParams &Params); + // Cambio del estado del botón + void __fastcall SetButtonStyle(bool ADefault); + + void __fastcall SetGlyphOver( Graphics::TPicture *val ); + void __fastcall SetGlyphPress( Graphics::TPicture *val ); + void __fastcall SetGlyphNormal( Graphics::TPicture *val ); + + bool vAutoSize; + void __fastcall SetAutoSize( bool val ); + + void __fastcall Click( void ); + + +public: + Graphics::TPicture *GlyphOver,*GlyphNormal, *GlyphPress; + + __fastcall TActiveImage(TComponent* Owner); + __fastcall ~TActiveImage(); + +__published: + __property Graphics::TPicture *Picture_Normal={read=GlyphNormal, write=SetGlyphNormal}; + __property Graphics::TPicture *Picture_Over={read=GlyphOver, write=SetGlyphOver}; + __property Graphics::TPicture *Picture_Press={read=GlyphPress, write=SetGlyphPress}; + __property bool AutoSize={read=vAutoSize, write=SetAutoSize, default=false }; +}; +//--------------------------------------------------------------------------- +#endif diff --git a/ActImg/actimg.cpp b/ActImg/actimg.cpp new file mode 100644 index 0000000..00fc7a6 --- /dev/null +++ b/ActImg/actimg.cpp @@ -0,0 +1,168 @@ +//--------------------------------------------------------------------------- +#include +#pragma hdrstop + +#include "actimg.h" + +#pragma package(smart_init) + +//--------------------------------------------------------------------------- +// ValidCtrCheck is used to assure that the components created do not have +// any pure virtual functions. +// +static inline TActiveImage *ValidCtrCheck() +{ + return new TActiveImage(NULL); +} +//--------------------------------------------------------------------------- +#define FGlyph Canvas +__fastcall TActiveImage::TActiveImage(TComponent* Owner) + : TCustomControl(Owner) +{ + CState = CSt_NORMAL; + + Width = 50; + Height = 50; + + FGlyph->Brush->Color = clNone; + FGlyph->Brush->Style = bsClear; + FGlyph->CopyMode = cmSrcCopy; + + RCanvas = Canvas; + + GlyphNormal = new Graphics::TBitmap; + GlyphOver = new Graphics::TBitmap; + GlyphPress = new Graphics::TBitmap; + + vAutoSize = false; + + MouseCaptured = false; +} +//--------------------------------------------------------------------------- +namespace Actimg +{ + void __fastcall PACKAGE Register() + { + TComponentClass classes[1] = {__classid(TActiveImage)}; + RegisterComponents("JD Soft.", classes, 0); + } +} +//--------------------------------------------------------------------------- +void __fastcall TActiveImage::Paint() +{ + Graphics::TBitmap *Bitmap; + + Brush->Color = clNone; + Brush->Style = bsClear; + + switch ( CState ) + { + case CSt_PRESS: + Bitmap = GlyphPress; + break; + case CSt_OVER: + Bitmap = GlyphOver; + break; + case CSt_NORMAL: + default: + Bitmap = GlyphNormal; + break; + } + + if ( ! Bitmap -> Empty ) + FGlyph->BrushCopy( ClientRect, Bitmap, Rect( 0, 0, Bitmap->Width-1, Bitmap->Height-1 ), Bitmap->TransparentColor ); +} +//--------------------------------------------------------------------------- +__fastcall TActiveImage::~TActiveImage() +{ + delete GlyphNormal; + delete GlyphOver; + delete GlyphPress; +} +//--------------------------------------------------------------------------- +void __fastcall TActiveImage::MouseMove( Classes::TShiftState Shift, int X, int Y ) +{ +/* + if( CState != CSt_OVER && CState != CSt_PRESS ) + { + if ( !MouseCaptured && SetCapture( Handle ) != NULL ) MouseCaptured = true; + CState = CSt_OVER; + Refresh(); + } + if( (X<0) || (Y<0) || (X>Width) || (Y>Height)) + { + if ( ReleaseCapture() != 0 ) MouseCaptured = false; + CState = CSt_NORMAL; + Refresh(); + }else{ + TCustomControl::MouseMove( Shift, X, Y ); + } +*/ +} +//--------------------------------------------------------------------------- +void __fastcall TActiveImage::MouseDown( TMouseButton Button, Classes::TShiftState Shift, int X, int Y) +{ + CState = CSt_PRESS; + Refresh(); +// if ( ReleaseCapture() != 0 ) MouseCaptured = false; + TCustomControl::MouseDown( Button, Shift, X, Y ); +} +//--------------------------------------------------------------------------- +void __fastcall TActiveImage::MouseUp( TMouseButton Button, Classes::TShiftState Shift, int X, int Y) +{ + CState = CSt_NORMAL; +// if ( ReleaseCapture() != 0 ) { MouseCaptured = false; Refresh(); } + TCustomControl::MouseUp( Button, Shift, X, Y ); + MouseMove( Shift, X, Y ); +} +//--------------------------------------------------------------------------- +void __fastcall TActiveImage::SetGlyphOver( Graphics::TBitmap *val ) +{ + GlyphOver -> Assign( val ); +} +//--------------------------------------------------------------------------- +void __fastcall TActiveImage::SetGlyphPress( Graphics::TBitmap *val ) +{ + GlyphPress -> Assign( val ); +} +//--------------------------------------------------------------------------- +void __fastcall TActiveImage::SetGlyphNormal( Graphics::TBitmap *val ) +{ + GlyphNormal -> Assign( val ); +} +//--------------------------------------------------------------------------- +void __fastcall TActiveImage::SetAutoSize( bool val ) +{ + vAutoSize = val; + // Facilitamos la anchura y altura del control + if ( vAutoSize && ! GlyphNormal->Empty ) + { + Width = GlyphNormal->Width; + Height = GlyphNormal->Height; + } +} +//--------------------------------------------------------------------------- +void __fastcall TActiveImage::CreateParams(TCreateParams &Params) +{ + TCustomControl::CreateParams(Params); // La clase ascendente se ocupará de establecer los parámetros generales + Params.ExStyle = Params.ExStyle | WS_EX_TRANSPARENT; + +// Params.Style = Params.Style | BS_OWNERDRAW; +// TButton::ControlStyle = TControlStyle(); +} +//--------------------------------------------------------------------------- +void __fastcall TActiveImage::CMMouseEnter ( TMessage& Msg ) +{ + CState = CSt_OVER; + Refresh(); + inherited::Dispatch ( &Msg ); +} + +void __fastcall TActiveImage::CMMouseLeave ( TMessage& Msg ) +{ + CState = CSt_NORMAL; + Refresh(); + inherited::Dispatch ( &Msg ); +} + + diff --git a/ActImg/actimg.dcr b/ActImg/actimg.dcr new file mode 100644 index 0000000..f314138 Binary files /dev/null and b/ActImg/actimg.dcr differ diff --git a/ActImg/actimg.h b/ActImg/actimg.h new file mode 100644 index 0000000..a6efc26 --- /dev/null +++ b/ActImg/actimg.h @@ -0,0 +1,72 @@ +//--------------------------------------------------------------------------- +#ifndef ActImgH +#define ActImgH +//--------------------------------------------------------------------------- +#include +#include +#include +#include +#include + +//--------------------------------------------------------------------------- +class PACKAGE TActiveImage : public TCustomControl +{ +private: +// bool mcaptured; + enum CStates { CSt_NORMAL, CSt_PRESS, CSt_OVER } CState; + void __fastcall MouseMove( Classes::TShiftState Shift, int X, int Y); + void __fastcall MouseDown( TMouseButton Button, Classes::TShiftState Shift, int X, int Y); + void __fastcall MouseUp( TMouseButton Button, Classes::TShiftState Shift, int X, int Y); + +protected: + bool MouseCaptured; + + void __fastcall Paint(); + + void __fastcall CreateParams(TCreateParams &Params); + + void __fastcall SetGlyphOver( Graphics::TBitmap *val ); + void __fastcall SetGlyphPress( Graphics::TBitmap *val ); + void __fastcall SetGlyphNormal( Graphics::TBitmap *val ); + + bool vAutoSize; + void __fastcall SetAutoSize( bool val ); + + MESSAGE void __fastcall CMMouseEnter ( TMessage& Msg ); + MESSAGE void __fastcall CMMouseLeave ( TMessage& Msg ); + +public: + Graphics::TBitmap *GlyphOver,*GlyphNormal, *GlyphPress; + Graphics::TCanvas *RCanvas; + + __fastcall TActiveImage(TComponent* Owner); + __fastcall ~TActiveImage(); + +__published: + __property Graphics::TBitmap *Glyph_Normal={read=GlyphNormal, write=SetGlyphNormal}; + __property Graphics::TBitmap *Glyph_Over={read=GlyphOver, write=SetGlyphOver}; + __property Graphics::TBitmap *Glyph_Press={read=GlyphPress, write=SetGlyphPress}; + __property bool AutoSize={read=vAutoSize, write=SetAutoSize, default=false }; +/* + __property TMouseEvent OnMouseDown = {read=FOnMouseDown, write=FOnMouseDown}; + __property TMouseMoveEvent OnMouseMove = {read=FOnMouseMove, write=FOnMouseMove}; + __property TMouseEvent OnMouseUp = {read=FOnMouseUp, write=FOnMouseUp}; + + __property Classes::TNotifyEvent OnClick = {read=FOnClick, write=FOnClick}; + __property Classes::TNotifyEvent OnDblClick = {read=FOnDblClick, write=FOnDblClick}; +*/ + __property OnMouseDown; + __property OnMouseMove; + __property OnMouseUp; + + __property OnClick; + __property OnDblClick; + + BEGIN_MESSAGE_MAP + VCL_MESSAGE_HANDLER ( CM_MOUSEENTER, TMessage, CMMouseEnter ) + VCL_MESSAGE_HANDLER ( CM_MOUSELEAVE, TMessage, CMMouseLeave ) + END_MESSAGE_MAP(inherited); + +}; +//--------------------------------------------------------------------------- +#endif diff --git a/ActImg/actimg.obj b/ActImg/actimg.obj new file mode 100644 index 0000000..baa5990 Binary files /dev/null and b/ActImg/actimg.obj differ diff --git a/DigitNum/DigitNum.cpp b/DigitNum/DigitNum.cpp new file mode 100644 index 0000000..1653c2e --- /dev/null +++ b/DigitNum/DigitNum.cpp @@ -0,0 +1,341 @@ +//--------------------------------------------------------------------------- +#include +#pragma hdrstop +#include + +#include "DigitNum.h" +#pragma package(smart_init) +//--------------------------------------------------------------------------- +// ValidCtrCheck is used to assure that the components created do not have +// any pure virtual functions. +// + +static inline void ValidCtrCheck(TDigitNum *) +{ + new TDigitNum(NULL); +} +//--------------------------------------------------------------------------- +__fastcall TDigitNum::TDigitNum(TComponent* Owner) + : TGraphicControl(Owner) +{ + Width = 96; // Establecemos valores por defecto + Height = 33; + + vCerosIzq = false; + + BorderStyle = bsSingle; + cLED_ON =clRed; + cLED_OFF=clBtnFace; + cLED_BRDon=clBlack; + cLED_BRDoff=clGray; + + FValor = 0; + // Obtenemos la longitud de la frase. ( En d¡gitos ) + FLen = 4; + + FBrush = new TBrush; + FBrush -> Color = clBtnFace; + FBrush -> Style = bsClear; + FBrush -> OnChange = CambioAtributo; + Invalidate(); +} +//--------------------------------------------------------------------------- +namespace Digitnum +{ + void __fastcall PACKAGE Register() + { + TComponentClass classes[1] = {__classid(TDigitNum)}; + RegisterComponents("JD soft.", classes, 0); + } +} +//--------------------------------------------------------------------------- +__fastcall TDigitNum::~TDigitNum() +{ + delete FBrush; +} +//--------------------------------------------------------------------------- +void __fastcall TDigitNum::SetCadena( int NuevaCadena ) +{ + FValor = NuevaCadena; + Invalidate(); +} +//--------------------------------------------------------------------------- + // Este procedimiento es llamado cada vez que se modifica + // la brocha, el lápiz o el tipo de letra +void __fastcall TDigitNum::CambioAtributo( TObject * Sender ) +{ + Invalidate(); // tras lo cual habrá que redibujar el componente +} +//--------------------------------------------------------------------------- +void __fastcall TDigitNum::SetBrush( TBrush * NuevoValor ) +{ + FBrush -> Assign( NuevoValor ); + Invalidate(); // y volver a dibujar el componente +} +//--------------------------------------------------------------------------- +void __fastcall TDigitNum::SetLedOn( TColor NuevoValor ) +{ + cLED_ON = ( NuevoValor ); + Invalidate(); // y volver a dibujar el componente +} +//--------------------------------------------------------------------------- +void __fastcall TDigitNum::SetLedOff( TColor NuevoValor ) +{ + cLED_OFF = ( NuevoValor ); + Invalidate(); // y volver a dibujar el componente +} +//--------------------------------------------------------------------------- +void __fastcall TDigitNum::SetLedBrdOn( TColor NuevoValor ) +{ + cLED_BRDon = ( NuevoValor ); + Invalidate(); // y volver a dibujar el componente +} +//--------------------------------------------------------------------------- +void __fastcall TDigitNum::SetLedBrdOff( TColor NuevoValor ) +{ + cLED_BRDoff = ( NuevoValor ); + Invalidate(); // y volver a dibujar el componente +} +void __fastcall TDigitNum::SetNumDigit( int NuevoValor ) +{ + if ( NuevoValor > 0 ) + { + FLen = NuevoValor; + Invalidate(); // y volver a dibujar el componente + } +} + +//--------------------------------------------------------------------------- +void __fastcall TDigitNum::Paint() +{ + TRect Area; + + // Preparamos un RECT definiendo el área ocupada por el componente. + Area = GetClientRect(); + + // Dibujar en el Canvas del componente + + // Establecer la brocha, lápiz y tipo de letra a usar + Canvas -> Brush = FBrush; + + // Rellenamos el área con la trama y color seleccionados + Canvas -> FillRect( Area ); + + DibujaLD(); + +} +//--------------------------------------------------------------------------- +void __fastcall TDigitNum::SetCerosIzq( bool NuevoValor ) +{ + vCerosIzq = NuevoValor; + Invalidate(); +} +//--------------------------------------------------------------------------- +void __fastcall TDigitNum::DibujaLD( void ) +{ + // Proceso de redibujado de los digitos... + int AnchoDigito, i, Digito; + // ¿ Cuanto espacio le corresponde a cada dígito... ? + AnchoDigito = Width / FLen; + + // Numero de digitos de la cifra... + int Digitos = 1; + while ( FValor >= (int)pow10(Digitos) ) Digitos++; + + i = 0; + DibujaDigito( (( FValor % (int)pow10(i+1) ) / (int)pow10(i) ), AnchoDigito, AnchoDigito * (FLen - i - 1) ); + for ( i = 1; i < FLen ; i++ ) + { + Digito = (( FValor % (int)pow10(i+1) ) / (int)pow10(i) ); + if ( !CerosIzq && i >= Digitos )//!Digito && !CerosIzq ) + DibujaDigito( 10, AnchoDigito, AnchoDigito * (FLen - i - 1) ); + else + DibujaDigito( Digito, AnchoDigito, AnchoDigito * (FLen - i - 1) ); + } + + + +} +//--------------------------------------------------------------------------- +void __fastcall TDigitNum::DibujaDigito( short int Digito, short int AnchoDigit, short int PosInicial ) +{ + int PMedio, PVert, Medio, MedioL, MedioH; + + POINT P1[5], P2[7], P3[5], P4[5], P5[5], P6[5], P7[5]; + + PMedio = (Height-1) / 8; + PVert = AnchoDigit / 5; + Medio = (Height-1)/2;//( ( ( PMedio * 6 ) - ( PMedio * 4 ) ) / 2 ) + ( PMedio*4 ); + MedioL = Medio - ( PMedio / 2 ); + MedioH = Medio + ( PMedio / 2 ); + + /* _ _ _ _ _ _ _ + |_| _ _ _ _ | + 1 __ |_| |#|#|#|_| | + _ _ _ _ ___/ |_| |#|_|#|_| | + |_| |_| |_| 4 |2| 5 ______ |_| |#|#|#|_| | + |_| |_| |_| 6 |_| 7 ___ |_| |#|_|#|_| | + \__ |_| |#|#|#|_| | + 3 |_|_ _ _ _ _ _| + */ + // 1 + // ______________ + // \ / + // \__________/ + // + P1[0] . x = 1 + 1 + PosInicial; P1[0] . y = 0; + P1[1] . x = PVert * 4 - 1 + PosInicial; P1[1] . y = 0; + P1[2] . x = PVert * 3 - 1 + PosInicial; P1[2] . y = PMedio*1 - 1; + P1[3] . x = PVert * 1 + 1 + PosInicial; P1[3] . y = PMedio*1 - 1; + P1[4] . x = 1 + 1 + PosInicial; P1[4] . y = 0; + // 2 + // __________ + // / \ + // \__________/ + // + P2[0] . x = 2 + PosInicial; P2[0] . y = Medio ; + P2[1] . x = PVert * 1 + 1 + PosInicial; P2[1] . y = MedioL + 1; + P2[2] . x = PVert * 3 - 1 + PosInicial; P2[2] . y = MedioL + 1; + P2[3] . x = PVert * 4 - 2 + PosInicial; P2[3] . y = Medio ; + P2[4] . x = PVert * 3 - 1 + PosInicial; P2[4] . y = MedioH - 1; + P2[5] . x = PVert * 1 + 1 + PosInicial; P2[5] . y = MedioH - 1; + P2[6] . x = 2 + PosInicial; P2[6] . y = Medio ; + // 3 + // __________ + // / \ + // /____________\ + // + P3[0] . x = PVert * 1 + 1 + PosInicial; P3[0] . y = PMedio*7 + 1; + P3[1] . x = PVert * 3 - 1 + PosInicial; P3[1] . y = PMedio*7 + 1; + P3[2] . x = PVert * 4 - 1 + PosInicial; P3[2] . y = PMedio*8 ; + P3[3] . x = PVert * 0 + 2 + PosInicial; P3[3] . y = PMedio*8 ; + P3[4] . x = PVert * 1 + 1 + PosInicial; P3[4] . y = PMedio*7 + 1; + // . + // |\ + // | | + // 4 | | + // | | + // |/ + // · + P4[0] . x = 0 + PosInicial; P4[0] . y = 1; + P4[1] . x = PVert * 1 - 1 + PosInicial; P4[1] . y = PMedio*1 + 1; + P4[2] . x = PVert * 1 - 1 + PosInicial; P4[2] . y = MedioL - 1; + P4[3] . x = 0 + PosInicial; P4[3] . y = Medio - 1; + P4[4] . x = 0 + PosInicial; P4[4] . y = 1; + // . + // /| + // | | + // 5 | | + // | | + // \| + // · + P5[0] . x = PVert * 4 + 1 + PosInicial; P5[0] . y = 1; + P5[1] . x = PVert * 4 + 1 + PosInicial; P5[1] . y = Medio - 1; + P5[2] . x = PVert * 3 + 1 + PosInicial; P5[2] . y = MedioL - 1; + P5[3] . x = PVert * 3 + 1 + PosInicial; P5[3] . y = PMedio*1 + 1; + P5[4] . x = PVert * 4 + 1 + PosInicial; P5[4] . y = 1; + // . + // |\ + // | | + // 6 | | + // | | + // |/ + // · + P6[0] . x = 0 + PosInicial; P6[0] . y = Medio + 1; + P6[1] . x = PVert * 1 - 1 + PosInicial; P6[1] . y = MedioH + 1; + P6[2] . x = PVert * 1 - 1 + PosInicial; P6[2] . y = PMedio*7 - 1; + P6[3] . x = 0 + PosInicial; P6[3] . y = PMedio*8 - 1; + P6[4] . x = 0 + PosInicial; P6[4] . y = MedioH + 1; + // . + // /| + // | | + // 7 | | + // | | + // \| + // · + P7[0] . x = PVert * 4 + 1 + PosInicial; P7[0] . y = Medio + 1; + P7[1] . x = PVert * 4 + 1 + PosInicial; P7[1] . y = PMedio*8 - 1; + P7[2] . x = PVert * 3 + 1 + PosInicial; P7[2] . y = PMedio*7 - 1; + P7[3] . x = PVert * 3 + 1 + PosInicial; P7[3] . y = MedioH + 1; + P7[4] . x = PVert * 4 + 1 + PosInicial; P7[4] . y = Medio + 1; + + + // 1 === 0, 2, 3, 5, 6, 7, 8, 9, + if ( Digito != 1 && Digito != 4 && Digito != 10 ) + { + Canvas -> Brush -> Color = cLED_ON; + Canvas -> Pen -> Color = cLED_BRDon; + } else { + Canvas -> Brush -> Color = cLED_OFF; + Canvas -> Pen -> Color = cLED_BRDoff; + } + Canvas -> Polygon( P1, 4 ); + // 2 === 2, 3, 4, 5, 6, 8, 9 + if ( Digito != 0 && Digito != 1 && Digito != 7 && Digito != 10 ) + { + Canvas -> Brush -> Color = cLED_ON; + Canvas -> Pen -> Color = cLED_BRDon; + } else { + Canvas -> Brush -> Color = cLED_OFF; + Canvas -> Pen -> Color = cLED_BRDoff; + } + Canvas -> Polygon( P2, 6 ); + // 3 === 0, 2, 3, 5, 6, 8, 9 + if ( Digito != 1 && Digito != 4 && Digito != 7 && Digito != 10 ) + { + Canvas -> Brush -> Color = cLED_ON; + Canvas -> Pen -> Color = cLED_BRDon; + } else { + Canvas -> Brush -> Color = cLED_OFF; + Canvas -> Pen -> Color = cLED_BRDoff; + } + Canvas -> Polygon( P3, 4 ); + // 4 === 0, 4, 5, 6, 8, 9 + if ( Digito != 1 && Digito != 2 && Digito != 3&& Digito != 7 && Digito != 10 ) + { + Canvas -> Brush -> Color = cLED_ON; + Canvas -> Pen -> Color = cLED_BRDon; + } else { + Canvas -> Brush -> Color = cLED_OFF; + Canvas -> Pen -> Color = cLED_BRDoff; + } + Canvas -> Polygon( P4, 4 ); + // 5 === 0, 1, 2, 3, 4, 7, 8, 9 + if ( Digito != 5 && Digito != 6 && Digito != 10 ) + { + Canvas -> Brush -> Color = cLED_ON; + Canvas -> Pen -> Color = cLED_BRDon; + } else { + Canvas -> Brush -> Color = cLED_OFF; + Canvas -> Pen -> Color = cLED_BRDoff; + } + Canvas -> Polygon( P5, 4 ); + // 6 === 0, 2, 6, 8 + if ( Digito == 0 || Digito == 2 || Digito == 6 || Digito == 8 ) + { + Canvas -> Brush -> Color = cLED_ON; + Canvas -> Pen -> Color = cLED_BRDon; + } else { + Canvas -> Brush -> Color = cLED_OFF; + Canvas -> Pen -> Color = cLED_BRDoff; + } + Canvas -> Polygon( P6, 4 ); + // 7 === 0, 1, 3, 4, 5, 6, 7, 8, 9 + if ( Digito != 2 && Digito != 10 ) + { + Canvas -> Brush -> Color = cLED_ON; + Canvas -> Pen -> Color = cLED_BRDon; + } else { + Canvas -> Brush -> Color = cLED_OFF; + Canvas -> Pen -> Color = cLED_BRDoff; + } + Canvas -> Polygon( P7, 4 ); +} +//--------------------------------------------------------------------------- +void __fastcall TDigitNum::SetBorderStyle( TBorderStyle NuevoValor ) +{ + FBorderStyle = NuevoValor; + Invalidate(); // y volver a dibujar el componente +} + + diff --git a/DigitNum/DigitNum.dcr b/DigitNum/DigitNum.dcr new file mode 100644 index 0000000..5b330f4 Binary files /dev/null and b/DigitNum/DigitNum.dcr differ diff --git a/DigitNum/DigitNum.h b/DigitNum/DigitNum.h new file mode 100644 index 0000000..0dae019 --- /dev/null +++ b/DigitNum/DigitNum.h @@ -0,0 +1,72 @@ +//--------------------------------------------------------------------------- +#ifndef DigitNumH +#define DigitNumH +//--------------------------------------------------------------------------- +#include +#include +#include +#include +//--------------------------------------------------------------------------- +class PACKAGE TDigitNum : public TGraphicControl +{ +private: + TBorderStyle FBorderStyle; // Con borde o sin borde + TBrush *FBrush; // Para el relleno del fondo + TColor cLED_ON; // Color de la LED encendida y + TColor cLED_OFF; // apagada + TColor cLED_BRDon; // Color para el borde + TColor cLED_BRDoff; // Color para el borde + + + + int FValor; // Valor inicial a mostrar + int FLen; // Número de digitos a mostrar + bool vCerosIzq; + + // Evento OnChange, dirigido a la siguiente función: + void __fastcall CambioAtributo( TObject * Sender ); + + // Dibujo del letrero digital + void __fastcall DibujaLD( void ); + void __fastcall DibujaDigito( short int Digito, short int AnchoDigit, short int PosInicial ); + +protected: + // Redefinimos el método Paint, que será llamado cada vez + // que sea necesario redibujar el componente. + void __fastcall Paint(); +public: + void __fastcall SetNumDigit( int NuevoValor ); + void __fastcall SetBrush( TBrush *NuevoValor ); + void __fastcall SetBorderStyle( TBorderStyle NuevoValor ); + + void __fastcall SetLedOn( TColor NuevoValor ); + void __fastcall SetLedOff( TColor NuevoValor ); + void __fastcall SetLedBrdOn( TColor NuevoValor ); + void __fastcall SetLedBrdOff( TColor NuevoValor ); + void __fastcall SetCerosIzq( bool NuevoValor ); + + + // Cambia la cadena a mostrar: "at RunTime" + void __fastcall SetCadena( int NuevaCadena ); + + __fastcall TDigitNum(TComponent* Owner); + __fastcall ~TDigitNum(); +__published: + __property TBorderStyle BorderStyle = { read = FBorderStyle, write = SetBorderStyle, default=bsSingle }; + __property TBrush *Brush = { read = FBrush, write = SetBrush }; + __property TColor LED_ON = { read = cLED_ON, write = SetLedOn, default = clRed }; + __property TColor LED_OFF = { read = cLED_OFF, write = SetLedOff, default = clBtnFace }; + __property TColor LED_BRDon = { read = cLED_BRDon, write = SetLedBrdOn, default = clBlack }; + __property TColor LED_BRDoff = { read = cLED_BRDoff, write = SetLedBrdOff, default = clGray }; + + __property Left ; + __property Top ; + __property Width ; + __property Height ; + + __property bool CerosIzq = { read = vCerosIzq, write = SetCerosIzq, default = false }; + __property int Value = { read = FValor, write = SetCadena }; + __property int MaxLength = { read = FLen , write = SetNumDigit , default = 4 }; +}; +//--------------------------------------------------------------------------- +#endif diff --git a/ElasticForm (building)/ElasticForm.cpp b/ElasticForm (building)/ElasticForm.cpp new file mode 100644 index 0000000..076dafa --- /dev/null +++ b/ElasticForm (building)/ElasticForm.cpp @@ -0,0 +1,48 @@ +//--------------------------------------------------------------------------- +#include +#pragma hdrstop + +#include "ElasticForm.h" +#pragma package(smart_init) +//--------------------------------------------------------------------------- +// ValidCtrCheck is used to assure that the components created do not have +// any pure virtual functions. +// + +static inline void ValidCtrCheck(TElasticForm *) +{ + new TElasticForm(NULL); +} +//--------------------------------------------------------------------------- +__fastcall TElasticForm::TElasticForm(TComponent* Owner) + : TControl(Owner) +{ + nOwner = Owner; +} +//--------------------------------------------------------------------------- +namespace Elasticform +{ + void __fastcall PACKAGE Register() + { + TComponentClass classes[1] = {__classid(TElasticForm)}; + RegisterComponents("JD soft.", classes, 0); + } +} +//--------------------------------------------------------------------------- +void __fastcall ResizeALL(void) +{ + int i; + // Nos damos un vueltazo por todos los componectes visibles del formulario + for ( i=0; iComponentCount; i ++ ) + { + if ( nOwner->Components[i]->ClassNameIs( "TButton" ) ) + { + //cast the component to a TButton * + button = (TButton *)(nOwner->Components[i]); + } + } + + +} +//--------------------------------------------------------------------------- + diff --git a/ElasticForm (building)/ElasticForm.h b/ElasticForm (building)/ElasticForm.h new file mode 100644 index 0000000..ca71b2e --- /dev/null +++ b/ElasticForm (building)/ElasticForm.h @@ -0,0 +1,22 @@ +//--------------------------------------------------------------------------- +#ifndef ElasticFormH +#define ElasticFormH +//--------------------------------------------------------------------------- +#include +#include +#include +#include +//--------------------------------------------------------------------------- +class PACKAGE TElasticForm : public TControl +{ +private: + TComponent * nOwner; +protected: +public: + void __fastcall ResizeALL(void); + __fastcall TElasticForm(TComponent* Owner); +__published: +}; +//--------------------------------------------------------------------------- +#endif + \ No newline at end of file diff --git a/JD_soft.bpi b/JD_soft.bpi new file mode 100644 index 0000000..3d34122 Binary files /dev/null and b/JD_soft.bpi differ diff --git a/JD_soft.bpk b/JD_soft.bpk new file mode 100644 index 0000000..f6d862c --- /dev/null +++ b/JD_soft.bpk @@ -0,0 +1,140 @@ +# --------------------------------------------------------------------------- +VERSION = BCB.03 +# --------------------------------------------------------------------------- +!ifndef BCB +BCB = $(MAKEDIR)\.. +!endif +# --------------------------------------------------------------------------- +PROJECT = JD_soft.bpl +OBJFILES = JD_soft.obj ActImg\actimg.obj LetreroDigital\LetreroDigital.obj \ + DigitNum\DigitNum.obj +RESFILES = JD_soft.res ActImg\actimg.dcr LetreroDigital\LetreroDigital.dcr \ + DigitNum\DigitNum.dcr +RESDEPEN = $(RESFILES) +LIBFILES = +LIBRARIES = CDopping.lib VCLDB35.lib +SPARELIBS = vcl35.lib vclx35.lib VCLDB35.lib CDopping.lib +PACKAGES = VCLX35.bpi VCL35.bpi +PATHASM = .; +PATHCPP = .;ActImg;LetreroDigital;DigitNum +PATHPAS = .; +PATHRC = .; +DEBUGLIBPATH = $(BCB)\lib\debug +RELEASELIBPATH = $(BCB)\lib\release +DEFFILE = +# --------------------------------------------------------------------------- +CFLAG1 = -Od -Hc -w -Ve -r- -k -y -v -vi- -c -b- -w-par -w-inl -Vx +CFLAG2 = -DUSEPACKAGES \ + -Ij:\cbuilder3\projects;..\ctrlmstr;digitnum;letrerodigital;actimg;$(BCB)\bin;$(BCB)\objrepos;$(BCB)\projects;$(BCB)\include;$(BCB)\include\vcl \ + -H=$(BCB)\lib\vcld.csm +CFLAG3 = -5 +PFLAGS = -AWinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE \ + -DUSEPACKAGES \ + -Uj:\cbuilder3\projects;..\ctrlmstr;..\componentes;digitnum;letrerodigital;actimg;$(BCB)\bin;$(BCB)\objrepos;$(BCB)\projects;$(BCB)\lib\obj;$(BCB)\lib;$(DEBUGLIBPATH) \ + -Ij:\cbuilder3\projects;..\ctrlmstr;digitnum;letrerodigital;actimg;$(BCB)\bin;$(BCB)\objrepos;$(BCB)\projects;$(BCB)\include;$(BCB)\include\vcl \ + -H -$Y -$W -$O- -v -JPHNV -M +RFLAGS = -DUSEPACKAGES \ + -ij:\cbuilder3\projects;..\ctrlmstr;digitnum;letrerodigital;actimg;$(BCB)\bin;$(BCB)\objrepos;$(BCB)\projects;$(BCB)\include;$(BCB)\include\vcl +AFLAGS = /ij:\cbuilder3\projects /i..\ctrlmstr /idigitnum /iletrerodigital /iactimg \ + /i$(BCB)\bin /i$(BCB)\objrepos /i$(BCB)\projects /i$(BCB)\include \ + /i$(BCB)\include\vcl /dUSEPACKAGES /mx /w2 /zd +LFLAGS = -Lj:\cbuilder3\projects;..\ctrlmstr;..\componentes;digitnum;letrerodigital;actimg;$(BCB)\bin;$(BCB)\objrepos;$(BCB)\projects;$(BCB)\lib\obj;$(BCB)\lib;$(DEBUGLIBPATH) \ + -aa -Tpp -x -Gl -Gi -v soft\jd";"l:\programación (-cbuilder-)\jd \ + soft\jd";l:\cbuilder\cbuilder\objrepos;j:\cbuilder\cbuilder\bin;j:\cbuilder\cbuilder\bin;j:\cbuilder\cbuilder\objrepos;$(BCB)\bin;$(BCB)\objrepos;"j:\cbuilder\jd \ + soft";"j:\progwin95\jd soft";$(BCB)\projects;$(BCB)\lib\obj;$(BCB)\lib;"..\jd \ + soft\jd";"l:\programación (-cbuilder-)\jd \ + soft\jd";l:\cbuilder\cbuilder\objrepos;j:\cbuilder\cbuilder\bin;j:\cbuilder\cbuilder\bin;j:\cbuilder\cbuilder\objrepos;$(BCB)\bin;$(BCB)\objrepos;"j:\cbuilder\jd \ + soft";"j:\progwin95\jd \ + soft";$(BCB)\projects;$(BCB)\lib\obj;$(BCB)\lib;$(DEBUGLIBPATH) soft\jd";"l:\programación (-cbuilder-)\jd soft\jd";l:\cbuilder\cbuilder\objrepos;j:\cbuilder\cbuilder\bin;j:\cbuilder\cbuilder\bin;j:\cbuilder\cbuilder\objrepos;$(BCB)\bin;$(BCB)\objrepos;"j:\cbuilder\jd soft";"j:\progwin95\jd soft";$(BCB)\projects;$(BCB)\lib\obj;$(BCB)\lib;$(DEBUGLIBPATH) \ + soft\jd";"l:\programación (-cbuilder-)\jd \ + soft\jd";l:\cbuilder\cbuilder\objrepos;j:\cbuilder\cbuilder\bin;j:\cbuilder\cbuilder\bin;j:\cbuilder\cbuilder\objrepos;$(BCB)\bin;$(BCB)\objrepos;"j:\cbuilder\jd \ + soft";"j:\progwin95\jd soft";$(BCB)\projects;$(BCB)\lib\obj;$(BCB)\lib;$(DEBUGLIBPATH) +IFLAGS = -g +LINKER = ilink32 +# --------------------------------------------------------------------------- +ALLOBJ = c0pkg32.obj $(PACKAGES) sysinit.obj $(OBJFILES) +ALLRES = $(RESFILES) +ALLLIB = $(LIBFILES) $(LIBRARIES) import32.lib cp32mt.lib +# --------------------------------------------------------------------------- +.autodepend + +!ifdef IDEOPTIONS + +[Version Info] +IncludeVerInfo=1 +AutoIncBuild=1 +MajorVer=1 +MinorVer=0 +Release=0 +Build=69 +Debug=1 +PreRelease=0 +Special=0 +Private=0 +DLL=0 +Locale=3082 +CodePage=1252 + +[Version Info Keys] +CompanyName=JD soft. +FileDescription=Gestión integral de múltiples empresas,\n con múltiples terminales. +FileVersion=1.0.0.69 +InternalName=Tpv for Windows +LegalCopyright=Copyright (C) JD soft. 1990-1998 +LegalTrademarks= +OriginalFilename=Tpv +ProductName=Tpv for Win98 +ProductVersion=1.0.0.0 +Comments=e-mail: Jose-David.Guillen@cs.us.es + +[Excluded Packages] +j:\CBuilder3\Bin\dcl31w35.bpl=Borland 1.0 Compatibility Components +C:\WIN98\SYSTEM\ibsmp35.bpl=Borland C++ InterBase Alerter Component + +[HistoryLists\hlIncludePath] +Count=1 +Item0=..\jd soft\jd;l:\programación (-cbuilder-)\jd soft\jd;l:\cbuilder\cbuilder\objrepos;j:\cbuilder\cbuilder\bin;j:\cbuilder\cbuilder\bin;j:\cbuilder\cbuilder\objrepos;$(BCB)\bin;$(BCB)\objrepos;j:\cbuilder\jd soft;j:\progwin95\jd soft;$(BCB)\projects;$(BCB)\include;$(BCB)\include\vcl + +[HistoryLists\hlLibraryPath] +Count=2 +Item0=..\jd soft\jd;l:\programación (-cbuilder-)\jd soft\jd;l:\cbuilder\cbuilder\objrepos;j:\cbuilder\cbuilder\bin;j:\cbuilder\cbuilder\bin;j:\cbuilder\cbuilder\objrepos;$(BCB)\bin;$(BCB)\objrepos;j:\cbuilder\jd soft;j:\progwin95\jd soft;$(BCB)\projects;$(BCB)\lib\obj;$(BCB)\lib;..\jd soft\jd;l:\programación (-cbuilder-)\jd soft\jd;l:\cbuilder\cbuilder\objrepos;j:\cbuilder\cbuilder\bin;j:\cbuilder\cbuilder\bin;j:\cbuilder\cbuilder\objrepos;$(BCB)\bin;$(BCB)\objrepos;j:\cbuilder\jd soft;j:\progwin95\jd soft;$(BCB)\projects;$(BCB)\lib\obj;$(BCB)\lib;$(DEBUGLIBPATH) +Item1=..\jd soft\jd;l:\programación (-cbuilder-)\jd soft\jd;l:\cbuilder\cbuilder\objrepos;j:\cbuilder\cbuilder\bin;j:\cbuilder\cbuilder\bin;j:\cbuilder\cbuilder\objrepos;$(BCB)\bin;$(BCB)\objrepos;j:\cbuilder\jd soft;j:\progwin95\jd soft;$(BCB)\projects;$(BCB)\lib\obj;$(BCB)\lib + +[HistoryLists\hlUnitAliases] +Count=1 +Item0=WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE + +[Debugging] +DebugSourceDirs= + +[Parameters] +RunParams= +HostApplication= + +!endif + +$(PROJECT): $(OBJFILES) $(RESDEPEN) $(DEFFILE) + $(BCB)\BIN\$(LINKER) @&&! + $(LFLAGS) + + $(ALLOBJ), + + $(PROJECT),, + + $(ALLLIB), + + $(DEFFILE), + + $(ALLRES) +! + +.pas.hpp: + $(BCB)\BIN\dcc32 $(PFLAGS) { $** } + +.pas.obj: + $(BCB)\BIN\dcc32 $(PFLAGS) { $** } + +.cpp.obj: + $(BCB)\BIN\bcc32 $(CFLAG1) $(CFLAG2) -o$* $* + +.c.obj: + $(BCB)\BIN\bcc32 $(CFLAG1) $(CFLAG2) -o$* $** + +.rc.res: + $(BCB)\BIN\brcc32 $(RFLAGS) $< +#----------------------------------------------------------------------------- diff --git a/JD_soft.bpl b/JD_soft.bpl new file mode 100644 index 0000000..f220238 Binary files /dev/null and b/JD_soft.bpl differ diff --git a/JD_soft.cpp b/JD_soft.cpp new file mode 100644 index 0000000..fe83dd9 --- /dev/null +++ b/JD_soft.cpp @@ -0,0 +1,22 @@ +//--------------------------------------------------------------------------- +#include +#pragma hdrstop +USERES("JD_soft.res"); +USEPACKAGE("VCLX35.bpi"); +USEPACKAGE("VCL35.bpi"); +USEUNIT("ActImg\actimg.cpp"); +USERES("ActImg\actimg.dcr"); +USEUNIT("LetreroDigital\LetreroDigital.cpp"); +USERES("LetreroDigital\LetreroDigital.dcr"); +USEUNIT("DigitNum\DigitNum.cpp"); +USERES("DigitNum\DigitNum.dcr"); +//--------------------------------------------------------------------------- +#pragma package(smart_init) +//--------------------------------------------------------------------------- +// Package source. +//--------------------------------------------------------------------------- +int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void*) +{ + return 1; +} +//--------------------------------------------------------------------------- diff --git a/JD_soft.lib b/JD_soft.lib new file mode 100644 index 0000000..a4d0b1d Binary files /dev/null and b/JD_soft.lib differ diff --git a/JD_soft.res b/JD_soft.res new file mode 100644 index 0000000..545c0da Binary files /dev/null and b/JD_soft.res differ diff --git a/LetreroDigital/LetreroDigital.cpp b/LetreroDigital/LetreroDigital.cpp new file mode 100644 index 0000000..81437bd --- /dev/null +++ b/LetreroDigital/LetreroDigital.cpp @@ -0,0 +1,253 @@ +//--------------------------------------------------------------------------- +#include +#include +#pragma hdrstop + +#include "LetreroDigital.h" + +#pragma package(smart_init) +//--------------------------------------------------------------------------- +// ValidCtrCheck is used to assure that the components created do not have +// any pure virtual functions. +// + +static inline TLetreroDigital *ValidCtrCheck() +{ + return new TLetreroDigital(NULL); +} +//--------------------------------------------------------------------------- +__fastcall TLetreroDigital::TLetreroDigital(TComponent* Owner) + : TGraphicControl(Owner) +{ + Width = 96; // Establecemos valores por defecto + Height = 32; + BorderStyle = bsSingle; + TAMx = 8; + TAMy = 16; + AX = 2; + AY = 2; + cLED_ON =clBlack; + cLED_OFF=clYellow; + + FCadena = "JD Soft."; + // Obtenemos la longitud de la frase. ( En d¡gitos ) + Flen = FCadena.Length(); + + // Asignamos memoria para las fuentes RAW + ptr_char = new char[4096]; +// SetFont( "ASCii.FNT" ); + + FBrush = new TBrush; + FBrush -> Color = clRed; + FBrush -> OnChange = CambioAtributo; + + // Creamos un timer y lo asignamos a DibujaLD(); si ActivarLD = true; + FPulsoReloj = new TTimer( this ); + FPulsoReloj->OnTimer = OnTimerHandler; + FPulsoReloj->Interval = 100; + FPulsoReloj->Enabled = true; + FFrecReloj = 100; +} +//--------------------------------------------------------------------------- +void __fastcall TLetreroDigital::OnTimerHandler(TObject *Sender) +{ + DibujaLD( false ); +} +//--------------------------------------------------------------------------- +__fastcall TLetreroDigital::~TLetreroDigital() +{ + delete FBrush; + delete [] ptr_char; + delete FPulsoReloj; +} +//--------------------------------------------------------------------------- +namespace Letrerodigital +{ + void __fastcall PACKAGE Register() + { + TComponentClass classes[1] = {__classid(TLetreroDigital)}; + RegisterComponents("JD Soft.", classes, 0); + } +} +//--------------------------------------------------------------------------- +void __fastcall TLetreroDigital::SetTAM( int NuevoTAMx, int NuevoTAMy ) +{ + TAMx = NuevoTAMx; + TAMy = NuevoTAMy; + if ( TAMx == 0 ) TAMx = 8; + if ( TAMy == 0 ) TAMy = 16; + Invalidate(); // y volver a dibujar el componente +} +//--------------------------------------------------------------------------- +void __fastcall TLetreroDigital::SetFrecReloj( int NuevoReloj ) +{ + if ( NuevoReloj <= 0 ) NuevoReloj = 100; + FFrecReloj = NuevoReloj; + FPulsoReloj -> Interval = FFrecReloj; +} +//--------------------------------------------------------------------------- +void __fastcall TLetreroDigital::SetTAMg( TFPitchFnt Index ) +{ + FPitchFnt = Index; + switch ( Index ) + { + case 3: + TAMx = 8; + TAMy = 8; + break; + case 2: + TAMx = 8; + TAMy = 16; + break; + case 1: + TAMx = 16; + TAMy = 8; + break; + case 0: + TAMx = 16; + TAMy = 16; + break; + default: + TAMx = 8; + TAMy = 16; + } + Height = AY * TAMy; + Invalidate(); +} +//--------------------------------------------------------------------------- +void __fastcall TLetreroDigital::SetCadena( AnsiString NuevaCadena ) +{ + FCadena = NuevaCadena; + // Obtenemos la longitud de la frase. ( En d¡gitos ) + Flen = FCadena.Length(); + Invalidate(); +} +//--------------------------------------------------------------------------- + // Este procedimiento es llamado cada vez que se modifica + // la brocha, el lápiz o el tipo de letra +void __fastcall TLetreroDigital::CambioAtributo( TObject * Sender ) +{ + Invalidate(); // tras lo cual habrá que redibujar el componente +} +//--------------------------------------------------------------------------- +void __fastcall TLetreroDigital::SetBrush( TBrush * NuevoValor ) +{ + FBrush -> Assign( NuevoValor ); + Invalidate(); // y volver a dibujar el componente +} +//--------------------------------------------------------------------------- +void __fastcall TLetreroDigital::SetLED_Color( TColor NuevoValorON, TColor NuevoValorOFF ) +{ + cLED_ON = ( NuevoValorON ); + cLED_OFF = ( NuevoValorOFF ); + Invalidate(); // y volver a dibujar el componente +} +//--------------------------------------------------------------------------- +void __fastcall TLetreroDigital::SetFont( AnsiString NuevoValor ) +{ + fstream fich; + + FFuente = NuevoValor; + + fich.open( FFuente.c_str(), ios::in | ios::binary ); + + if ( !fich ) + { + ShowMessage( "Fallo en la apertura\nFuentes RAW no encontradas" ); + } else { + fich.read( ptr_char, 4096 ); + fich.close(); + Invalidate(); + } +} +//--------------------------------------------------------------------------- +void __fastcall TLetreroDigital::SetAx( int NuevoValor ) +{ + AX = NuevoValor; + Invalidate(); +} +//--------------------------------------------------------------------------- +void __fastcall TLetreroDigital::SetAy( int NuevoValor ) +{ + AY = NuevoValor; + Height = AY * TAMy; + Invalidate(); +} +//--------------------------------------------------------------------------- +void __fastcall TLetreroDigital::Paint() +{ + TRect Area; + + // Preparamos un RECT definiendo el área ocupada por el componente. + Area = GetClientRect(); + + + // Dibujar en el Canvas del componente + + // Establecer la brocha, lápiz y tipo de letra a usar + Canvas -> Brush = FBrush; + + // Rellenamos el área con la trama y color seleccionados + Canvas -> FillRect( Area ); + + FPulsoReloj->Enabled = false; + DibujaLD( true ); + FPulsoReloj->Enabled = true; + +} +//--------------------------------------------------------------------------- +void __fastcall TLetreroDigital::DibujaLD( bool RESET ) +{ + int i, j, k; // Variables de avance + TColor c_elec; // Color en el momento de imprimir + int PosX, PosY; // Posicion fisica final + char LCaract; // Caracter de linea a tratar + char *Frase; + + Frase = FCadena.c_str(); + + if ( RESET ) + { + // Obtenemos la longitud de la frase. ( En d¡gitos ) + Flen = FCadena.Length(); + if ( Flen == 0 ) Flen = 1; + + // Contador de digito actual a cero + BitByte = 0; + // Posicion dentro de la frase + currByte = 0; + } + + // Avance horizontal de bit's ( avance de digitos ) + for ( i = 0; i < ( Width ); i++ ) + { + k = ( (unsigned char)Frase[ ( (i+BitByte)/TAMx + currByte ) % Flen ] ) << 4; + LCaract = ( (char)0x01 << (7 - (i+BitByte)%TAMx) ); + PosX = /*Left + */AX * i; // Posicion f¡sica horizontal + // Avance vertical de bit's + for ( j = 0; j < TAMy; j ++ ) + { + PosY = /*Top + */AY * j; // Posicion f¡sica vertical + + if ( ptr_char[ k + j ] & LCaract ) + c_elec = cLED_ON; + else + c_elec = cLED_OFF; + + Canvas -> Pixels[ PosX ][ PosY ] = c_elec; + } + } + // Tenemos en cuenta el avance dentro de la frase + if ( ( BitByte ++ ) >= 7 ) + { + BitByte = 0; currByte ++; + if ( (unsigned)currByte >= Flen ) + currByte = 0; + } +} +//--------------------------------------------------------------------------- +void __fastcall TLetreroDigital::SetBorderStyle( TBorderStyle NuevoValor ) +{ + FBorderStyle = NuevoValor; + Invalidate(); // y volver a dibujar el componente +} diff --git a/LetreroDigital/LetreroDigital.dcr b/LetreroDigital/LetreroDigital.dcr new file mode 100644 index 0000000..5f80d37 Binary files /dev/null and b/LetreroDigital/LetreroDigital.dcr differ diff --git a/LetreroDigital/LetreroDigital.h b/LetreroDigital/LetreroDigital.h new file mode 100644 index 0000000..6859e69 --- /dev/null +++ b/LetreroDigital/LetreroDigital.h @@ -0,0 +1,92 @@ +//--------------------------------------------------------------------------- +#ifndef LetreroDigitalH +#define LetreroDigitalH +//--------------------------------------------------------------------------- +#include +#include +#include +#include + +//--------------------------------------------------------------------------- +class PACKAGE TLetreroDigital : public TGraphicControl +{ +private: + TBorderStyle FBorderStyle; // Con borde o sin borde + TBrush *FBrush; // Para el relleno del fondo + TColor cLED_ON; // Color de la LED encendida y + TColor cLED_OFF; // apagada + + + + AnsiString FFuente; // Fuente a utilizar ( RAW Format 8x16 ) + AnsiString FCadena; // Cadena a mostrar + char BitByte; // Contador de digito actual a cero + char currByte; // Posición dentro de la frase + int AX, AY; // Ancho X, e Y + unsigned int Flen; // Longitud de la frase + int TAMx, TAMy; // Ancho y Alto de las fuentes ( 8 x 16: Deft. ) + char *ptr_char; // Puntero a la fuente fija RAW. + bool FActivarLD; + TTimer *FPulsoReloj; + int FFrecReloj; + + enum TFPitchFnt { f_16x16, f_16x8, f_8x16, f_8x8 }; + TFPitchFnt FPitchFnt; + + // Cambia la relación segun indice + void __fastcall SetTAMg( TFPitchFnt Index );//, int Index ); + + // Evento OnChange, dirigido a la siguiente función: + void __fastcall CambioAtributo( TObject * Sender ); + + // Dibujo del letrero digital (Desde cero SI/NO) + void __fastcall DibujaLD( bool RESET ); + void __fastcall OnTimerHandler(TObject *Sender); + + +protected: + // Redefinimos el método Paint, que será llamado cada vez + // que sea necesario redibujar el componente. + void __fastcall Paint(); +public: + // Cambia la relación ALTO/ANCHO "at Run Time". + void __fastcall SetAx( int NuevoValor ); + void __fastcall SetAy( int NuevoValor ); + void __fastcall SetBrush( TBrush *NuevoValor ); + void __fastcall SetBorderStyle( TBorderStyle NuevoValor ); + void __fastcall SetLED_Color( TColor NuevoValorON, TColor NuevoValorOFF ); + // Tipo de letra RAW + void __fastcall SetFont( AnsiString NuevoValor ); + // Cambia la relación ALTO/ANCHO. + void __fastcall SetTAM( int NuevoTAMx, int NuevoTAMy ); + // Cambia la cadena a mostrar: "at RunTime" + void __fastcall SetCadena( AnsiString NuevaCadena ); + // Frecuencia del reloj + void __fastcall SetFrecReloj( int NuevoReloj ); + + __fastcall TLetreroDigital(TComponent* Owner); + __fastcall ~TLetreroDigital(); +__published: + __property TBorderStyle BorderStyle = { read = FBorderStyle, write = SetBorderStyle, default=bsSingle }; + __property TBrush *Brush = { read = FBrush, write = SetBrush }; + __property TColor LED_ON = { read = cLED_ON, write = cLED_ON, default = clBlack }; + __property TColor LED_OFF = { read = cLED_OFF, write = cLED_OFF, default = clYellow }; + + __property int FrecReloj = { read = FFrecReloj, write = SetFrecReloj, default = 100 }; + + + + __property Left ; + __property Top ; + __property Width = { default = 96 }; + __property Height = { default = 32 }; + + __property TFPitchFnt PitchFuente = { read = FPitchFnt, write = SetTAMg }; + __property AnsiString FuenteRAW = { read = FFuente, write = SetFont }; + __property AnsiString Letrero = { read = FCadena, write = SetCadena }; + __property int AmplitudX = { read = AX , write = SetAx , default = 2 }; + __property int AmplitudY = { read = AY , write = SetAy , default = 2 }; + // __property bool ActivarLD = { read = FPulsoReloj -> Enabled, write = FPulsoReloj -> Enabled }; +}; +//--------------------------------------------------------------------------- +#endif diff --git a/Project1.exe b/Project1.exe new file mode 100644 index 0000000..e585ae9 Binary files /dev/null and b/Project1.exe differ diff --git a/README.md b/README.md new file mode 100644 index 0000000..9889d21 --- /dev/null +++ b/README.md @@ -0,0 +1,9 @@ +#JdSoft + + +*25/07/1999* + +ToDo: wwtcf? + + +![screenshot](/JdSoft.png "Screenshot")