Borland C++ VCL FAQ
Страница 7.




Запись содержимого BLOB-поля в файл

Для сохранения содержимого BLOB-поля в файл можно воспользоваться следующим кодом:
TMemoryStream *M1 = new TMemoryStream(); 
TStream *B1 = ADOTable1->CreateBlobStream(ADOTable1->FieldByName("My_field"),bmRead);
M1->CopyFrom(B1,B1->Size);
M1->SaveToFile("h:\\My_file.doc");
delete B1;
delete M1;


Вывод текста по окружности

Нижеприведенная функция выводит текст по кругу:
void DrawCircularText (TCanvas *Canvas, AnsiString asFontName, int iHeight, 
char *szText, int iAngle, int iR, int iCX, int iCY, int iSector)
{
LOGFONT lf;
HFONT hPrevFont, hFont;
int iPass;

iPass = iSector/lstrlen (szText);
ZeroMemory (&lf, sizeof (lf));
for (int i = 0; i < lstrlen (szText); i ++)
{
lf.lfEscapement = 10*iAngle-(10*iPass*(i-1));
lstrcpy (lf.lfFaceName, asFontName.c_str());
lf.lfHeight = iHeight;
hFont = CreateFontIndirect (&lf);
hPrevFont = SelectObject (Canvas->Handle, hFont);
Canvas->TextOut (iCX+iR*sin((-180+iAngle-(i-1)*iPass)*3.14/180),
iCY+iR*cos((-180+iAngle-(i-1)*iPass)*3.14/180),
szText [i]);
hFont = SelectObject(Canvas->Handle, hPrevFont);
DeleteObject (hFont);
}
}

Изменяя аргумент iAngle, вы получаете возможность вращать начальную точку вывода текста, а если изменять агрумент iSector, то можно рисовать текст как по дуге, так и по окружности.

Определение размера свободного пространства на диске

Для определения размера свободного пространства на диске используйте функцию DiskFree, объявленную в Sysutils.hpp. В параметрах функции диску А соответствует 1, диску В - 2, и т. д., 0 - текущий диск.

Следующий код определит размер свободного пространства на диске С в байтах:
__int64 FreeSpace = DiskFree(3);


Как узнать, какой процессор установлен в системе?

Чтобы узнать, какой процессор установлен в системе, используйте следующий код:
AnsiString ProcessorName;
TRegistry *reg = new TRegistry;
reg->RootKey = HKEY_LOCAL_MACHINE;
reg->OpenKey("Hardware\\Description\\System\\CentralProcessor\\0", false);
ProcessorName=reg->ReadString("ProcessorNameString");
delete reg;

В ProcessorName будет находиться название процессора.

Не забудьте подключить в проект Registry.hpp.

Как узнать, присутствует ли мышь в системе?

Чтобы узнать, присутствует ли мышь в системе, прочитайте значение свойства MousePresent класса TMouse, воспользовавшись глобальной переменной Mouse и следующим кодом:
if(Mouse->MousePresent)
// мышь в системе присутствует
else
// мышь в системе отсутствует


Как узнать, присутствует ли у мыши колесико?

Чтобы узнать, присутствует ли у мыши колесико, прочитайте значение свойства WheelPresent класса TMouse, воспользовавшись глобальной переменной Mouse и следующим кодом:
if(Mouse->WheelPresent)
// у мыши есть колесико
else
// колесико у мыли отсутствует


Как определить, над каким элементом в ListBox находится курсор мыши?

Поместите на форму (Form1) компонент TListBox (ListBox1) и напишите следующий обработчик события OnMouseMove:
void __fastcall TForm1::ListBox1MouseMove(TObject *Sender,
TShiftState Shift, int X, int Y)
{
if(ListBox1->ItemAtPos(TPoint(X, Y), true) != -1)
Form1->Caption = ListBox1->Items->Strings[ListBox1->ItemAtPos(TPoint(X, Y), true)];
}

В заголовке формы при движении мыши будут отображаться элементы ListBox1.
 
« Предыдущая статья   Следующая статья »