First commit 25/07/1999

This commit is contained in:
José David Guillén 2021-09-12 22:11:31 +02:00
commit 52703a7441
22 changed files with 1447 additions and 0 deletions

150
ActImg/Copia de actimg.cpp Normal file
View File

@ -0,0 +1,150 @@
//---------------------------------------------------------------------------
#include <vcl\vcl.h>
#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;
}
}
//---------------------------------------------------------------------------

58
ActImg/Copia de actimg.h Normal file
View File

@ -0,0 +1,58 @@
//---------------------------------------------------------------------------
#ifndef ActImgH
#define ActImgH
//---------------------------------------------------------------------------
#include <vcl\SysUtils.hpp>
#include <vcl\Controls.hpp>
#include <vcl\Classes.hpp>
#include <vcl\Forms.hpp>
#include <vcl\ExtCtrls.hpp>
//---------------------------------------------------------------------------
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

168
ActImg/actimg.cpp Normal file
View File

@ -0,0 +1,168 @@
//---------------------------------------------------------------------------
#include <vcl\vcl.h>
#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 );
}

BIN
ActImg/actimg.dcr Normal file

Binary file not shown.

72
ActImg/actimg.h Normal file
View File

@ -0,0 +1,72 @@
//---------------------------------------------------------------------------
#ifndef ActImgH
#define ActImgH
//---------------------------------------------------------------------------
#include <vcl\SysUtils.hpp>
#include <vcl\Controls.hpp>
#include <vcl\Classes.hpp>
#include <vcl\Forms.hpp>
#include <vcl\ExtCtrls.hpp>
//---------------------------------------------------------------------------
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

BIN
ActImg/actimg.obj Normal file

Binary file not shown.

341
DigitNum/DigitNum.cpp Normal file
View File

@ -0,0 +1,341 @@
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include <math.h>
#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
}

BIN
DigitNum/DigitNum.dcr Normal file

Binary file not shown.

72
DigitNum/DigitNum.h Normal file
View File

@ -0,0 +1,72 @@
//---------------------------------------------------------------------------
#ifndef DigitNumH
#define DigitNumH
//---------------------------------------------------------------------------
#include <SysUtils.hpp>
#include <Controls.hpp>
#include <Classes.hpp>
#include <Forms.hpp>
//---------------------------------------------------------------------------
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

View File

@ -0,0 +1,48 @@
//---------------------------------------------------------------------------
#include <vcl.h>
#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; i<nOwner->ComponentCount; i ++ )
{
if ( nOwner->Components[i]->ClassNameIs( "TButton" ) )
{
//cast the component to a TButton *
button = (TButton *)(nOwner->Components[i]);
}
}
}
//---------------------------------------------------------------------------

View File

@ -0,0 +1,22 @@
//---------------------------------------------------------------------------
#ifndef ElasticFormH
#define ElasticFormH
//---------------------------------------------------------------------------
#include <SysUtils.hpp>
#include <Controls.hpp>
#include <Classes.hpp>
#include <Forms.hpp>
//---------------------------------------------------------------------------
class PACKAGE TElasticForm : public TControl
{
private:
TComponent * nOwner;
protected:
public:
void __fastcall ResizeALL(void);
__fastcall TElasticForm(TComponent* Owner);
__published:
};
//---------------------------------------------------------------------------
#endif

BIN
JD_soft.bpi Normal file

Binary file not shown.

140
JD_soft.bpk Normal file
View File

@ -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) $<
#-----------------------------------------------------------------------------

BIN
JD_soft.bpl Normal file

Binary file not shown.

22
JD_soft.cpp Normal file
View File

@ -0,0 +1,22 @@
//---------------------------------------------------------------------------
#include <vcl.h>
#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;
}
//---------------------------------------------------------------------------

BIN
JD_soft.lib Normal file

Binary file not shown.

BIN
JD_soft.res Normal file

Binary file not shown.

View File

@ -0,0 +1,253 @@
//---------------------------------------------------------------------------
#include <fstream.h>
#include <vcl.h>
#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
}

Binary file not shown.

View File

@ -0,0 +1,92 @@
//---------------------------------------------------------------------------
#ifndef LetreroDigitalH
#define LetreroDigitalH
//---------------------------------------------------------------------------
#include <vcl\SysUtils.hpp>
#include <vcl\Controls.hpp>
#include <vcl\Classes.hpp>
#include <vcl\Forms.hpp>
//---------------------------------------------------------------------------
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

BIN
Project1.exe Normal file

Binary file not shown.

9
README.md Normal file
View File

@ -0,0 +1,9 @@
#JdSoft
*25/07/1999*
ToDo: wwtcf?
![screenshot](/JdSoft.png "Screenshot")