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



Закрашивание отдельной ячейки в StringGrid

Для закрашивания отдельной ячейки в StringGrid напишите следующий обработчик события OnDrawCell StringGrid (Form1 - форма, на которой размещен StringGrid1, StringGrid1 - экземпляр TStringGrid, ячейка которого закрашивается):
void __fastcall TForm1::StringGrid1DrawCell(TObject *Sender, int ACol,
int ARow, TRect &Rect, TGridDrawState State)
{
if(ACol == 2 && ARow == 2) // определяем конкретную ячейку
{
StringGrid1->Canvas->Brush->Color = clRed;
StringGrid1->Canvas->FillRect(Rect);
}
}


Сколько мониторов установлено в системе?

Для того, чтобы узнать, сколько мониторов установлено в системе, используйте следующий код:
int MonitorCount = Screen->MonitorCount;


Прокрутка ListBox на одну строку вверх

Чтобы программно прокрутить содержимое списка (TListBox) на одну строку вверх, напишите следующий код:
SendMessage(ListBox1->Handle, WM_VSCROLL, SB_LINEUP, 0);
где ListBox1 - имя вашего списка.

Перемещение формы мышью не за заголовок

Чтобы перемещать форму мышью не за заголовок, напишите следующий обработчик события OnMouseDown формы
void __fastcall TForm1::FormMouseDown(TObject *Sender, TMouseButton Button,
TShiftState Shift, int X, int Y)
{
long SC_DRAGMOVE = 0xF012;
if(Button == mbLeft)
{
ReleaseCapture();
SendMessage(Handle, WM_SYSCOMMAND, SC_DRAGMOVE, 0);
}
}


Получение списка компьютеров в сети

BOOL EnumHandler( HWND hWnd, DWORD dwLevel, LPNETRESOURCE lpNet ) 
{
BOOL ret=TRUE;
DWORD dwStatus, dwSize, dwEntries, i, j;
LPSTR lpStr=NULL;
LPNETRESOURCE lpNewNet=NULL;
HANDLE hEnum=NULL;

dwStatus = WNetOpenEnum( RESOURCE_GLOBALNET,
RESOURCETYPE_ANY,
0, lpNet, &hEnum );
if( dwStatus != NO_ERROR ){ ret=FALSE; goto mend; }
dwEntries = 1000;
dwSize = sizeof(NETRESOURCE) * dwEntries;
lpNewNet=(LPNETRESOURCE)new char[dwSize];
if(!lpNewNet){ ret=FALSE; goto mend; }
dwStatus = WNetEnumResource( hEnum, &dwEntries, (LPVOID)lpNewNet, &dwSize );

if( dwStatus != NO_ERROR )
{
ret=FALSE; goto mend;
}
WNetCloseEnum( hEnum );
hEnum=NULL;

lpStr=new char[512];
if(!lpStr){ ret=FALSE; goto mend; }
for( i = 0; i < dwEntries; i++ )
{
if( lpNewNet[ i ].dwDisplayType==RESOURCEDISPLAYTYPE_NETWORK)
{
strcpy( lpStr, lpNewNet[ i ].lpProvider );
}

if( lpNewNet[ i ].lpRemoteName )
{
if( lpNewNet[ i ].dwDisplayType == RESOURCEDISPLAYTYPE_DOMAIN )
strcpy( lpStr, "Domain..." );

if( lpNewNet[ i ].dwDisplayType == RESOURCEDISPLAYTYPE_GENERIC )
strcpy( lpStr, "Generic.." );

if( lpNewNet[ i ].dwDisplayType == RESOURCEDISPLAYTYPE_SERVER )
strcpy( lpStr, "Server..." );

if( lpNewNet[ i ].dwDisplayType == RESOURCEDISPLAYTYPE_SHARE )
strcpy( lpStr, "Share...." );

for( j = 0; j < dwLevel; j++ )
strcat( lpStr, "......" );
strcat( lpStr, lpNewNet[ i ].lpRemoteName );
//Добавим IP адрес к концу строки
// if( lpNewNet[ i ].dwDisplayType == RESOURCEDISPLAYTYPE_SERVER )
// if(!GetIP(&lpNewNet[ i ].lpRemoteName[2],lpStr))continue;
}
SendMessage( hWnd, LB_ADDSTRING, 0,(LPARAM)lpStr );
UpdateWindow(hWnd);
// Уровень детализации вы сможете установить здесь
if(dwLevel < 2) //0=Сеть,1=Domain,2=Host,3=Resource
EnumHandler( hWnd, dwLevel + 1, lpNewNet + i );
}
mend:
if(hEnum)WNetCloseEnum( hEnum );
if(lpStr)delete lpStr;
if(lpNewNet)delete lpNewNet;
return ret;
}
//-------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
HCURSOR hOldCursor;
// ListBox1->Clear();
SendMessage(Form1->ListBox1->Handle , LB_RESETCONTENT, 0, 0 );
UpdateWindow(Form1->ListBox1->Handle);
hOldCursor = ::SetCursor( LoadCursor( NULL, IDC_WAIT ) );
EnumHandler( Form1->ListBox1->Handle, 0, NULL );
::SetCursor( hOldCursor );
}

 
« Предыдущая статья   Следующая статья »