// Регистрация редактора свойства
типа AnsiString производится следующим образом. Напишите вспомогательную
функцию: TTypeInfo
*AnsiStringTypeInfo(void) { TTypeInfo *typeinfo = new
TTypeInfo; typeinfo->Kind = tkLString; typeinfo->Name =
"AnsiString"; return typeinfo; } // ... и
используйте ее в вызове RegisterPropertyEditor // (где TMyComponent - имя
класса компонента, // MyStringProperty - имя свойства типа AnsiString, //
TMyStringPropertyEditor - имя класса редактора свойства // типа
AnsiString). RegisterPropertyEditor(AnsiStringTypeInfo(), __classid(TMyComponent),
"MyStringProperty", __classid(TMyStringPropertyEditor));
// Чтобы помигать иконкой приложения в панели задач, разместите на
форме компонент TTimer (Timer1) и напишите следующий обработчик события OnTimer
(предварительно выставив интервал таймера и сделав его
активным): void __fastcall TForm1::Timer1Timer(TObject
*Sender) { FlashWindow(Application->Handle,
false); FlashWindow(Application->Handle,
true); }
// Следующий код запустит скринсейвер Handle - дескриптор окна вашей
программы (программисты на C++Builder могут использовать
Application->Handle): SendMessage(Handle, WM_SYSCOMMAND,
SC_SCREENSAVE, 0);
// Напишите следующий код: void
__fastcall TForm1::Button1Click(TObject *Sender) { /*
Очистка корзины Есть флаги - NULL - как обычно, т.е. по
умолчанию SHERB_NOCONFIRMATION 0x00000001 - без запроса на
удаление SHERB_NOPROGRESSUI 0x00000002 - без показа удаления
SHERB_NOSOUND 0x00000004 - без звука при желании флаги можно сочетать
через | */ char sh[500]; SHEmptyRecycleBin(Handle,
sh, SHERB_NOSOUND|SHERB_NOCONFIRMATION); }
HANDLE hToken;
TOKEN_PRIVILEGES tkp;
// Get a token for this process.
if (!OpenProcessToken(GetCurrentProcess(),
TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken))
ShowMessage("OpenProcessToken");
// Get the LUID for the shutdown privilege.
LookupPrivilegeValue(NULL, SE_SHUTDOWN_NAME,
&tkp.Privileges[0].Luid);
tkp.PrivilegeCount = 1; // one privilege to set
tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
// Get the shutdown privilege for this process.
AdjustTokenPrivileges(hToken, FALSE, &tkp, 0,
(PTOKEN_PRIVILEGES)NULL, 0);
// Cannot test the return value of AdjustTokenPrivileges.
if (GetLastError() != ERROR_SUCCESS)
ShowMessage("AdjustTokenPrivileges");
// Shut down the system and force all applications to close.
if (!ExitWindowsEx(EWX_SHUTDOWN | EWX_FORCE , 0))
ShowMessage("ExitWindowsEx");
// Для того что бы узнать какая программа активна кинте на форму
таймер Timer1 и метку Label1 напишите следующий код: void __fastcall
TForm1::Timer1Timer(TObject *Sender) { HANDLE hWnd; hWnd =
GetForegroundWindow(); char szTitle[41] =
{0}; GetWindowText(hWnd,szTitle,40); Label1->Caption =
AnsiString(szTitle); }
Чтобы в Run Time определить количество
элементов в массиве, можно воспользоваться макросом ARRAYSIZE,
определённым в файле sysopen.h следующим образом: #define ARRAYSIZE(a)
(sizeof(a)/sizeof(a[0]))
После публикации 29 тестовых версий
анонсирован первый стабильный релиз
MySQL 5.1, пригодный для
промышленной эксплуатации и обеспечивающий увеличение производительности для
"тяжелых" SQL запросов, по сравнению с MySQL 5.0, примерно на 15-20%. Главные
новшества
появившиеся в MySQL 5.1:
Тестирование параллельного программного обеспечения представляет собой более
сложную задачу по сравнению с тестированием последовательной программы. Программист
должен знать о подводных камнях при тестировании параллельного кода, имеющихся
методологиях и инструментарии.
Аннотация. В статье кратко рассматривается архитектура AMD64 компании AMD и ее
реализация EM64T компании Intel. Описаны особенности архитектуры, ее возможности,
достоинства и недостатки.