Различные примеры кода на C++Builder

<< обратно


1. Иногда для работы бывает полезнее хранить и обрабатывать даты в виде целых чисел
Предлагаемая функция переводит указанную дату: число, месяц и год в целое число int
от начала года (так например 1 января 2002 — это число 1, и т.д. до 365 или 366)

// ----- перевод даты Год-Месяц-Число в число int номер от начала года

int TFMain::FindDateNum(int Year, int Month, int Day)
{
int kdm[] = {31,28,31,30,31,30,31,31,30,31,30,31};
// если год високосный, то в феврале 29 дней
if(Year%4 == 0) kdm[1] = 29;
int NumDay = 0;
for(int i=1; i<Month; i++) NumDay += kdm[i-1];
NumDay += Day;
return NumDay;
}

//----- использование этой функции

{
Word Year1, Day1, Month1, Year2, Day2, Month2;
DecodeDate(DateTimePicker1->Date, Year1, Month1, Day1);
DecodeDate(DateTimePicker2->Date, Year2, Month2, Day2);
int dat1 = FindDateNum(Year1, Month1, Day1);
int dat2 = FindDateNum(Year2, Month2, Day2);
}


2. Программый переход в последовательности табуляции на следующий элемент,
например по нажатию кнопки ENTER

//----- переход в последовательности табуляции для оконных компонентов по Enter
void __fastcall TForm1::FormKeyDown(TObject *Sender, WORD &Key,
TShiftState Shift)
{
if(Key == VK_RETURN) {
    TWinControl* tabU = Form1->ActiveControl;
    FindNextControl(tabU,true,true,false)->SetFocus();
    }
}

//----- или так для одного компонента
void __fastcall TForm1::Edit1KeyPress(TObject *Sender, char &Key)
{
     if(Key == VK_RETURN){
        FindNextControl((TWinControl*)Sender,true,true,false)->SetFocus();
        }
}




3. Как получить сведения о видеорежиме монитора (разрешение, число цветов, частота )
и изменить их.

Используя функции GetDeviceCaps() и ChangeDisplaySettings().
Смотрите пример (4 Кб ) для C++Builder.


4. Как вообще получить сведения о системе (число кнопок у мыши и т.д.)

Используйте функцию GetSystemMetrics().
Смотрите пример ( 4 Кб ) для C++Builder.


5. Запустить почтовый клиент

void __fastcall TForm1::Button1Click(TObject *Sender)
{
   ShellExecute(Handle,NULL,"mailto:support@cbuilder.ru?subject=Tema",
                NULL,NULL,SW_SHOWNORMAL);
}


6. Запустить браузер Internet Explorer (или Netscape Navigator или Opera или ...)

void __fastcall TForm1::Button2Click(TObject *Sender)
{
   ShellExecute(Handle,NULL,"http://rxlib.ru",NULL,NULL,SW_SHOWNORMAL);
}


7. Узнать откуда запускается программа можно разными способами

Label1->Caption = Application->ExeName;
Label2->Caption = ParamStr(0);
Label3->Caption = GetCurrentDir(); // текущая папка ( может измениться !)


8. Программная очистка корзины ( для Windows 98 )

void __fastcall TForm1::Button8Click(TObject *Sender)
{
/* Очистка корзины
Есть флаги — NULL — как обычно, т.е. по умолчанию
SHERB_NOCONFIRMATION 0x00000001 — без запроса на удаление
SHERB_NOPROGRESSUI 0x00000002 — без показа удаления
SHERB_NOSOUND 0x00000004 — без звука
при желании флаги можно сочетать через |
*/
char sh[500];
SHEmptyRecycleBin(Handle, sh, SHERB_NOSOUND|SHERB_NOCONFIRMATION);
}


9. Получить данные о пользователе и имени компьютере, например в компонент типа TMemo

// получение имени пользователя компьютера и т.д.
// 1. можно из реестра
// 2. можно LookupAccountName()
// 3. ,а можно и GetUserName():
char lpBuffer1[100],lpBuffer2[100];
LPDWORD nSize1 = new DWORD(99);
LPDWORD nSize2 = new DWORD(99);
GetUserName(lpBuffer1,nSize1); // имя пользователя
GetComputerName(lpBuffer2,nSize2); // имя компьютера
Label4->Caption = "Имя пользователя: " + AnsiString(lpBuffer1);
Label5->Caption = "Имя компьютера: " + AnsiString(lpBuffer2);
delete nSize1; delete nSize2;

// получение информации об использовании ОЗУ памяти
MEMORYSTATUS ms;
GlobalMemoryStatus(&ms);

Memo2->Clear();
Memo2->Lines->Add("\tMemory Status:"); Memo2->Lines->Add("");
Memo2->Lines->Add(IntToStr(ms.dwLength)+" — sizeof(MEMORYSTATUS)");
Memo2->Lines->Add(IntToStr(ms.dwMemoryLoad)+" — percent of memory in use");
Memo2->Lines->Add(IntToStr(ms.dwTotalPhys/1024) +" — Kbytes of physical memory");
Memo2->Lines->Add(IntToStr(ms.dwAvailPhys/1024)+" — physical memory Kbytes");
Memo2->Lines->Add(IntToStr(ms.dwTotalPageFile/1024)+" — Kbytes of paging file");
Memo2->Lines->Add(IntToStr(ms.dwAvailPageFile/1024)+" — free Kbytes of paging file");
Memo2->Lines->Add(IntToStr(ms.dwTotalVirtual/1024) +" — user Kbytes of address space");
Memo2->Lines->Add(IntToStr(ms.dwAvailVirtual/1024) +" — free user Kbytes");


10. Запуск внешней программы методом Create Process

TStartupInfo si;
TProcessInformation pi;
AnsiString cmdline;

ZeroMemory(&si,sizeof(si)); si.cb = sizeof(si);

cmdline = "c:\\Proga.exe"; // запускаем эту программу

if (!CreateProcess( NULL, // No module name (use command line).
cmdline.c_str(), // Command line.
NULL, // Process handle not inheritable.
NULL, // Thread handle not inheritable.
false, // Set handle inheritance to FALSE.
0, // No creation flags.
NULL, // Use parent's environment block.
NULL, // Use parent's starting directory.
&si, // Pointer to STARTUPINFO structure.
&pi )) // Pointer to PROCESS_INFORMATION structure.

{ ShowMessage("CreateProcess failed."); }
else { ShowMessage("Ok !"); }


11. Часы на экране, точность — минуты

//----- компонент LTime типа TLabel
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
   LTime->Caption = FormatDateTime("hh:nn",Time());
   Timer1->Interval=60000; // меньше число, больше точность
}
//-----


12. Программное переключение раскладки клавиатуры

LoadKeyboardLayout("00000409", KLF_ACTIVATE); // Английская
LoadKeyboardLayout("00000419", KLF_ACTIVATE); // Русская


<< обратно