Советы, трюки и секреты для Blogger.com блоггеров. Все для Blogspot. Советы, трюки и секреты для Blogger.com блоггеров. Все для Blogspot.

Оконный интерфейс VCL

05 июня 2010, 21:23

Задание. Продемонстрировать использование компонентов VCL среды разработки C++ Builder для решения задачи вашего варианта. При выполнении задания постарайтесь задействовать достаточно большое количество различных компонентов, все они должны использоваться разумно.Также вы должны контролировать формат и корректность всех вводимых пользователем данных и в случае ошибки, сообщать ему об этом.Программа также должна закрываться при нажатии клавиши ESC. Вы можете использовать компоненты TLabelTButtonTEditTComboBoxTListBoxTGroupBoxTRadioButtonTRadioGroupTPanelTMemo и др. Для выполнения лабораторный работы в качестве информационных источников можно использовать видеолекции из папки Video на сетевом диске и ранее выданные электронные книги по С++ Builder.
 
Вариант 8. Программа перевода целых чисел между десятичной, двоичной, восьмеричной и шестнадцатеричной системами счисления.

Code:

//---------------------------------------------------------------------------


#include < vcl.h >
#include < stdlib.h >
#include < math.h >
#include < stdio.h >

#pragma hdrstop

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
// Перевод строки S (шестнадцатеричного числа) в десятичное число
int HexToInt(AnsiString S)
{
int i=0,k=1,b;
for (int j=S.Length();j>=1;j--)
 {
   if (S[j]=='0')b=0;
   if (S[j]=='1')b=1;
   if (S[j]=='2')b=2;
   if (S[j]=='3')b=3;
   if (S[j]=='4')b=4;
   if (S[j]=='5')b=5;
   if (S[j]=='6')b=6;
   if (S[j]=='7')b=7; // Перехватов Д. 09МОС(у)
   if (S[j]=='8')b=8;
   if (S[j]=='9')b=9;
   if (S[j]=='a')b=10;
   if (S[j]=='b')b=11;
   if (S[j]=='c')b=12;
   if (S[j]=='d')b=13;
   if (S[j]=='e')b=14;
   if (S[j]=='f')b=15;
   i=i+b*k;
 k*=16;
 }
 return i;
}
void __fastcall TForm1::Button1Click(TObject *Sender)
{
if (Edit1->Text == "")
{
ShowMessage("Ощибка! Вы не указали число."); return;

}
AnsiString pro = Edit1->Text;
int leng = pro.Length();
if( leng >=10)
{
ShowMessage("Ощибка! Слишком большое значение."); return;
}
int base;
int num  = 0;// StrToInt(Edit1->Text);
int sym=0;
bool gg = false;
// Перевод из двоичной системы счисления в десятичную
if (RadioButton2->Checked) {
int a = StrToInt(Edit1->Text);
int k = 0;
while (a > 0)
{
int r = a % 10;
a = a / 10;
sym  = sym + r*pow(2,k);
k++;
}
num = sym;   gg = true;
}

// см выше функция перевода шестнадцатеричного в десятичное
if (RadioButton3->Checked) {
AnsiString s1 = Edit1->Text;
num = HexToInt(s1);
gg = true;
}
// Перевод восьмеричной в десятичную
if (RadioButton4->Checked) {
int a = StrToInt(Edit1->Text);
int k = 0;
while (a > 0)
{
int r = a % 10;
a = a / 10;
sym  = sym + r*pow(8,k);
k++;
}
num = sym;   gg = true;
}
if (RadioButton1->Checked) {
  num  = StrToInt(Edit1->Text);
}
if ((RadioButton1->Checked || gg)&& RadioButton5->Checked) {
   base = 10;

}
if ((RadioButton1->Checked || gg)&& RadioButton6->Checked) {
   base = 2;

}
if ((RadioButton1->Checked || gg)&& RadioButton7->Checked) {
   base = 16;

}
if ((RadioButton1->Checked || gg)&& RadioButton8->Checked) {
   base = 8;

}

char s[500];
itoa (num, s, base); /* Переводит десятичное число num, записываем его в строку s, с основание base */
Edit2->Text = s;



}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormKeyDown(TObject *Sender, WORD &Key, TShiftState Shift)
{
if (Key == VK_ESCAPE)
Close();
}
// Проверка ввода, позволяет ввести только возможные символы той или иной сс
void __fastcall TForm1::Edit1KeyPress(TObject *Sender, wchar_t &Key)
{
if (RadioButton1->Checked)
{
  if (Key != '9' && Key != '8' && Key != '7' && Key != '6' && Key != VK_BACK && Key != '5' && Key != '4' &&
  Key != '3' && Key != '2' && Key != '1' && Key != '0')
  {
  Key = VK_CANCEL;
  }

}
if (RadioButton2->Checked)
{
  if (Key != '1' && Key != '0' && Key != VK_BACK)
  {
  Key = VK_CANCEL;
  }
// Перехватов Д. 09МОС(у)
}
if (RadioButton4->Checked)
{
  if (Key != '7' && Key != '6' && Key != VK_BACK && Key != '5' && Key != '4' &&
  Key != '3' && Key != '2' && Key != '1' && Key != '0')
  {
  Key = VK_CANCEL;
  }

}

if (RadioButton3->Checked)
{
  if (Key != '7' && Key != '6' && Key != VK_BACK && Key != '5' && Key != '4' &&
  Key != '3' && Key != '2' && Key != '1' && Key != '0' && Key != '8'
  && Key != '9' && Key != 'a' && Key != 'b' &&
  Key != 'c' && Key != 'd' && Key != 'e' && Key != 'F')
  {
  Key = VK_CANCEL;
  }

}
 }


void __fastcall TForm1::RadioButton1Click(TObject *Sender)
{
if (RadioButton1->Checked)
{
  Label3->Caption = "Возможные символы { 1,2,3,4,5,6,7,8,9 }";
}
if (RadioButton2->Checked)
{
  Label3->Caption = "Возможные символы { 1,0 }";
}
if (RadioButton3->Checked)
{
  Label3->Caption = "Возможные символы { 1,2,3,4,5,6,7,8,9,a,b,c,d,e,f }";
}
if (RadioButton4->Checked)
{
  Label3->Caption = "Возможные символы { 1,2,3,4,5,6,7 }";
}
   Edit1->Text = "";

}
//---------------------------------------------------------------------------



void __fastcall TForm1::RadioButton5Click(TObject *Sender)
{
   Edit2->Text = "";
}
//---------------------------------------------------------------------------

 

Оконный интерфейс VCL