Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
19
Добавлен:
02.05.2014
Размер:
3.65 Кб
Скачать
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop

#include"FrmCalc.h"
#include"stdlib.h"
#include"UCSU.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TFCalc *FCalc;
//---------------------------------------------------------------------------
__fastcall TFCalc::TFCalc(TComponent* Owner)
	: TForm(Owner)
{
	EDec->OnKeyPress = DecKeyPress;
	EHex->OnKeyPress = HexKeyPress;
	EBin->OnKeyPress = BinKeyPress;
}
//---------------------------------------------------------------------------
void __fastcall TFCalc::BtCloseClick(TObject *Sender)
{
	Close();
}
//---------------------------------------------------------------------------
void __fastcall TFCalc::DecKeyPress(TObject *Sender, char &Key)
{
	Set  <char, 0, 255> Dig;
	Dig << '0' << '1' << '2' << '3' << '4';
   Dig << '5' << '6' << '7' << '8' << '9' << VK_BACK;
	if (!Dig.Contains(Key))
	{
		Key = 0;
   	Beep();
   }
}
void __fastcall TFCalc::HexKeyPress(TObject *Sender, char &Key)
{
	Set  <char, 0, 255> Dig;
	Dig << '0' << '1' << '2' << '3' << '4';
   Dig << '5' << '6' << '7' << '8' << '9';
   Dig << 'A' << 'B' << 'C' << 'D' << 'E' << 'F';
   Dig << 'a' << 'b' << 'c' << 'd' << 'e' << 'f' << VK_BACK;
	if (!Dig.Contains(Key))
	{
		Key = 0;
   	Beep();
   }
}
void __fastcall TFCalc::BinKeyPress(TObject *Sender, char &Key)
{
	Set  <char, 0, 255> Dig;
	Dig << '0' << '1' << VK_BACK;
	if (!Dig.Contains(Key))
	{
		Key = 0;
   	Beep();
   }
}
AnsiString DecToHex(AnsiString str)
{
   AnsiString result;
   char *hex_digits = "0123456789ABCDEF";
   result = "";
   DWORD ci, cj, k, remainder, dividend;
   while(str.Length() > 0)
   {
      remainder = 0;
      for(cj = 1; cj <= str.Length(); cj++)
      {
      	k = (BYTE)str[cj]-48;
         dividend = 10*remainder+k;
         remainder = dividend%16;
         str[cj] = hex_digits[int(dividend/16.0)];
      }
      str.Delete(1, 1);
      result += hex_digits[remainder];
   }
   result = strrev(result.c_str());
   while(result.Length() > 1 && result[1] == '0')
   	result.Delete(1, 1);
   return result;
}
AnsiString HexToBin(AnsiString str)
{
   AnsiString result = "";
   DWORD ci;
   for(ci = 1; ci <= str.Length(); ci++)
   	switch(str[ci])
      {
      	case '0': result += "0000"; break;
      	case '1': result += "0001"; break;
      	case '2': result += "0010"; break;
      	case '3': result += "0011"; break;
      	case '4': result += "0100"; break;
      	case '5': result += "0101"; break;
      	case '6': result += "0110"; break;
      	case '7': result += "0111"; break;
      	case '8': result += "1000"; break;
      	case '9': result += "1001"; break;
      	case 'A':
      	case 'a': result += "1010"; break;
      	case 'B':
      	case 'b': result += "1011"; break;
      	case 'C':
      	case 'c': result += "1100"; break;
      	case 'D':
      	case 'd': result += "1101"; break;
      	case 'E':
      	case 'e': result += "1110"; break;
      	case 'F':
      	case 'f': result += "1111"; break;
      }
   while(result.Length() > 1 && result[1] == '0')
   	result.Delete(1, 1);
   return result;
}
void __fastcall TFCalc::EDecChange(TObject *Sender)
{
	EHex->Text = DecToHex(EDec->Text);
	EBin->Text = HexToBin(EHex->Text);
   EScrm->Text = Form_Kod->Scrembler(EBin->Text,
                                  Form_Kod->RadioGroup1->ItemIndex);
}
//---------------------------------------------------------------------------
Соседние файлы в папке Source