//---------------------------------------------------------------------------
// Проект 37. Рисованный 7-сегментный индикатор
// Цифра 0…F → сегменты, отрисовка на Canvas.
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner)
{
}
//---------------------------------------------------------------------------

// Таблица сегментов a…g для цифр 0..F в один байт (бит на сегмент).
// segMask — ядро, проверяется тестом на нескольких цифрах.
unsigned char segMask(int digit)
{
    static const unsigned char T[16]={
        0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,
        0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71};
    return (digit>=0&&digit<16)?T[digit]:0;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ButtonShowClick(TObject *Sender)
{
    int d=StrToIntDef("0x"+EditDigit->Text,0) & 0xF;
    unsigned char m=segMask(d);
    TCanvas *c=PaintBox1->Canvas;
    c->Brush->Color=clBlack; c->FillRect(PaintBox1->ClientRect);
    c->Pen->Width=6; 
    // a
    c->Pen->Color=(m&0x01)?clRed:(TColor)RGB(40,0,0); c->MoveTo(30,20); c->LineTo(80,20);
    // b
    c->Pen->Color=(m&0x02)?clRed:(TColor)RGB(40,0,0); c->MoveTo(80,20); c->LineTo(80,70);
    // c
    c->Pen->Color=(m&0x04)?clRed:(TColor)RGB(40,0,0); c->MoveTo(80,70); c->LineTo(80,120);
    // d
    c->Pen->Color=(m&0x08)?clRed:(TColor)RGB(40,0,0); c->MoveTo(30,120); c->LineTo(80,120);
    // e
    c->Pen->Color=(m&0x10)?clRed:(TColor)RGB(40,0,0); c->MoveTo(30,70); c->LineTo(30,120);
    // f
    c->Pen->Color=(m&0x20)?clRed:(TColor)RGB(40,0,0); c->MoveTo(30,20); c->LineTo(30,70);
    // g
    c->Pen->Color=(m&0x40)?clRed:(TColor)RGB(40,0,0); c->MoveTo(30,70); c->LineTo(80,70);
}
//---------------------------------------------------------------------------
